Linux中Netcat(NC)命令
NetCAT是一种功能强大而多功能的网络工具,可用于Linux,Mac和Windows计算机。
对网络通信感兴趣的每个人都很容易使用和基本学习。
NetCAT的核心功能允许两台计算机连接和共享资源。
这个名字是一个网络和连接的Portmanteau,它是一个加入事物的花哨词。
连接可以通过TCP或者UDP端口直接在机器之间进行。
一旦建立,有许多潜在的用例。
通信可以双向工作,因此文件或者信息可以从侦听器移动到客户端或者客户端到侦听器。
由于其各种功能,Netcat被称为IT"瑞士军Knife "。
它可以用于简单的文件发送,聊天,网页服务,远程运行代码。
该列表广泛且变化。
臭名昭着的,Netcat可用于创建"后门"访问。
我会解释这是如何作用的,但请记住,由于其恶意使用可能性,这不再是NC软件的一部分。
netcat(nc)命令示例
以下是nc命令的语法:
nc [options] [hostname] [port]
语法可以根据应用程序而异,但对于大多数用途,命令将遵循此基本模式。
让我们来看看
1.使用带有netcat命令的TCP创建连接
正如我之前提到的那样,NetCAT的核心功能正在将两台机器连接在一起。
我们可以使用TCP设置连接来连接两个单独的计算机,我们还可以使用终端模拟该连接。
听力机器:
nc -l 8080
此命令打开端口8080并告诉机器在此端口上开始侦听。
要建立连接,我们将使用另一个终端并输入以下内容。
客户端:
nc 127.0.0.1 8080
我们还可以使用"localhost"代替IP,或者如果我们正在进行远程连接,请使用第二个PC的IP。
就是这样,我们已打开TCP端口并建立了两个系统之间的连接。
为什么我们默认使用TCP?
TCP是比UDP更旧的技术,它们以不同级别的OSI模型运行。
我将快速概述它们之间的差异,并描述了某些情况,我们可以选择一个其他的情况。
TCP具有强大的纠错功能。
这意味着什么?
基本上,这意味着,虽然数据包在从系统到系统的传输中,但是正在执行连续的测试。
这些测试确保从系统A中准确复制来自系统A的信息。
这是当信息跨网络(Internet)行驶时会发生的非常简化版本。
虽然,有许多在互联网通信中使用的协议,而不仅仅是TCP。
UDP具有与TCP不同的规则。
既不必然"更好",但他们可以在执行不同的任务时擅长。
为什么我们将在TCP上使用UDP,反之亦然?
这取决于应用程序。
TCP较慢,但准确地传输数据更慢。
UDP可以在速度比可靠性传输信息更重要的情况下选择。
其中一个示例是流传输数据,如视频。
视频可以通过UDP更快地传输视频,即使传输中存在错误,它们也不太可能影响用户体验。
2.使用带有NC命令的UDP创建连接
制作UDP连接的步骤实际上与我们已经遵循的步骤相同。
我们将添加一个选项标志,以指定要打开的端口类型是UDP,而不是默认的TCP。
nc -l -u 999
这很简单。
这就是打开UDP端口'999'所需的一切。
我们可能想知道我们是否可以使用具有相同端口号的TCP和UDP。
我们可以,因为它们是单独的协议。
3.使用NC命令在远程系统之间传输文件
还有其他方法将文件从一个系统传输到另一个系统。
我们还可以使用netcat命令为此目的。
对于此示例,我创建了一个演示,说明了从我的Linux机器到MacBook Pro的远程文件传输。
设置Linux PC接收
nc -l 9999 > fromMac.file
我们开始在TCP端口9999上收听接收计算机。
'>'告诉机器我们期望传输文件。
遵循的名称是文件的本地名称。
设置Mac PC发送
nc 172.20.1.168 9999 < toLinux.file
这里的IP地址属于Linux机器。
将符号翻转到"<"",文件'tolinux.file'将被复制到远程计算机中作为"frommac.file"。
以下是使用两个不同机器发送文件的示例。
4.使用NC命令进行端口扫描
对端口扫描可能有更有效的选项,但可以使用netcat完成。
由于NetCat默认在大多数操作系统上安装,因此如果我们需要执行一些快速故障,就会知道如何执行此操作。
我们将使用"-n"并显示详细输出。
nc -v -n 127.0.0.1 1-100
这次尝试与1-100之间的端口进行连接。
端口80是HTTP,因为我很有意义。
此端口通常在机器上打开,因为它用于连接到互联网。
当我使用此命令时,我实际上尝试连接到1-100之间的所有端口。
它成功连接到端口80,但从Apache生成错误消息。
我最终在终端上有一些HTML输出,因为我的电脑将其视为坏页面请求。
[...] nc: connect to 127.0.0.1 port 77 (tcp) failed: Connection refused nc: connect to 127.0.0.1 port 78 (tcp) failed: Connection refused nc: connect to 127.0.0.1 port 79 (tcp) failed: Connection refused Connection to 127.0.0.1 80 port [tcp/*] succeeded! HTTP/1.1 400 Bad Request Date: Fri, 20 Dec 2019 15:08:29 GMT Server: Apache/2.4.38 (Ubuntu) Content-Length: 310 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br </p> <hr> <address>Apache/2.4.38 (Ubuntu) Server at pop-os.localdomain Port 80</address> </body></html>
零I/O模式
为避免这种情况,我们可以使用"-Z"标志,该标志代表零输入/输出。
这是netcat的内置端口扫描模式。
我仍然得到相同的语言,但它实际上并没有使连接到端口80产生不良请求错误。
相反,它继续通过所有扫描端口。