GNU/Linux >> Tutoriels Linux >  >> Linux

Commande Netcat (nc) avec exemples

Netcat (ou nc ) est un utilitaire de ligne de commande qui lit et écrit des données sur des connexions réseau, à l'aide des protocoles TCP ou UDP. C'est l'un des outils les plus puissants de l'arsenal des administrateurs réseau et système, et il est considéré comme un couteau suisse des outils de mise en réseau.

Netcat est multiplateforme et est disponible pour Linux, macOS, Windows et BSD. Vous pouvez utiliser Netcat pour déboguer et surveiller les connexions réseau, rechercher les ports ouverts, transférer des données, en tant que proxy, etc.

Le package Netcat est préinstallé sur macOS et les distributions Linux populaires comme Ubuntu, Debian ou CentOS.

Syntaxe Netcat #

La syntaxe la plus élémentaire de l'utilitaire Netcat prend la forme suivante :

nc [options] host port

Sur Ubuntu, vous pouvez utiliser soit netcat ou nc . Ce sont tous les deux des liens symboliques vers la version openBSD de Netcat.

Par défaut, Netcat tentera de démarrer une connexion TCP vers l'hôte et le port spécifiés. Si vous souhaitez établir une connexion UDP, utilisez le -u choix :

nc -u host port

numéro d'analyse de port

L'analyse des ports est l'une des utilisations les plus courantes de Netcat. Vous pouvez analyser un seul port ou une plage de ports.

Par exemple, pour rechercher des ports ouverts dans la plage 20-80, vous utiliserez la commande suivante :

nc -z -v 10.10.8.8 20-80

Le -z l'option indiquera nc pour scanner uniquement les ports ouverts, sans leur envoyer de données et le -v possibilité de fournir des informations plus détaillées.

La sortie ressemblera à ceci :

nc: connect to 10.10.8.8 port 20 (tcp) failed: Connection refused
nc: connect to 10.10.8.8 port 21 (tcp) failed: Connection refused
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
nc: connect to 10.10.8.8 port 23 (tcp) failed: Connection refused
...
nc: connect to 10.10.8.8 port 79 (tcp) failed: Connection refused
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Si vous souhaitez imprimer uniquement les lignes avec les ports ouverts, vous pouvez filtrer les résultats avec le grep commande.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port [tcp/ssh] succeeded!
Connection to 10.10.8.8 80 port [tcp/http] succeeded!

Vous pouvez également utiliser Netcat pour trouver le logiciel serveur et sa version. Par exemple, si vous envoyez une commande "EXIT" au serveur sur le port SSH par défaut 22 :

echo "EXIT" | nc 10.10.8.8 22

La sortie ressemblera à ceci :

SSH-2.0-OpenSSH_7.6p1 Ubuntu-4
Protocol mismatch.

Pour rechercher les ports UDP, ajoutez simplement le -u option à la commande comme indiqué ci-dessous :

nc -z -v -u 10.10.8.8 20-80

En règle générale, Nmap est un meilleur outil que Netcat pour l'analyse de ports complexes.

Envoi de fichiers via Netcat #

Netcat peut être utilisé pour transférer des données d'un hôte à un autre en créant un modèle client/serveur de base.

Cela fonctionne en configurant Netcat pour qu'il écoute sur un port spécifique (en utilisant le -l option) sur l'hôte de réception, puis en établissant une connexion TCP régulière à partir de l'autre hôte et en envoyant le fichier via celui-ci.

À la réception, exécutez la commande suivante qui ouvrira le port 5555 pour la connexion entrante et redirigera la sortie vers le fichier :

nc -l 5555 > file_name

Depuis l'hôte d'envoi, connectez-vous à l'hôte de réception et envoyez le fichier :

nc receiving.host.com 5555 < file_name

Pour transférer un répertoire, vous pouvez utiliser tar pour archiver le répertoire sur l'hôte source et extraire l'archive sur l'hôte de destination.

Sur l'hôte de réception, configurez l'outil Netcat pour écouter une connexion entrante sur le port 5555. Les données entrantes sont redirigées vers le tar commande, qui va extraire l'archive :

nc -l 5555 | tar xzvf -

Sur l'hôte d'envoi, pack le répertoire et envoie les données en se connectant à l'écoute nc processus sur l'hôte de réception :

tar czvf - /path/to/dir | nc receiving.host.com 5555

Vous pouvez regarder la progression du transfert aux deux extrémités. Une fois terminé, tapez CTRL+C pour fermer la connexion.

Création d'un serveur de chat simple #

La procédure de création d'un chat en ligne entre deux hôtes ou plus est la même que lors du transfert de fichiers.

Sur le premier hôte, démarrez un processus Netcat pour écouter sur le port 5555 :

nc -l 5555

Depuis le deuxième hôte, exécutez la commande suivante pour vous connecter au port d'écoute :

nc first.host.com 5555

Maintenant, si vous tapez un message et appuyez sur ENTER il sera affiché sur les deux hôtes.

Pour fermer la connexion, tapez CTRL+C .

Effectuer une requête HTTP #

Bien qu'il existe de bien meilleurs outils pour les requêtes HTTP tels que curl , vous pouvez également utiliser Netcat pour envoyer diverses requêtes à des serveurs distants.

Par exemple, pour récupérer la page de manuel de Netcat sur le site Web d'OpenBSD, vous devez taper :

printf "GET /nc.1 HTTP/1.1\r\nHost: man.openbsd.org\r\n\r\n" | nc man.openbsd.org 80

La réponse complète, y compris les en-têtes HTTP et le code HTML, sera imprimée dans le terminal.

Conclusion #

Dans ce didacticiel, vous avez appris à utiliser l'utilitaire Netcat pour établir et tester des connexions TCP et UDP.

Pour plus d'informations, visitez la page de manuel de Netcat et découvrez toutes les autres options puissantes de la commande Netcat.

Si vous avez des questions ou des remarques, veuillez laisser un commentaire ci-dessous.


Linux
  1. Commande Linux wc avec exemples

  2. Commande Linux Tee avec exemples

  3. Commande principale Linux avec exemples

  4. Commande Nohup avec exemples

  5. Commande JQ sous Linux avec exemples

15 Commande Linux ps avec exemples

Commande de CD Linux avec exemples

Commande Linux watch avec exemples

Commande Wait sous Linux avec des exemples

Commande IP Linux avec exemples

Commande d'historique avec exemples