Netcat所谓TCP/IP的瑞士军刀不是白来的。它以体积小(可执行文件200KB)和功能灵活而著称。它默认安装在所有主要发行版中。你可以用它来做很多与网络相关的工作,熟练使用它可以在不依赖其他工具的情况下做一些有用的事情。原作者是名为“霍比特人”的网友霍比特人hobbit@avian.org。1995年在UNIX上以源代码的形式发布,Posix版本的netcat主要包括GNU版本的netcat和OpenBSD的netcat,两者都可以在debianInstall/ubuntu下找到,但只有GNU版本的port下视窗。无论是程序员还是运维人员,熟悉这个命令都可以让很多工作更有效率。但是网上基本上90%的netcat文章都是OpenBSD的netcat的老版本,在主流linux上已经不能用了,所以我们先从查看版本开始:debian/ubuntu下:readlink-f$(whichnc)看,会有两个结果:/bin/nc.traditional:默认的GNUbasic版本,通常是系统自带的。/bin/nc.openbsd:openbsd版本,功能更强大。可以使用apt-getinstallnc-traditional或apt-getinstallnc-openbsd选择安装。不管是GNU版本还是OpenBSD版本,新旧都有区别,主要是stdin传输文件时出现EOF,老版本会自动断开连接,而新的gnu/openbsd会一直连接.两年前debianjessie统一升级的时候,导致网上所有教程几乎同时失效。下面主要关注最新的GNU版本,并与功能更强大的openbsd版本进行对比。端口测试你在服务器A主机(192.168.1.2)的8080端口启动了一个服务。有没有通用的方法检查服务的TCP端口是否启动成功?或者在主机B上能正常访问端口吗?再者,如果在主机A上使用netstat-an发现端口监听成功,但是你在主机B上的客户端无法访问,是服务错误还是网络不通?当然我们可以在主机B上使用telnet检测:telnet192.168.1.28080但是telnet并不是专门用于这个的,需要额外安装,所以我们在主机B上使用netcat:nc-vz192.168.1.28080,v表示显示多点信息(verbose),z表示不发送数据。那么如果主机B无法连接到主机A的8080端口,此时就应该检查一下网络和安全设置。如果已连接,则检查服务日志。nc命令后面的8080可以写成扫描范围:nc-v-v-w3-z192.168.1.28080-8083两次-v是让它上报更详细的内容,-w3是设置扫描超时时间到3秒。传输测试你在配置iptable或者安全组策略,所有端口都禁止了,但是只有8080端口是开放的,你想怎么测试是否设置成功?安装nginx并更改端口,然后用chrome访问或用telnet/curl测试??或者python-m来启动一个简单的http服务?其实大可不必这么麻烦。在需要测试的A主机上:nc-l-p8080这样会监听8080端口,然后连接到B主机上:nc192.168.1.28080双方就可以对话了,随便输入什么然后按按Enter,应显示另一侧。注意openbsd版本的netcat在使用-l后可以省略-p参数,写成:nc-l8080,但是在GNUnetcat下无法运行,所以推荐的写法是加上-p参数,common到两个版本。老版本的nc只要CTRL+D发送EOF就会断开,新版本必须CTRL+C终止。不管是服务端还是客户端,只要其中一方断开,另一端也会结束,但是openbsd版本的nc可以加一个-k参数让服务端继续工作。那么可以先用nc监听8080端口,然后远程检查是否可用,然后再监听一个随机的8081端口。如果远程检查不可用,说明你的安全策略配置成功,根本不需要安装任何繁琐的服务。测试UDP会话。两台主机的UDP数据无法发送。问题是什么?您必须确保两台主机之间的UDP可以到达。这个时候没有nginx可以给你用。如何测试?用python写一个udpecho服务??运维不会认你写的工具,即使连不上他也会认为你的程序有bug,于是netcat又出现了,在A主机上:nc-u-l-p8080监听udp的8080端口,然后连接主机B:nc-u192.168.1.28080然后像之前测试tcp的方法一样测试,CTRL+C退出,看对方能不能收到消息输入它。如果接收到,可能是你自己的服务原因,如果接收不到,把nc测试结果丢给运维/系统管理员,让他们赶紧检查一下网关和防火墙配置。系统自带工具测试结果简洁,权威。文件传输如果要从主机B向主机A发送文件,应该怎么做?不能使用scp/szrz吗?继续用python写一个http上传?安装ftpd服务?别这么麻烦,在主机A上监听端口:nc-l-p8080>image.jpg然后在主机B上:nc192.168.1.28080
