使用nc命令发送或接收任意数据包
在网络问题的排查过程,我们经常需要去单方地验证客户端或服务端是否正常、以及网络是否可达,往往我们需要编写特定的测试代码,显得非常麻烦,今天将为大家介绍一个神器 —- nc
定义
nc – arbitrary TCP and UDP connections and listens
从定义可以看出,nc用于发送和监听任意TCP和UDP数据,因此我们可以模拟任意的客户端或服务端,下面我们来介绍下具体的使用方法
nc [OPTIONS] [hostname] [port[s]]
OPTIONS:(常用)
-4 强制使用ipv4
-6 强制使用ipv6
-l 监听
-p 指定源端口
-s 指定源IP
-n 采用数字,而非域名
-w 设置超时,单位秒
-u UDP
-v 输出详情
-U 采用本地套接字
默认情况nc采用stdin作为输入,stdout作为输出
安装
# for centos
sudo yum install nc
# for debain
sudo apt-get install nc
例子
# 监听1234端口
nc -l 1234
# 将收到的结果保存到data文件中
nc -l 1234 > data
# 实时发送数据(按ctrl+d结束)
nc localhost 1234
# 实时发送数据(按指定字符结束)
nc localhost 1234 << EOF
> ...
> EOF
# 发送数据1
echo -n 1 |nc localhost 1234
# 监听UDP端口
nc -u -l 1234
# 发送UDP
nc -u localhost 1234
有趣的应用
# 扫描TCP端口
nc localhost 1-100
# 扫描UDP端口
nc -u localhost 1-100
# 模拟HTTP请求
nc www.baidu.com 80
GET / HTTP/1.1
host: localhost
# 发送文件
cat 1.log|nc localhost 1234