蛮荆

nc 命令常用操作

2017-01-18

nc 命令作用

nc 命令 (Netcat 的简称) 是一个强大的网络工具,可以在网络连接上面读取和写入数据,因为支持多种功能,如端口扫描、文件传输、端口监听、以及网络调试等,所以被称为 “网络瑞士军刀”。

nc 命令参数中的目标地址可以是域名,也可以是 IP 地址。


基本用法

1. 建立连接测试

可以用于测试本地到目标地址的连通性 (TCP/UDP)。

# nc IP 地址 端口号
$ nc 127.0.0.1 8080

# 没有异常提示,说明连接建立成功

# 使用 lsof 命令查看建立的连接
$ lsof -i:8080

# 输出如下
COMMAND     PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nc        77161     dbwu.tech    3u  IPv4 0xab5a955319abcdef      0t0  TCP localhost:63984->localhost:bmc_patroldb (ESTABLISHED)

除了使用 IP 地址之外,也可以直接使用域名。

$ nc dbwu.tech 80

2. 端口扫描

扫描主机上的开放端口,可以指定某一个,也可以端口范围:

$ nc -zv dbwu.tech 80

Connection to dbwu.tech port 80 [tcp/http] succeeded!

$ nc -zv dbwu.tech 443

Connection to dbwu.tech port 443 [tcp/https] succeeded!

# 如果指定端口号没有开放,命令输出会阻塞
$ nc -zv dbwu.tech 12345

# 阻塞等待输出
... 

# 指定范围端口号
$ nc -zv dbwu.tech 80-443

3. 创建简易聊天

创建一个简单的聊天服务端和客户端,用于本地网络编程调试程序。

服务端监听 12345 端口

$ nc -l 12345

# 查看端口是否已监听
$ lsof -i:12345

COMMAND  PID          USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
nc      3772     dbwu.tech    3u  IPv4      0x123456      0t0  TCP *:italk (LISTEN)

客户端连接服务端

$ nc 127.0.0.1 12345

# 连接之后,发送消息
hello server # 然后按回车

查看服务端数据

# 服务端显示数据
hello server

# 同时给客户端发送一个响应
hello client

# 返回到客户端,显示数据
hello client

4. 发送 UDP 数据

向指定

$ echo "Hello, UDP" | nc -u 172.67.147.110 53

5. 指定源 IP 地址和源端口

-s 指定源 IP 地址 -p 指定源端口号

主要针对多网卡的主机。

$ nc -s 192.168.1.100 -p 5678 172.67.147.110 8080

看到指定源 IP 地址,你也许会想到通过伪造 IP 来实现网络攻击?

但是这是不可行的,因为网络协议栈不允许通过未分配给本机的 IP 作为源 IP 地址,也就是说,即使在命令中伪造了一个源 IP 地址,数据包根本发不出去,因为协议栈无法找到相应的接口来发送数据,最后会返回错误。

# 伪造的源 IP 地址,直接操作失败
$ nc -s 1.1.1.1 -p 5678 172.67.147.110 8080

# 报错输出如下
nc: bind failed: Cannot assign requested address

6. 进行带宽测试

通过管道将数据传输到 nc 命令,可以进行本地到目标地址带宽测试。

# 向 dbwu.tech 发送 100 MB 数据进行带宽测试
$ dd if=/dev/zero bs=1M count=100 | nc dbwu.tech 443

# 输出如下

HTTP/1.1 400 Bad Request
Server: cloudflare
Date: Fri, 28 Jun 2024 08:53:22 GMT
Content-Type: text/html
...

100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 23.5049 s, 4.5 MB/s

通过输出结果可以看到,本地到 dbwu.tech 的网络带宽大约 4.5 MB/s 。

转载申请

本作品采用 知识共享署名 4.0 国际许可协议 进行许可,转载时请注明原文链接,图片在使用时请保留全部内容,商业转载请联系作者获得授权。