故障排除工具可以简单,也可以非常复杂。它们可以非常小巧,也可以非常庞大,各种大小都有。是否需要将所有功能集中在一个工具中存在争议。当您使用适度的工具和实用程序解决问题时,您将对问题有更深入的理解。
通过避免在不必要的中间件层后面混淆基本系统,更容易理解系统。这是因为您必须花时间逐个测试和理解每个组件。
在本文中,我们将介绍一个非常简单的故障排除工具,称为 Netcat。这个实用程序已经存在了近三十年,虽然表面上很简陋,但在正确使用时提供了强大的功能和灵活性。
让我们探索一下 Netcat 的一些多样性。
它可以作为客户端
如果您想测试远程服务器上的一个开放端口,那么没有比使用 Netcat 更简单的方法了。您可以通过 TCP 或 UDP 向服务器发送任意有效负载,发送到任何您想要的端口。
下面是一个简单的示例,我们向运行在本地主机上端口 5000 的服务器发送一些基本的 UDP 字符串数据:
linuxmi@linuxmi ~/www.linuxmi.com
% echo "hello" | nc -u 127.0.0.1 5000
如果服务器期望接收此类型的数据,它将会做出相应的响应,并且您将在控制台上看到响应结果的打印输出。如果服务器期望接收JSON数据块或其他二进制数据,您也可以以相同的方式将其传输到Netcat中。
以下是使用JSON数据的示例:
echo '{"key":"value"}' | nc -u 127.0.0.1 5000
假设远程服务器有一个集成的JSON解析器,您应该能够使用这种简单的方法发送纯JSON数据。只需记住在必要时跟踪引号并对其进行转义。
它还可以作为服务器
Netcat也可以作为一个简单的套接字服务器。假设您想要快速启动一个服务器,监听特定端口的传入数据。使用Netcat非常简单:
nc -l -u -p 5000 127.0.0.1
这个命令将在本地机器上打开5000端口,并监听传入的UDP流量。如果将此与前面的客户端命令结合起来,您可以将流量发送到服务器以进行显示。这意味着您可以创建一个简单的消息中继服务器,并且甚至可以使用Netcat在服务器之间传输数据。
这两个命令也可以在TCP模式下运行。只需删除 -u 标志,默认情况下Netcat将以TCP模式运行。
它可以发送不同类型的有效载荷
Netcat不仅功能丰富,可以同时作为客户端和服务器,还可以发送各种负载。由于可以将数据通过管道传输到Netcat,您可以发送许多有趣的内容。如果我们想使用Netcat发出一个HTTP GET请求会怎样呢?
linuxmi@linuxmi ~/www.linuxmi.com
% printf 'GET / HTTP/1.1\r\nHost:google.com\r\n\r\n' | nc google.com 80
因为我们手动键入了HTTP请求的格式,所以看起来有点凌乱,但它确实有效。这个命令会返回一个301,因为Google只支持通过HTTPS工作。尽管它监听的是端口80,但它会将您重定向到443端口进行安全连接。
将这样的负载填充到Netcat对于像Google这样的大型网站来说并没有太大帮助,但对于小型开发服务器来说是有用的。如果您想手动修改HTTP负载或发送错误数据,这是一个快速的方法。
当然,还有其他更适合此任务的工具,比如curl,但是通过Netcat,您可以构建原始请求。原始请求操作对于需要对发送的数据具有更精细控制的低级故障排除非常有用。
它可以查找开放的端口
这种多功能性不仅限于客户端和服务器应用程序。使用Netcat,您可以扫描基础架构以查找开放的端口。通过以下命令,您可以检查服务器上的TCP端口是否开放:
linuxmi@linuxmi ~/www.linuxmi.com
% nc -zv google.com 80
这显然会返回成功,因为Google确实开放了用于传入HTTP请求重定向的端口80。您可以更改为您喜欢的任何主机和端口。您甚至可以通过输入一个端口范围来扫描端口,例如:80-443。
如果您想扫描UDP端口,只需在命令中添加 -u 标志。
如果您需要具有广泛可配置选项的复杂网络扫描,那么nmap可能是一个更好的选择。如果您只需要快速检查一些端口是否开放,为什么要安装所有额外的复杂功能呢?
它可以传输文件
不,这不会是通过网络发送文件的最快或最可靠的方式,但在紧急情况下它可以完成任务。如果您想通过Netcat发送文件,绝对可以做到。以下是如何设置远程服务器:
linuxmi@linuxmi ~/www.linuxmi.com
% nc -l -p 5000 > foo.txt
这将打开Netcat并在端口5000上进行监听。传入的数据将被写入文件foo.txt。
而在实际发送文件的本地客户端上,您可以执行以下操作:
nc <host> 5000 < foo.txt
这将将foo.txt的内容发送到 <host>,其中远程Netcat服务器在端口5000上进行监听。
这是一种快速而简单的方法来传输少量数据。尽管它可以工作,但我强烈建议不要将Netcat作为主要的文件传输方式。现在有更安全、更可靠的选项可供选择。