nc 是一个简单但功能很强大的工具,在 网络调试 中非常有用。
管理员可以用 nc 干很多事情,包括:
除此之外,还有很多很多。
网络测试
网络配置变更后,需要测试效果。
举个例子,用 iptables 配置端口转发后,需要确认转发效果。
直接部署服务进行测试,不一定是一个好选择。 因为测出问题时,可能无法确定到底是 ①端口转发配置 还是 ②服务本身 有问题。 当然了, 部署服务也需要时间不是?
因此,需要 尽量避免不必要的影响因素 ,提高针对性。
在这个场景,最好是通过一个非常简单的网络服务来测试,有针对地验证端口连通性。 那么, nc 就是个不错的工具。
在目标服务器(下文称为 服务端)上,运行 nc 命令,监听需要验证的端口:
|
|
该命令中, -l
选项指定监听模式, 12345
为监听端口号。
然后,在另一台机器上(下文称为 客户端),连接该端口:
|
|
如果成功连上,则说明端口连通性没问题,端口转发配置是 OK 的。
这时,客户端可以发送一些数据给服务端,输入要发送的内容并按回车:
|
|
一点都不意外,服务端收到了信息,并在屏幕上输出:
|
|
服务端也可以发送一些数据给客户端,操作方式是一样的:
|
|
客户端接到数据后,也在屏幕上输出:
|
|
或许,古时候,人们就是用 nc 命令来聊天的!
协议交换
数据传输
在 网络测试 小节中演示了如何使用 nc 命令在两台服务器间发送数据。 结合 标准输入/输出重定向 ,我们可以用 nc 命令在服务器间传文件!
在文件接收服务器上,以监听模式运行 nc 命令,并将标准输出重定向到指定位置:
|
|
在文件发送服务器上,运行 nc 命令连接接收端,并将标准输入重定向到要传输的文件:
|
|
文件传完后, nc 命令自动退出。
端口扫描
知道一台服务器打开了哪些端口对外提供服务非常有用,比如:可以确认是否有内部端口意外对外开放。
借助 nc 命令,端口扫描非常简单:
|
|
该命令对 IP 地址为 192.168.56.11
的服务器进行端口扫描,扫描范围是从 10
到 1000
。 从命令输出可以获悉, 22
端口是开启并对外服务的,运行的服务 应该 是 ssh
。
注意,这里用的词是—— 应该 。 虽然端口号有约定俗成的惯例,但并不强制。 确定一个端口的真实服务,需要做一些协议上的交互:
|
|
该命令连接到服务器 22
端口,并向服务器发送一个字符串 QUIT
。 从服务器发来的信息可以完全确定, 22
端口运行的就是 ssh
服务!
警告:如果有内部端口被扫出来,必须检查防火墙配置并修复。
【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注: