Comment utiliser l'outil réseau netcat

Table des matières

Dans ce tutoriel, nous allons parler d'un outil réseau Netcat très puissant, communément abrégé en nc. Cet outil s'utilise via la ligne de commande et sa syntaxe est très simple. Il nous permettra d'écrire et de recevoir des données via des sockets (TCP ou UDP). Il a de nombreuses fonctionnalités et nous pouvons donc l'utiliser de plusieurs manières. Il est important de connaître son fonctionnement, car il nous permettra de déboguer, tester et enquêter sur le réseau.

Netchat peut fonctionner en 2 modes :

ClientDans ce mode il se chargera de se connecter avec l'auditeur (qui écoute à une adresse et IP spécifique, et que nous aurons besoin de connaître).

Serveur ou écouteurAttendez les connexions des clients sur un certain port.

Nous allons découvrez comment fonctionne Netcat ou nc à travers des exemples pratiques, qui est la meilleure façon d'apprendre. Pour cela, j'utiliserai le système d'exploitation Ubuntu 16.04.

La première chose que nous allons voir est la syntaxe netcat :

 nc [options] [cible] [port]
Netchat vous avez beaucoup d'options, voyons quelques-unes :

Quelques options de netcar

  • -l: indique à netcat d'écouter.
  • -p: Pour indiquer le port d'origine.
  • -s: Pour indiquer l'adresse source.
  • -k: Pour autoriser des connexions "infinies" à l'auditeur (utilisé avec -l).
  • -ou alors: Netcat ouvre le port en UDP au lieu de TCP (qui est par défaut).
  • -v: Avec cette option, il nous montrera les informations de connexion.
  • -je: Pour indiquer le délai d'envoi et de réception. (En secondes).
  • -4: permet à Netcat d'utiliser uniquement IPv4.
  • -6: Comme le précédent mais oblige à utiliser IPv6.

Il y a plus d'options que nous pouvons voir en exécutant la commande suivante :

 nc -h
Ci-dessous vous pouvez voir dans l'image:

Nous allons commencer par les exemples, le plus simple ira en premier, pour les compliquer, mais juste un peu, vous verrez qu'il est très simple d'utilisation.

Exemple 1
Mettre ma machine en écoute sur le port 87 :

 sudo nc -l -p 87
RemarqueCela fonctionnerait de la même manière en supprimant -p.

Maintenant, nous allons établir une connexion à partir d'un autre terminal, comme je l'exécute sur la même machine, j'utilise localhost comme adresse :

 nc localhost 87
Si nous écrivons quelque chose depuis le client que nous venons d'ouvrir, nous le verrons également dans le terminal qui écoute, et ainsi nous vérifions que la connexion fonctionne correctement. Mais si nous écrivons à l'auditeur, le premier terminal, il atteint également le client. Ensuite, je laisse une image de l'auditeur et une autre du client :

On voit qu'ils communiquent comme on voulait dans cet exemple, allons-y pour un autre.

Exemple 2
On peut faire en sorte que le serveur ou l'auditeur enregistre les données envoyées par le client dans un fichier, pour cela la commande à exécuter ne diffère pas beaucoup de celle vue dans le premier exemple :

 sudo nc -l 87> test
Notertest est le nom du fichier où vous allez enregistrer les informations qui arrivent.

Côté client la commande sera la même qu'avant :

 nc localhost 87
L'image suivante montre ce qui est exécuté sur le client (l'auditeur écoute avant de se connecter, sinon cela n'aurait aucun effet) :

Et côté serveur on peut voir qu'apparemment rien n'est reçu, mais la seule certitude est qu'il ne s'affiche pas à l'écran et est enregistré dans le fichier de test :

Continuons avec un autre exemple.

Exemple 3
Nous allons vérifier si une plage de ports, pour savoir s'ils sont ouverts ou non, dans cet exemple la plage sera 80-90. Nous ouvrons d'abord un serveur sur le port 80 comme nous l'avons fait dans le premier exemple (nous verrons donc comment cela fonctionne quand il est ouvert, et quand il ne l'est pas) :

 sudo nc -l 87
Et sur le client nous exécuterons :
 nc -z -v hôte local 80-90
Paramètre -z est utilisé pour la numérisation, et le -v Comme nous l'avons vu précédemment pour afficher des informations (si nous ne mettons pas ceci, cela ne montrera pas quel port est ouvert et lequel ne l'est pas), alors l'image du client :

Nous allons voir un exemple en UDP.

Exemple 4
Cet exemple est également simple, nous allons écouter UDP sur le port 2016, et nous allons le forcer à être une adresse IPv4 :

 sudo nc -l -u -4 2016
Et maintenant, nous faisons en sorte que le client se connecte :
 nc -u -4 2016
Je ne fournis pas d'image, puisque la capture sera la même que dans l'exemple 1, en changeant bien entendu la partie de la commande. Passons à un exemple dans lequel nous utilisons du code Python.

Exemple 5
Nous allons mettre un code le plus simple possible en Python pour qu'il écoute une connexion, reçoive une donnée et se termine.

 import socket s = socket.socket () s.bind (("192.168.56.1", 1987)) s.listen (1) conn, addr = s.accept () data = conn.recv (1024) .decode (" utf-8 ") impression (données) 
Je vais exécuter ce code sous Windows, puis à partir de Linux, je m'y connecterai via netcat, l'image suivante montre le côté client sous Linux :

Et à quoi cela ressemblerait sous Windows :

Si nous modifions quelque chose dans le code, nous pouvons lui faire exécuter une commande et nous envoyer son contenu, mais nous pouvons également renvoyer un shell, ce qui nous permettra de faire beaucoup de choses, passons donc à l'exemple suivant.

Exemple 6
Dans cet exemple, je vais exécuter un code python Sur la même machine Linux, et je vais me connecter avec netcat, nous allons vérifier qu'un Shell (/bin/bash) nous renvoie. Ci-dessous, je laisse le code Python, aussi simple et court que possible, juste pour l'exemple.

 import socket, subprocess s = socket.socket (socket.AF_INET) s.setsockopt (socket.IPPROTO_IP, socket.SO_REUSEADDR, 1) s.bind (("", 1987)) s.listen (1) conn, addr = s .accept () p = subprocess.Popen (["/ bin / bash"], stdin = conn, stdout = conn, stder = conn) 
Le code Python est exécuté et ce qui suit est affiché (l'image montre à quoi il ressemble lors de la connexion à partir de netcat) :

Nous voyons qu'il écoute lorsque nous l'exécutons, mais lorsqu'un client se connecte, la connexion se ferme et nous avons un Shell pour nous.

Nous pourrions également faire un code qui se connecte à notre machine, que nous mettrons à l'écoute sur un certain port, en général il y a beaucoup de possibilités, maintenant vous devez enquêter et "jouer" avec netcat, qui comme vous l'avez vu peut aider nous dans de nombreux moments.

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave