Netcat是一个非常有用的Unix命令,我们用它来执行各种网络任务,它对调试也非常有用,还可以了解事物的工作原理。
它可以通过nc 命令使用。
使用这个语法连接到任何网络服务器。
nc DOMAIN PORT
nc localhost 8000
一旦连接到服务器,你可以通过输入它们来发送任何信息,你会看到服务器发回的任何回复。
就像一个简单的1对1的聊天,在此基础上,你可以以协议(HTTP、FTP、SMTP等)的形式研究应用层面的功能。
使用Netcat,你可以模拟所有那些为互联网提供动力的应用级协议。
你可以连接到一个Web服务器并向它发送HTTP协议指令。我可以用nc flaviocopes.com 80 ,连接到我的网站,然后我可以向它发送
GET / HTTP/1.1
Host: flaviocopes.com
(第三行是空行)
而服务器会回复,回复的内容是HTTP/1.1 301 Moved Permanently 到https://flaviocopes.com/ ,因为我强制使用HTTPS。

这里有一个简单的例子,与我单独建立的 "回声 "服务器对接,它可以将我们发送给它的东西送回来。

Netcat可以使用TCP(默认协议)或UDP工作。
要使用UDP,请添加-u 标志。
nc -u localhost 8000
你也可以创建一个服务器。使用-l (监听)选项来监听一个特定的端口。
nc -l PORT
并且Netcat将打印收到的每一条命令。
试着在一个终端窗口上用nc -l 8001 运行服务器,在另一个终端上运行客户端nc localhost 8001 ,然后通过在客户端输入信息来向服务器发送信息。
Netcat也可用于网络检查。你可以扫描一个服务器的开放端口,在一个特定的范围内。
nc -v -z localhost 1-10000
提示:与
grep结合起来,过滤噪音。nc -v -z localhost 1-10000 2>&1 | grep succeeded
(如果你想知道哪个进程在使用某个端口,运行lsof -i :PORT)
你可以告诉nc 服务器将一个文件的内容发送给连接的客户端。
nc -l PORT < FILENAME
用nc DOMAIN PORT 连接的客户端将得到该文件的内容打印出来,但它可以用nc DOMAIN PORT > FILENAME 将内容保存到一个文件中,从而实现基本的文件传输。
在文件被提供后,服务器将终止。
你可以把这个命令包在一个简单的Bash shell循环中。
while true; do nc -l PORT < FILENAME; done
这就是最简单的网络服务器的实现。
while true; do nc -l 80 < index.html; done
你可以告诉客户端向服务器发送文件中的指令。
nc DOMAIN PORT < FILENAME