网络利器netcat

netcat

netcat具有“网络瑞士军刀“之称,支持从命令行跨网络读取和写入数据。

netcat 有 GNU 版本和 OpenBSD版本。两者都可以在 Linux下面安装,但是 Windows 下面只有 GNU 版本。 不管是 GNU 版本还是 OpenBSD 版本,都有新老的区别,主要是传送文件时 stdin 发生 EOF 了,老版本会自动断开,而新的 gnu/openbsd 还会一直连着 。

NcatNmap项目套件中有一个ncat程序。Ncat最初是用来支持Nmap而开发的,是对古老的Netcat重新实现的一个大大改进。它与netcat类似,使用TCP和UDP进行通信,可为其他应用程序和用户提供网络连接。这三个版本功能类似,都简称nc。

readlink -f $(which nc) 查看nc版本。两个版本在使用时常用功能区别不大,如果遇到什么问题,查看系统自带手册(网上教程、博客可能不准)。

软件使用思路

netcat 可以操作 tcp/udp 进行原始的监听、连接、数据传输等工作。然后搭配管道,实现灵活多样的功能,或者进行各种网络测试。 下面是nc常用功能。

端口测试

测试端口第一个想到的是telnet,但是有一定局限性:telnet不一定安装,需要有额外主机测试。

使用nc可以在本机测试端口是否监听nc -l -p port 。如果报端口已占用,表示端口已经监听。

本机端口已监听,如果还以网络不通,可在第二台主机上执行nc -vz ip port 。v 表示verbose,显示多点信息。z 表示不发送数据。

nc 命令后面的 8080 可以写成一个范围进行扫描: nc -v -v -w3 -z ip port1-port2 。两次 v 会显示更详细的内容,w3是设置扫描超时时间为3秒。

传输测试

在A主机(192.168.1.2)上执行nc -l -p 8080 ,开始监听本地8080端口。然后在B主机上连接A:nc 192.168.1.2 8080 。 两边就可以会话了,随便输入点什么按回车,另外一边应该会显示出来 。

openbsd 版本 netcat 用了 -l 以后可以省略 -p 参数,写做:nc -l 8080 ,但在 GNU netcat 下面无法运行,所以推荐写法是加上 -p 参数,两个版本都通用。 老版本的 nc 只要 CTRL+D 发送 EOF 就会断开,新版本一律要 CTRL+C 结束,不管是服务端还是客户端只要任意一边断开了,另一端也就结束了,但是 openbsd 版本的 nc 可以加一个 -k 参数让服务端持续工作。

测试UDP

排查两台主机 UDP 数据发送不通问题。在A主机(192.168.1.2)上执行nc -u -l -p 8080 ,监听udp的8080端口。然后B主机测试连接nc -u 192.168.1.2 8080

类似上面测试,看看一边输入消息另外一边能否收到,收得到的话可能是你自己的服务原因,收不到的话,检查网关、防火墙等配置。

文件传输

两台服务器传输文件,可以用scp、szrz,也可以安装FTP服务,甚至可以动手用Python实现http上传。用nc也可以轻松实现。

在A主机(192.168.1.2)上监听端口nc -l -p 8080 > image.jpg 。然后在B主机上发送文件 nc 192.168.1.2 8080 < image.jpg

注意,老版本 GNU / OpenBSD 的 netcat 再文件结束(标准输入碰到 EOF),发送文件一端就会关闭连接,而新版本不会,需要验证传输文件和源文件是否大小一致。openbsd版可以使用-N 参数,指明stdin遇到EOF就关闭连接(完成传输),GNU版本可以用-q0 参数。

nc进行文件传输,在极端环境下很有用。

网速吞吐量测试

GNU版本使用-v -v 参数,在结束时会统计接受和发送的字节。

在A主机(192.168.1.2)上监听8080 nc -v -v -n -l -p 8080 > /dev/null 。-n是不要解析域名,避免解析域名造成时间误差。然后在B主机上执行 time nc -n 192.168.1.2 8080 < /dev/zero 。执行一段时间后 CTRL+C 结束,就可以在A主机上查看字节数,在根据B主机的时长就可以计算。

对于 OpenBSD 版本的 nc 我们可以用管道搭配 dd 命令进行统计,服务端运行:

nc -l -p 8080 > /dev/null

客户端运行 dd 搭配 nc,结束以后会有结果出来:

dd if=/dev/zero bs=1MB count=100 | /bin/nc.openbsd -n -N 192.168.1.2 8080

其实上面两种方法都把建立连接的握手时间以及 TCP 窗口慢启动的时间给计算进去了,不是特别精确,最精确的方式是搭配 pv 命令(监控统计管道数据的速度),在 A 主机运行:

nc -l -p 8080 | pv

然后再 B 主机运行:

nc 192.168.1.2 8080 < /dev/zero

此时 A 主机那端持续收到 B 主机发送过来的数据并通过管道投递给 pv 命令后,你就能看到实时的带宽统计了,pv 会输出一个实时状态:

353MiB 0:00:15 [22.4MiB/s] [          <=>  ]

让你看到最新的带宽吞吐量,这是最准确的吞吐量测试方法,在不需要 iperf 的情况下,直接使用 nc 就能得到一个准确的数据。

系统后门

假设A 主机十分原始,包管理系统都没有,sshd/telnetd 都跑不起来,这时候可以用nc 来实现B 主机通过网络登录 A 主机。

GNU 版本的 netcat 有一个 -e 参数,可以在连接建立的时候执行一个程序,并把它的标准输入输出重定向到网络连接上来,于是我们可以在 A 主机上 -e 一下 bash:

/bin/nc.traditional -l -p 8080 -e /bin/bash

按回车打开系统后门,然后再 B 主机那里照常:

nc 192.168.1.2 8080

你就可以在 B 主机上登录 A 主机的 shell 了,操作完成 CTRL+C 结束。

对于 openbsd 版本的 netcat,-e 命令被删除了,没关系,我们可以用管道来完成,和刚才一样,在 A 主机上:

mkfifo /tmp/fcat /tmp/f | /bin/bash 2>&1 | /bin/nc.openbsd -l -p 8080 > /tmp/f

然后 B 主机和刚才一样:

nc 192.168.1.2 8080

即可访问,用完注意将 /tmp/f 这个 fifo 文件删除。

还有很多用途

还有很多其他用法,比如可以用 netcat + shell script 写一个 http 服务器,使用 fifo 搭配两层 nc 可以实现 tcp 端口转发,搭配 openssl 命令行工具和 nc 加管道可以把 ssl 的套接字解码并映射成裸的 socket 端口供没有 ssl 功能的工具访问。 这些功能比较考验基本能力,可能有些复杂,可以在极端恶劣环境下使用,平时用专用软件很容易实现。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。通过与其他工具结合和重定向,你可以在脚...
    素咪阅读 1,690评论 0 0
  • 1.前言1.1声明文章中的文字可能存在语法错误以及标点错误,请谅解; 如果在文章中发现代码错误或其它问题请告知,感...
    SkTj阅读 990评论 0 0
  • 作者:Gilberto Najera-Gutierrez译者:飞龙协议:CC BY-NC-SA 4.0 简介 这章...
    三月行者阅读 1,756评论 2 7
  • 本文整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如lso...
    老夫刘某阅读 3,402评论 0 7
  • 这本书之前在微信读书上读过一次,在图书馆也借过一次,但总觉得读起来不过瘾;这次特地买了书,认真品读其中故事。 1....
    keepkeepgoing阅读 395评论 0 0