Portierung von Netcat in Node.js. CLI-Dienstprogramm.
Um es in Ihre Node.js-App einzubetten, verwenden Sie stattdessen das Netcat-Paket. Dies soll als eigenständiges Tool verwendet werden, entspricht jedoch nicht vollständig der ursprünglichen Implementierung von Netcat.
Linux | Mac OS | Windows |
---|---|---|
$ npm install -g nc
$ nc -l -p port [- options] [hostname] [port]
Verfügbare Optionen:
-c shell commands as `-e’; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-s addr local source address
-u UDP mode
-U Listen or connect to a UNIX domain socket
-v verbose
-w secs timeout for connects and final net reads (client-side)
-z zero-I/O mode [used for scanning]
$ nc -l -p 2389
$ nc localhost 2389
Öffnen einer Raw-Verbindung zu Port 2389
.
Serverseitig | Kundenseite |
---|---|
nc -l 2389 > test | cat testfile | nc localhost 2389 |
$ nc -w 10 localhost 2389
Die obige Verbindung würde nach 10 Sekunden beendet.
$ nc -kl 2389
Auf diese Weise bleibt der Server aktiv, auch wenn die Verbindung zum Client getrennt wird.
Eine weitaus aufregendere Sache ist es, eine schnelle Shell auf einem Remote-Rechner einzurichten, indem man die Optionen -l
oder listen
und -e
oder die Option execute
verwendet. Wenn eine Verbindung hergestellt wird, führt Netcat das Programm Ihrer Wahl aus und verbindet stdin
und stdout
des Programms mit der Netzwerkverbindung.
$ nc -l -p 23 -e /bin/sh
Erstellen wir eine HTTP-Anforderungsdatei get.txt
, die die folgende Zeile und dann eine Leerzeile enthält:
GET / HTTP/1.0
Um mit Netcat die Homepage einer Website abzurufen, verwenden Sie Folgendes:
$ nc -v www.website.com 80 < get.txt
Sie werden sehen, wie Netcat eine Verbindung zu Port 80 herstellt, den in der Datei get.txt
enthaltenen Text sendet und dann die Antwort des Webservers an stdout
ausgibt.
Wenn der NC-Client im Normalfall die Verbindung trennt, wird er die Verbindung nicht erneut versuchen. Mit dem Parameter --retry <secs>
oder -R <secs>
> wird die Verbindung nach bis zu 10 Sekunden erneut hergestellt.
$ nc -R 5 localhost 2389
Wenn Sie Docker haben, versuchen wir, die Bilder unserer Container aufzulisten, die mit der Docker-Unix-Socket-Datei verbunden sind:
$ echo -e " GET /images/json HTTP/1.0rn " | nc -U /var/run/docker.sock
PS. Für dieses Beispiel sind Root-Berechtigungen erforderlich: sudo su
.
$ mkfifo /tmp/fifo
$ nc -l -k -p 8080 < /tmp/fifo | nc website.com 80 > /tmp/fifo
$ nc -z 192.168.1.100 1-255
Wenn Sie die Option -o
verwenden, können Sie den gesamten Hex-Verkehr entsorgen.
$ nc 127.0.0.1 4445 -o /tmp/log.txt
Standardmäßig sind alle Sockets, die das NC-Dienstprogramm erstellt, TCP-Protokolle, aber dieses Dienstprogramm funktioniert auch mit dem UDP-Protokoll. Um das UDP-Protokoll zu aktivieren, wird das Flag -u verwendet.
Serverseitig | Kundenseite |
---|---|
nc -u -l -p 2389 | nc -u localhost 2389 |
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
Leiten Sie über UDP (-u) mit einer Wartezeit (-w) von 1 Sekunde an 192.168.1.111
auf Port 514
weiter.
Debug entspricht dem ausführlichen Modus. Sie können es mit dem Parameter -v
oder der Umgebungsvariable DEBUG=nc
aktivieren. Dieses Modul verwendet die Knotenimplementierung von Netcat unter der Haube. Zum Debuggen beider verwenden Sie: DEBUG=netcat:*,nc
.
Rocco Musolino (@roccomuso)