Portage de Netcat dans Node.js. Utilitaire CLI.
Pour l'intégrer dans votre application Node.js, utilisez plutôt le package netcat. Ceci est destiné à être utilisé comme un outil autonome, mais il n’est pas totalement égal à l’implémentation originale de netcat.
Linux | MacOS | Fenêtres |
---|---|---|
$ npm install -g nc
$ nc -l -p port [- options] [hostname] [port]
Options disponibles :
-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
Ouverture d'une connexion brute au port 2389
.
Côté serveur | Côté client |
---|---|
nc -l 2389 > test | cat testfile | nc localhost 2389 |
$ nc -w 10 localhost 2389
La connexion ci-dessus serait interrompue après 10 secondes.
$ nc -kl 2389
De cette façon, le serveur reste actif même si le client est déconnecté.
Une chose bien plus intéressante à faire est de lancer un shell rapide sur une machine distante en utilisant l'option -l
ou listen
et l'option -e
ou execute
. Lorsqu'une connexion est établie, Netcat exécute le programme de votre choix et connecte le stdin
et stdout
du programme à la connexion réseau.
$ nc -l -p 23 -e /bin/sh
Créons un fichier de requête HTTP get.txt
qui contient la ligne suivante puis une ligne vide :
GET / HTTP/1.0
Pour utiliser Netcat pour récupérer la page d'accueil d'un site Web, utilisez :
$ nc -v www.website.com 80 < get.txt
Vous verrez Netcat établir une connexion au port 80, envoyer le texte contenu dans le fichier get.txt
, puis afficher la réponse du serveur Web sur stdout
.
Dans un scénario normal, si le client nc se déconnecte, il ne tentera pas de se connecter. Avec le paramètre --retry <secs>
ou -R <secs>
, il réessayera la connexion après tot secondes.
$ nc -R 5 localhost 2389
Si vous avez Docker, essayons de lister les images de nos conteneurs se connectant au fichier socket unix docker :
$ echo -e " GET /images/json HTTP/1.0rn " | nc -U /var/run/docker.sock
PS. pour cet exemple, les autorisations root sont requises : 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
Si vous utilisez l'option -o
, vous pouvez vider tout le trafic hexadécimal.
$ nc 127.0.0.1 4445 -o /tmp/log.txt
Par défaut, tous les sockets créés par l'utilitaire nc sont des protocoles TCP, mais cet utilitaire fonctionne également avec le protocole UDP. Pour activer le protocole UDP, l'indicateur -u est utilisé.
Côté serveur | Côté client |
---|---|
nc -u -l -p 2389 | nc -u localhost 2389 |
$ echo 'message' | nc -w 1 -u 192.168.1.111 514
Canalisez via UDP (-u) avec un temps d'attente (-w) de 1 seconde vers 192.168.1.111
sur le port 514
.
Debug correspond au mode verbeux. Vous pouvez l'activer avec le paramètre -v
ou l'env var DEBUG=nc
. Ce module utilise l'implémentation de nœud de netcat sous le capot, pour déboguer les deux utilisations : DEBUG=netcat:*,nc
.
Rocco Musolino (@roccomuso)