0%

命令_nc

netcat——瑞士军刀

1. 功能

  1. TCP服务端客户端
  2. 网络测试
  3. ssh的SOCKS或HTTP代理
  4. 简单的端口扫描

2. 一些命令

  • -4:只使用IPv4地址
  • -6:只是用IPv6地址
  • -b:允许广播
  • -C:使用CRLF作为行的结尾
  • -D:启动debug
  • -d:不从标准输入中读取
  • -I length:设置TCP接收缓冲区大小
  • -i interval:在发送和接收数据包之间设置时间间隔,也在连接到多个端口的时候设置时间间隔
  • -k: 强制nc在连接到1个端口之后监听等待1个连接到来。跟-l配合使用
  • -l: 监听模式
  • -n:不在任何地址、主机名、端口上做DNS(直接是数字形式的)
  • -O length: 设置TCP发送缓冲区大小
  • -P proxy_username: 连接到proxy的时候提供用户名来验证
  • -p source_port:设置源端口
  • -q seconds: 在标准输入发送EOF后,等待这些秒,如果是负数,就一直等下去
  • -r: 让源/目的端口随机,不让在一个范围内分配
  • -S:开启RFC 2385 TCP MD5 signature option
  • -s source: 设置源地址,如果是unix domain socket,就指定文件
  • -T toskeyword:改变IPv4的TOS字段
  • -U:使用unix domain socket
  • -u:使用udp,而不是默认的TCP。不用-s指定的话,会在/tmp目录下新建临时文件
  • -V rtable: 设置使用的路由表
  • -v: verbose输出
  • -w timeout: 向外连接的时候设置超时时间
  • -X proxy_protocol: 设置代理协议,4” (SOCKS v.4), “5” (SOCKS v.5) and “connect”(HTTPS proxy)。默认是5
  • -x proxy_address[:port]:设置连接的代理地址
  • -Z:DCCP模式
  • -z: 只是扫描一下监听端口,而不发送任何数据。

3. 简单的用法

1. 设置TCP服务端和客户端

1
2
3
4
5
6
7
服务端:
# rm -f /tmp/f; mkfifo /tmp/f
# cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

客户端:
$ nc host.example.com 1234
$ (shell prompt from host.example.com)

2. 文件传输

1
2
3
4
5
一端
$ nc -l 1234 > filename.out

另一端:
$ nc host.example.com 1234 < filename.in

3. 连接服务器

1
2
3
4
5
6
7
8
9
$ nc [-C] localhost 25 << EOF
HELO host.example.com
MAIL FROM:<user@host.example.com>
RCPT TO:<user2@host.example.com>
DATA
Body of email.
.
QUIT
EOF

4. 端口扫描

1
2
$ nc -zv host.example.com 20-30
$ nc -zv host.example.com 80 20 22

参考:

  1. man nc