Linux 命令:nc
端口扫描
扫描主机(192.168.1.60)的上的端口(20-1024),仅输出成功的结果:
nc -w 3 -z -v 192.168.1.60 20-1024 2>&1 | grep succeeded
# 输出结果:
# Connection to 192.168.1.60 22 port [tcp/ssh] succeeded!
# Connection to 192.168.1.60 80 port [tcp/http] succeeded!
-
-w
超时时间,单位秒 -
-z
仅扫描监听守护进程,不发送任何数据 -
-v
详细输出 -
20-1024
端口范围 -
2>&1
标准出错重定向到标准输出
聊天
服务端:
nc -k -l 8081
-
-k
连接结束后,继续下一次监听 -
-l
监听指定端口
客户端:
nc 127.0.0.1 8081
服务端客户端直接可以相互发送请求。
数据传输
接收端,将接收的数据重定向到文件:
nc -l 1234 > filename.out
-
-l
监听端口
发送端,将文件重定向到 nc 并通过 nc 发送 :
nc -N 127.0.0.1 1234 < filename.in
-
-N
输入EOF
后关闭 socket
数据传输完成后,断开链接。
服务请求
向 HTTP 服务发送 GET 请求:
printf "GET / HTTP/1.0\r\n\r\n" | nc 192.168.1.60 80
通过代理 127.0.0.1:1081 向 google.com 80 端口发送请求:
nc -v -x 127.0.0.1:1081 -X connect google.com 80
-
-x
代理地址和端口 -
-X
代理协议, connect 为 HTTP(S)
SSH 代理,通过 SSH 方式访问 github.com 时,请求会经过代理 127.0.0.1:1081:
~/.ssh/config
Host github.com
ProxyCommand /usr/bin/nc -X connect -x 127.0.0.1:1081 %h %p
代理
# 服务端
mkfifo 2way
nc -l 8081 0<2way | nc 127.0.0.1 22 1>2way
# 客户端
ssh -p 8081 notfound@127.0.0.1
-
|
的管道数据从左边向右流动 -
2way
管道数据从右向左流动