好玩的nc命令

1.引子

一个应用的启动脚本在6上正常,但在7上就不正常了,检查后发现是nc在6和7上的使用方式发生了变化,如下是在6上的一段启动脚本

nohup java ...  &        //1.启动java进程并放到后台

COUNT=0
while [ $COUNT -lt 1 ]; do  //2.循环检查标志端口是否起来
    echo -e ".\c"
    sleep 1
    if [ -n "$SERVER_PORT" ]; then
        if [ "$SERVER_PROTOCOL" == "dubbo" ]; then
            COUNT=`echo status | nc -i 1 127.0.0.1 $SERVER_PORT | grep -c OK`    //需要改动的地方
        else
            COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
        fi
    else
        COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
    fi
    if [ $COUNT -gt 0 ]; then
        break
    fi
done

echo "OK!"

上一行在7上改为如下

COUNT=`(echo status;sleep 1) | nc 127.0.0.1 $SERVER_PORT  2> /dev/null | grep -c OK` 

下面来解释一下:

1. nc的交互

nc交互.png

2.首先在6上man nc,参数i其解释为: specifies a delay time interval between lines of text sent and received(指定发送和接收的文本行之间的延迟时间间隔),但是在7上其作用已经发生了变化
直接使用echo status | nc 127.0.0.1 21553没有任何结果
这样我们明白了,我们通过(echo status;sleep 1) | nc ... 完成了"发送和接收的交互",只发送数据而"不延迟这一次交互的时间"是无法收到结果的

3.为何要在7上增加 2> /dev/null ?:因为在7上如果端口没有被监听是会有错误输出结果的,而在6上没有任何输出,所以将错误输出重定向了

nc报错输出结果.png

2. nc的使用

因为nc在不同的系统版本上用法是不一样的,所以在具体的使用场景下需要具体对待
参考文档: https://linux.cn/article-9190-1.html

1.端口扫描

$ nc -v -z -w 3 ip_addr port

# 但CentOS7新版的nc命令已取消了-z, 需输入重定向 < /dev/null
# 此方法在旧版本和新版本上都适用
$ nc -v ip_addr port </dev/null

2.客户端/服务端模式

# 在一个控制台,使用nc监听一个指定端口
$ nc -l 1234
# 在第二个控制台(或者第二台机器上),连接到监听的机器和端口上
$ nc 192.168.181.129 1234

端口间就会有个连接了。第二个控制端上面的任何输入都会传送到第一个上面,反之亦然。
在连接被建立之后,nc是不管哪边是服务端哪边是客户端的。使用EOF(‘^D’)可以中断连接。

3.传输文件和目录

3.1 将文件传到服务器监听的端口上
使用nc监听一个端口,捕捉到的输出重定向到一个文件中
$ nc -l 1234 > filename.out

第二台机器,连接到nc进程,导入一个文件数据来传输
$ nc host.example.com 1234 < filename.in

3.2 将文件传到本地服务器监听的端口上
使用nc监听一个端口,并将文件传入

$ nc -l 1234 < file_in

# 新版本的nc通过--send-only 选项指定文件传送完后关闭连接
$ nc -l 1234 --send-only < hh.py

第二台机器,连接到nc进程,指定一个文件名来接收

$ nc ip_addr 1234 > file_out

# 新版本的nc通过--recv-only 选项指定文件接收完后关闭连接
$ nc 192.168.181.129 1234 --recv-only > aaaa

4.与服务交互

有时候手动与服务器交互相比较使用用户接口是比较有用的。在troubleshooting的时候很有帮助。比如,接收web站点的主页时:
$ echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
比如最开始的脚本中的这一行(echo status;sleep 1) | nc 127.0.0.1 $SERVER_PORT就是与服务的交互

5.通过nc创建后门

创建后门的命令为(在6上没找到这个功能):
nc -l 1234 -e /bin/bash

创建后门:



连接已创建后门的服务器:


6.通过nc进行端口转发

以上是nc的一些常用用法,还有一些其他用法可自行搜索

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 4,525评论 0 11
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,618评论 0 10
  • 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) CM...
    小明yz阅读 2,624评论 0 8
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 4,980评论 0 11
  • 命令简介 cmd是command的缩写.即命令行 。 虽然随着计算机产业的发展,Windows 操作系统的应用越来...
    Littleston阅读 3,262评论 0 12