专栏首页编程珠玑网络工具中的“瑞士军刀”了解一下?

网络工具中的“瑞士军刀”了解一下?

前言

前面介绍过一个不可不知的网络命令-netstat,今天来介绍这个网络工具界的“瑞士军刀”-nc(netcat),它短小精悍,是网络调试利器,它到底有何能耐呢?

查看端口是否被占用

还记得我们在netstat中介绍的如何查看端口被占用吗?nc也可以完成这样的事情。它使用-l(listen)参数,用于绑定指定端口并监听连接:

$ nc -l 6379
nc: Address already in use

当看到Address already in use的时候,就知道这个端口被占用了,否则它就会在这个端口监听。当然这个作用是我瞎说的,但是可以用。

端口扫描

例如需要扫描某个机器上21-30哪些端口是开放的:

$ nc  -n 127.0.0.1 -z 1230-1234 -v
nc: connect to 127.0.0.1 port 1230 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 1231 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 1232 (tcp) failed: Connection refused
nc: connect to 127.0.0.1 port 1233 (tcp) failed: Connection refused
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!

其中-n说明直接使用ip地址,而不使用域名,-z指定端口范围,-v输出详细信息。从结果就可以看到,1234端口是可连接的。

TCP/UDP连接测试

当你在学习TCP相关的内容时,是否想着如何自己实践观察里面的状态或者数据包?虽然推荐自己去写一个TCP连接的服务端-客户端程序,但是也可以利用nc命令来完成,例如,在一个终端中输入如下内容:

$ nc -l 1234
hello 编程珠玑

表明在1234端口监听,然后可以在另外一个终端进行连接;

$ nc 127.0.0.1 1234hello 编程珠玑

连接本地地址1234端口,这个过程中就可以抓包,分析TCP的三次握手了。

除此之外,你还可以在建立好的连接之间发送消息(简单的聊天功能),让你分析更多!

默认情况,它创建的是TCP连接,而使用-u(UDP)参数可以测试UDP连通性。

$ nc -v -u 182.3.226.35 80
Connection to 182.3.226.35 80 port [udp/http] succeeded!

除此之外,还有很多参数用于调试,例如:

  • -b 允许广播消息
  • -D 开启socket调试模式
  • -d 禁止从标准输入读取内容
  • -k 客户端退出后,保持连接
  • -v 显示详细信息

由于在后面的文章中还会借助nc来说明,因此这里不详解介绍。

HTTP连接测试

例如查看HTTP头信息:

$ nc  www.baidu.com 80
HEAD / HTTP/1.1


HTTP/1.1 302 Found
Connection: Keep-Alive
Content-Length: 17931
Content-Type: text/html
Date: Sun, 23 Jun 2019 13:52:12 GMT
Etag: "54d9748e-460b"
Server: bfe/1.0.8.18

连接后,输入HEAD / HTTP/1.1或HEAD / HTTP/1.0,然后输入两个回车,可查看web服务器相关信息。

数据传输

还是利用前面的连接,借助重定向符可以进行文件传输,例如服务端监听,并把内容输出到out.txt:

$ nc -l 1234 > out.txt

而客户端连接:

$ nc 127.0.0.1 1234 < in.txt

这样客户端in.txt的内容,就会传输到out.txt

关于重定向,可参考《如何linux shell中的2 > &1

当然了,对于文件传输,scp命令能更好地完成这件事。如果你没有其他办法了,可以试试nc。

网络测试

前面说到可以通过nc传输数据,同样如果我们想测试两个主机间的网络速度(当然你可以利用iperf工具来完成这个工作),nc也是可以帮忙的:

#服务端监听:
$ nc -vl 1234 >/dev/null

其中重定向到/dev/null,表示将数据丢弃。

然后在另一台主机上执行:

$ dd if=/dev/zero bs=1M count=10 |nc -vn 127.0.0.1 1234
Connection to 127.0.0.1 1234 port [tcp/*] succeeded!
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0333675 s, 314 MB/s

dd拷贝数据,这里从/dev/zero拷贝数据0,且一次1M,拷贝10次,最后通过nc命令发送到服务端。结束后,就可以看到统计信息了。

总结

nc命令短小精悍,但在很多方面能够帮助我们,例如:

  • 端口扫描
  • 连接测试
  • TCP/UDP服务端客户端监听与连接
  • 网络测试
  • 代理

nc命令的更多妙用等着你去探索!

本文分享自微信公众号 - 编程珠玑(shouwangxiansheng),作者:守望先生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让你的专属博客更加漂亮

    hexo+github搭建专属个人博客的教程很多,这里也就不再介绍了,当然你也可以点击阅读原文查看。但是在初始搭建完成后,需要进行很多配置,使得网站功能更加健全...

    编程珠玑
  • leetcode题解-20.有效的括号

    给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

    编程珠玑
  • 如何优雅地将printf的打印保存在文件中?

    我们都知道,一般使用printf的打印都会直接打印在终端,如果想要保存在文件里呢?我想你可能想到的是重定向。例如:

    编程珠玑
  • 众志成城硬造《流浪地球》,中国电影撞进重工业时代

    在阅读今天的文章之前,强烈推荐大家关注这篇取错标题的文章,《点我可直达-就聊挣钱》。因为错过今天,就错过了最佳机会(最后十几个特惠名额),同样点击下方图片也可到...

    纯洁的微笑
  • kali渗透测试工具方法

    kali作为一个渗透测试者最受欢迎的操作系统,集成了非常多的安全工具,让渗透测试人员更方便的做一些渗透测试工作,本文来自国外某位大神的github,在这里给大家...

    信安之路
  • 最神秘的大数据公司Palantir(一):教父级的创始人

    作为一家成立于2003年(实际开始运作是在2004年)的大数据公司,Palantir即使在成立10年后的2014年其实也鲜为人知,其神秘程度可见一斑。 仅仅...

    用户1569917
  • Python中的dict

    用户2398817
  • 目前唯一一个通过GP安全认证的TEE平台?

    前面文章也说过,三星手机通过的安全认证最多,最全,参考: 从Samsung KNOX 通过的安全认证来看三星手机有多牛! 那么今天我们来看一看三星自己的TEE系...

    安智客
  • VR的发展是否会影响到我们看世界的步伐? | 拔刺

    根据唯物论观点,VR的发展会对我们的认知产生很大的影响。由于物质决定意识,意识反作用于物质。我们在接受虚拟科技的同时,潜移默化的被影响。

    镁客网
  • 「首席架构师推荐」测试工具

    渗透测试是对计算机系统及其物理基础设施发起授权的、模拟的攻击,以暴露潜在的安全弱点和漏洞的实践。

    首席架构师智库

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动