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)