10种不同用法的Netcat教程

157 阅读4分钟

nc或netcat命令是一个网络工具,允许用户在设备之间传输文件,扫描端口和诊断问题。本教程解释了nc在扫描端口、传输文件和抓取横幅方面的10种用法。

在Linux中安装netcat

首先,在基于Debian的Linux发行版上,运行下面的命令来安装Netcat。

sudo apt install netcat

在基于Red Hat的Linux发行版上,你可以通过运行下面的命令来安装Netcat。

yum install -y nc

使用 nc 扫描一个端口

Netcat 或 nc 可以用来扫描端口。扫描单个端口的语法如下。

nc -zvn <TargetIP> <TargetPort>

正如你所看到的,该语法用所选的选项(下面解释)调用Netcat,后面是目标IP地址和目标端口,如下面的实际例子所示。

nc -zvn 172.67.209.252 80

其中

  • -z:该 选项用于扫描而不建立连接。
  • -v: 冗长的选项打印出扫描的结果。
  • -n:这 个选项用来跳过DNS查询和警告。

用nc扫描多个端口

你也可以用Netcat/nc来扫描多个端口。语法和前面显示的一样,只需添加空格和你想扫描的端口,如下面的例子所示,其中端口80、22和53被扫描。

nc -zvn 172.67.209.252 80 22 53

用Netcat扫描端口范围

你可以通过实施连字符来扫描端口范围,如下例所示,从80到89(包括)的所有端口都被扫描。

nc -zvn 172.67.209.252 80-89

用Netcat抓取横幅

Banner抓取是一种用于了解目标上运行的软件版本的技术。系统管理员用它来保持设备上软件的清单。黑客也使用它作为追踪过程的一部分。

Banner抓取分析网络响应,试图猜测或学习我们目标背后的软件。下面的例子显示了如何在没有选项的情况下使用nc或netcat(或使用 -v选项)导致了关于目标FTP服务器版本的信息。

nc 198.54.116.197 21

正如你所看到的,Netcat检测到目标上的Pure-FTPd。输出结果还让我们知道匿名登录是被禁止的,而且服务器支持IPv6。

nc 172.67.209.252 80

使用nc(当前目录)传输文件

Netcat(nc)对于在设备间传输文件也很有用。在下面的例子中,一个名为linuxhint.txt的文件将被从一个设备传输到另一个设备。

文件将被发送到接收设备上,运行下面的命令,其中-l选项告诉Netcat保持监听模式等待入站连接。选项-p定义了端口号,并 ***> [文件名]***指定要接收的文件。在接收设备上运行下面的命令,将 linuxhint.txt 换成你要传输的文件的名称。

nc -l -p 9899 > linuxhint.txt

在发送设备上发送文件的计算机,运行下面的命令,其中**-w**选项指定了超时时间(本例为2秒)。在发送设备上,该端口不需要-p选项。该 < [文件名] 指定要发送的文件。

nc -w 2 192.168.1.102 9899 < linuxhint.txt

正如你在目标设备上看到的那样,文件被正确传输了。

ls

使用nc发送存储在不同目录下的文件

前面的例子显示了如何发送一个存储在当前目录下的文件。如果发送者想发送一个不存储在当前目录下的文件,他可以指定一个路径来发送。

在接收设备上,运行与前面例子相同的命令,不要做任何改动,如下图所示。

nc -l 9899 > linuxhint.txt

我们在发送设备上唯一要做的改变是包含文件存储的目录。在这个例子中,我把linuxhint.txt 移到了linuxhintdir目录中。你可以看到,文件的整个路径被指定为< linuxhintdir/linuxhint.txt,其中linuxhintdir是当前目录的一个子目录。

nc -w 2 192.168.1.102 9899 < linuxhintdir/linuxhint.txt

你想发送的文件在你的主目录内,而你的当前目录是不同的;在发送方设备上执行的命令将是如下。

nc -w 2 192.168.1.102 9899 < /home/linuxhint/linuxhint2.txt

使用nc接收文件并将其存储在不同的目录中

与前面的情况相反,接收者可能不想把传输的文件存储在当前目录中。在接收计算机上启用监听模式的入站连接时,你可以定义目录来存储文件。语法与从子目录发送文件时相同,只需指定子目录和文件名,如下所示。

nc -l -p 8999 > subdirectory/linuxhint.txt

在第二台计算机上,使用前面解释过的相同命令;在这个例子中,要发送的文件存储在home中,而不是在当前目录中。

nc -w 2 192.168.1.102 9899 < /home/linuxhint/linuxhint2.txt

正如你所看到的,该文件被存储在定义的目录中。而且,文件名从 linuxhint2.txt变成了linuxhint.txt,正如接收计算机命令中定义的那样。

使用nc时显示文件传输进度

pv命令实现显示通过管道传输的进度。通过这个命令,我们可以在使用Netcat时增加进度信息。

要安装 pv在基于Debian的Linux发行版中,运行下面的命令。

sudo apt install pv

在接收设备的端口后面添加一个管道,然后是 pv命令,以及你想保存的路径和文件名,如下面的例子所示。

netcat -l 9899 | pv > linuxhint2.txt

从发送器设备上发送该文件。

你会在你添加了命令的接收设备中看到进度。 pv命令的接收设备中的进展。

用nc即时压缩和传输文件

在通过Netcat发送时,你也可以通过使用管道的一次执行来压缩文件。下面的例子显示了如何压缩linuxhint2目录并通过netcat发送。

让 nc 监听入站连接;你可以执行 pv 命令来查看进度。

nc -l -p 9899 | pv > linuxhint2

在发送方,使用tar命令压缩目录或文件,并加上适当的选项,如下图所示。然后添加管道,像平常一样发送,不需要指定文件,在压缩时已经指定了。

tar cfvz - linuxhint2 | nc -w 2 192.168.1.102 9899

正如你所看到的,文件被正确地传输和提取了。

使用nc传输整个磁盘或分区

本教程的最后一个例子展示了如何使用Netcat传输整个分区或磁盘。

在接收设备上,运行下面的命令。

nc -p 9899 -l | bzip2 -d | dd of=/dev/sda1

在发送方,键入以下命令,用/dev/sda1替换你要传输的磁盘或分区。

bzip2 -c /dev/sda1 | nc 192.168.1.102 9899

结论

Netcat是一个非常基本的工具,任何Linux用户或处理网络的用户都必须知道。使用它非常简单,如本教程所示。Netcat是为其他程序或脚本而设计的;它是开发人员的一个好帮手。

我希望这个解释了10种不同用法的Netcat教程对你有用。