Linux中Netcat(NC)命令

时间:2020-03-05 15:29:03  来源:igfitidea点击:

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产生不良请求错误。
相反,它继续通过所有扫描端口。