Netcat:TCP/IP瑞士军刀的功能与安装指南,适合程序员与运维人员
2025-02-26 04:03:28发布 浏览7次 信息编号:107700
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
Netcat:TCP/IP瑞士军刀的功能与安装指南,适合程序员与运维人员
点击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号”
干货福利,第一时间送达!
最近有小伙伴说没有收到当天的文章推送,这是因为微信改了推送机制,有一部分小伙伴刷不到当天的文章,一些比较实用的知识和信息,错过了就是错过了,建议大家加个星标️,就能第一时间收到推送。
瑞士军刀被称为TCP/IP,不是一个错误的名字。它以其尺寸小(可执行性200KB)功能而闻名。默认情况下,它是在主要分布中安装的。您可以使用它来完成许多与网络相关的工作,并熟练地使用它。您可以在不依靠其他工具的情况下做一些有用的事情。
最初,一个名为“ ”的网民于1995年在UNIX中发布。POSIX版本主要包括GNU版本,并且两者都可以在 /下安装,但是下面只有GNU版本端口。 。
无论是程序员还是操作和维护,对此命令的熟悉都可以使许多人的工作更加有效。但是,基本上90%的文章在线是旧版本,不再可以在主流Linux上使用,因此我们需要先检查版本。 :
在 /下方:
readlink -f $(which nc)
看,将有两个结果:
您可以使用APT-GET NC-或APT-GET NC-选择安装。无论是GNU版本还是版本,新旧之间都存在差异。主要原因是,当STDIN传输时,旧版本将自动断开连接,而新的GNU/将继续连接。它是两年前升级的。 ,导致互联网上的所有教程几乎同时失败。
以下主要基于最新的GNU版本,并与更强大的版本进行解释。
端口测试
您在端口8080上方的服务器上启动了一个主机(192.168.1.2)。是否有一种通用方法可以检测服务的TCP端口是否成功启动?还是可以正常在主机B上访问此端口?
此外,如果您发现该端口在主机A上已成功侦听,并且主机B上的客户端无法访问它,那么它是服务错误还是网络无法到达?当然,我们可以在主机上使用探测:
telnet 192.168.1.2 8080
但这不是专门针对此的,也需要额外的安装,因此我们在主机B上使用它:
nc -vz 192.168.1.2 8080
也就是说,v表示显示多点信息(),而z表示不发送数据。然后,如果主机B无法连接到主机A端口8080,则应检查网络和安全设置。如果连接,请检查服务日志。
NC命令之后的8080可以写为扫描范围:
nc -v -v -w3 -z 192.168.1.2 8080-8083
两次-V是使其报告更详细的内容,-W3将扫描超时设置为3秒。
传输测试
您正在配置或安全组策略,并禁止所有端口,但仅打开端口8080。您要如何测试此设置是否成功?安装NGINX修改端口,然后使用访问或 /curl在外面进行测试? ?还是-m启动简单的HTTP服务?实际上,在需要测试的一个主机上,它不必那么麻烦:
nc -l -p 8080
这将收听端口8080,然后连接到B主机:
nc 192.168.1.2 8080
您可以在双方进行对话。输入您想要的任何内容,然后按Enter。另一侧应显示。请注意,使用-l后,可以将-p参数省略为:NC -L 8080,但不能在GNU下运行。因此,由于推荐写的方法是添加-P参数,因此两个版本都是常见的。
只要Ctrl+D发送EOF,NC的旧版本就会断开连接。新版本必须以ctrl+c结束。无论是服务器还是客户端,只要一侧断开连接,另一端就会结束,但是NC的版本可以添加-K参数以继续在服务器上工作。
然后,您可以首先使用NC收听端口8080,然后检查远程访问,然后再次收听端口8081。远程访问是不可用的,这意味着您的安全策略已成功配置,您根本不需要安装任何麻烦的服务。
测试UDP会话
无法发送两个主机的UDP数据。问题是什么?您必须确认可以在两个主机之间达到UDP。目前,nginx尚未使用。如何测试?使用写UDP的回声服务? ?操作和维护将无法识别您编写的工具。即使他们无法连接,他们也会认为您的程序有一个错误,因此他们会再次出现。在A主机上:
nc -u -l -p 8080
收听UDP的端口8080,然后连接到主机B:
nc -u 192.168.1.2 8080
然后,像以前一样测试TCP方法,结束CTRL+C出口,查看您在输入另一侧时是否可以接收消息。如果您收到它,则可能是您自己的服务原因。如果无法收到它,请将NC测试结果扔给操作和维护/系统管理员,让他们快速检查网关和防火墙配置。系统提供的测试工具的结果既简单又具有权威性。
文件传输
如果要发送文件以在B主机上host A主机,该怎么办?如果您不能使用SCP / SZRZ?继续写一个HTTP上传?安装FTPD服务?无需担心在主机上聆听端口:
nc -l -p 8080 > image.jpg
然后在主机B上:
nc 192.168.1.2 8080 < image.jpg
好吧,它用于通过网络猫的东西。请注意,旧版本gnu/ end(标准输入遇到EOF)的文件重新文件,并且连接将在发送文件的末尾关闭,而新版本则不会。您需要打开另一个窗口。转到主机检查接收到的文件大小和源文件以比较它,以确定转移是否结束。
传输完成后,您可以在任一端用Ctrl+C结束它。对于新版本,有一个-n参数,它可以指示stdin遇到EOF时关闭连接(与旧版本相同)。让我们写信:
/bin/nc.openbsd -N 192.168.1.2 8080 < image.jpg
机器上的NC命令可能指向 /bin /nc。或 /bin /nc。,此处显示指定的呼叫版本。
这样,使用新版本中的-N参数,无需打开终端即可手动检查传输是否已完成,并且当传输完成后,它将自动退出。实际上,GNU版本还可以添加-Q0参数以实现版本-N的效果:
/bin/nc.traditional -q0 192.168.1.2 8080 < image.jpg
只是它是Linux下的最新GNU,并且相应的版本没有此参数,因此在传递文件时,不可避免地打开终端来检查进度。如果它是在Linux侧发送的,那将没有问题。通过管道协作和焦油命令,您也可以轻松地传递整个目录。如果您有兴趣,可以自己学习。
使用此系统的默认安装工具进行文件传输可以被视为您的保证方法。当无法使用SCP/FTP时,它是您的杀手武器。
网络速度吞吐量测试
最简单的方法是将-v -v参数添加到GNU版本中,并计算在末尾接收和发送多少个字节。然后,在A主机上显示运行GNU版本的NC侦听端口:
/bin/nc.traditional -v -v -n -l -p 8080 > /dev/null
添加n表示不解析域名,避免浪费时间并在解析域名时造成统计错误,然后在B主机上:
时间NC -N 192.168.1.2 8080 < /dev /Zero
按下CTRL+C持续十秒钟后,您可以看到A主机中收到了多少个字节。目前,您可以根据时间的时间自己分裂。注意GNU统计值。这是一个32位Int。如果传输太多,则环回将溢出并成为负数。
对于NC的版本,我们可以使用管道和DD命令执行统计信息,并运行服务器端:
nc -l -p 8080 > /dev/null
客户使用NC运行DD:
dd if=/dev/zero bs=1MB count=100 | /bin/nc.openbsd -n -N 192.168.1.2 8080
结束后,结果将出现。请注意,使用-n意味着stdin遇到EOF后将关闭连接。在此处编写NC命令的地方,对于任何版本的GNU/都可以。显示的指定路径意味着必须使用特定的路径。等效于上一个命令的GNU版本的版本是:
dd if=/dev/zero bs=1MB count=100 | /bin/nc.traditional -n -q0 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/无法运行。目前,有什么方法可以使用主机B登录通过网络托管A?
GNU版本具有一个-e参数,可以在建立连接并将其标准输入和输出重定向到网络连接时执行程序。因此,我们可以-e在主机上狂欢:
/bin/nc.traditional -l -p 8080 -e /bin/bash
按Enter打开系统的后门,然后像往常一样B主机:
nc 192.168.1.2 8080
您可以登录到主机B上的主机A外壳,并且该操作已完成,并且CTRL+C结束了。
对于版本,删除了-e命令,没关系,我们可以使用管道来完成它,就像以前一样,在A主机上:
mkfifo /tmp/f
cat /tmp/f | /bin/bash 2>&1 | /bin/nc.openbsd -l -p 8080 > /tmp/f那么B主机与以前相同:
nc 192.168.1.2 8080
您可以访问它。使用后,请删除 /tmp /f fifo文件。
结束
它是直接在命令行上操作TCP/UDP的原始:侦听,连接,数据传输和其他任务。然后匹配管道以实现灵活而多样的功能,或进行各种网络测试。
实际上,上面的示例并不意味着“您可以做这些事情”,而是要举例说明您的大脑以查看匹配管道的强大功能。
还有许多其他用途,例如,您可以编写带有 + shell的HTTP服务器,将FIFO与两层NC一起使用,以实现TCP端口转发,并使用命令行工具和NC Plus Plus管道将其解码和映射SSL插座裸端口没有SSL功能的工具可以访问。
当然,您必须说,您不记得这么多复杂的用途,其中大多数可以用专业软件代替。至少您可以尝试使用NC首先进行TCP / UDP端口测试,并且不要使用 /测试端口是否可用,后者太业余了。其他功能可以用作备份方法。如果您在极端严峻的环境中使用它们,则可能会对您有很大帮助;如果您心情愉快,则可以研究如何使用管道和其他工具执行一些高级操作。
提醒:请联系我时一定说明是从奢侈品修复培训上看到的!