Hping est un assembleur/analyseur de paquets TCP/IP orienté ligne de commande.
L’interface est inspirée de la commande unix ping, mais il n’est pas seulement capable d’envoyer des requêtes d’écho ICMP. Il peut utiliser des paquets TCP/IP arbitraires pour un grand nombre d’objectifs différents.
Il fonctionne en envoyant des paquets ICMP ou TCP à un hôte distant et en mesurant le temps qu’il faut à l’hôte pour répondre. Il peut être utilisé dans les cas suivants :
- Tester des règles de pare-feu
- Analyse avancée des ports en alternative à nmap
- Tester les performances d’Internet en utilisant différents protocoles et la taille des paquets.
- Découvrir le chemin du MTU (MTU Path Discovery)
- Tracer le cheminement sous différents protocoles
- Empreinte digitale du système d’exploitation distant
- Utilisation de type pare-feu
- Audit de la pile TCP/IP
- Activer le mode écoute (alternative à nc)
Dans ce tutoriel, je vous donne plusieurs exemples d’utilisation de la commande hping3.
Table des matières
- 1 Comment installer Hping3 et syntaxe
- 2 Comment utiliser hping3 avec des exemples
- 2.1 Envoyer des paquets TCP à un hôte
- 2.2 Envoyer des paquets SYN à la cible
- 2.3 Envoyer un paquet TCP avec un drapeau FIN/ACK, RST, ACK, PUSH, XMAS, …
- 2.4 Faire un traceroute
- 2.5 Vérifier si un port TCP est ouvert
- 2.6 Effectuer un scan de port TCP (avec TCP SYN)
- 2.7 Xmas Scan port scan
- 2.8 Null Scan port scan
- 2.9 Faire une attaque DOS – SYN Flood et SYN Flood avec Spoof
- 2.10 DOS Land Attack
- 2.11 Smurf Attack
- 2.12 Faire un TCP Ping
- 2.13 Empreinte digitale de l’OS
- 2.14 Définir ou désactiver la fragmentation IP
- 2.15 Activer le mode IP brut
- 2.16 Envoyer des paquets ICMP à la cible
- 2.17 Envoyer des paquets UDP à la cible
- 2.18 Faire de la découverte d’hôte
- 2.19 Spécifier le port de destination
- 2.20 Spécifier le nombre de paquets
- 2.21 Mode d’écoute hping3
- 2.22 Activer la sortie verbeuse
- 2.23 Spécifier l’interface à utiliser
- 2.24 hping3 pour renifler de paquets réseau
- 2.25 Définir la taille du paquet
- 2.26 Activer l’horodatage TCP (Timestamp)
- 3 Liens
Comment installer Hping3 et syntaxe
Installer hping3 on Ubuntu and Debian avec APT :
sudo apt install hping3
Installer hping3 on CentOS, RHEL, Fedora avec DNF (ou Yum) :
sudo dnf install hping3
La syntaxe de la commande hping3 est la suivante :
sudo hping3 [options] <nom d'hôte>
Il existe énormément d’options pour vous permettre de forger des paquets.
De plus qu’il est possible d’exécuter des scripts TCL (fichier .htcl).
Voici les options les plus importantes de la commande hping3 :
- -0 : pour envoyer des paquets RAW IP (forgés)
- -1 : pour envoyer des paquets l’ICMP
- -2 : pour envoyer des paquets UDP
- -8, –scan : Mode de balayage
- -9, –listen : Mode d’écoute
- -a, –spoof : Spoof l’adresse source
- -c, –count : spécifier le nombre de paquets à envoyer
- -t, –ttl : définit le TTL (time to live) des paquets sortants
Comment utiliser hping3 avec des exemples
Envoyer des paquets TCP à un hôte
Lorsque la commande hping3 est utilisée sans aucune option, elle envoie des paquets TCP à l’hôte spécifié.
sudo hping3 192.168.56.102
Envoyer des paquets SYN à la cible
Pour envoyer des paquets SYN à l’adresse IP cible, vous pouvez utiliser l’option -S :
hping3 -S 192.168.56.102
Une alternative est d’utiliser l’option –syn.
hping3 --syn 192.168.56.102
Envoyer un paquet TCP avec un drapeau FIN/ACK, RST, ACK, PUSH, XMAS, …
Hping3 permet de très facilement spécifier le drapeau TCP (flag) à utiliser.
Pour cela, utilisez les options suivantes :
- -S ou –syn : SYN (flags=s)
- -R ou –rst : RST ( flags=r)
- -P ou –push : TCP PUSH (flags=p)
- -A ou –ack : TCP ACK (flags=a)
- -F ou –syn : FIN (flags=f)
- -U ou –urg : URG (flags=u)
- -X ou –xmas : Xmas (flags=x)
- -Y ou –ymas : Ymas (flags=y)
Par exemple pour envoyer des paquets FIN à l’hôte spécifié, utilisez l’option -F :
sudo hping3 -F 192.168.0.254
Vous pouvez aussi utiliser l’option –fin :
sudo hping3 --fin 192.168.0.254
Faire un traceroute
En alternative à la commande traceroute pour Linux, MTR (My Traceroute) sur Linux ou encore tracert pour Windows, il est aussi possible de faire un traceur avec hping3.
hping3 www.malekal.com -t 1 --traceroute
Vérifier si un port TCP est ouvert
Lorsque l’on a un doute, si un port distant est ouvert ou fermé, bloqué ou accessible par le pare-feu, on peut utiliser hping3.
Pour cela, on envoyer un paquet SYN sur un port ciblé à l’aide de l’option -p.
Par exemple pour vérifier si le port 443 est ouvert :
hping3 -S -p 443 www.google.fr
La lecture est la même que la commande ping.
Lorsque le port distant est ouvert, les paquets sont transmis et reçus.
Si le port est fermé ou bloqué, les paquets sont perdus.
Si besoin, l’option -s vous permet de définir le port source.
hping3 -S -c 1 -s 5151 -p 443 www.google.fr
Effectuer un scan de port TCP (avec TCP SYN)
Hping3 possède aussi un mode de balayage de port. Vous pouvez l’utiliser pour effectuer un scan de port sur un hôte.
L’option attend un argument qui décrit les groupes de ports à balayer séparés par des virgules : un nombre décrit un seul port, donc 1,2,3 signifie le port 1, 2 et 3. les plages sont spécifiées en utilisant une notation début-fin, comme 1-1000, qui indique à hping de balayer les ports entre 1 et 1000 (inclus).
Ainsi pour scanner les ports de 20 à 80 :
hping3 --scan 20-80 -S www.malekal.com
Ou encore avec l’option -8 :
hping3 -8 20-80 -S www.malekal.com
Une autre syntaxe consiste à écrire le premier port à scan et ajouter ++ pour demander à incrémenter.
Par exemple pour lancer un scan de port à partir du port 80 :
hping3 -S www.malekal.com -p ++80
Le mot spécial all est un alias pour scanner tous les ports de 0-65535 :
Enfin l’option known inclut tous les ports listés dans /etc/services :
hping3 --scan known -S www.malekal.com
Xmas Scan port scan
Enfin pour faire un scan de port de type Xmas Scan, utilisez la commande suivante :
hping3 -c 1 -V -p 20-80 -s 5050 -M 0 -UPF www.google.fr
Ce balayage met le numéro de séquence à zéro et place les drapeaux URG + PSH + FIN dans le paquet. Si le port TCP du dispositif cible est fermé, le dispositif cible envoie un paquet TCP RST en réponse. Si le port TCP du dispositif cible est ouvert, la cible rejette le scan TCP Xmas et n’envoie pas de réponse.
Null Scan port scan
Voici un exemple pour effectuer un scan du type “Null Scan” :
hping3 -c 1 -V -p 80 -s 5050 -Y www.google.fr
Ce balayage définit le numéro de séquence à zéro et n’a pas de drapeaux définis dans le paquet. Si le port TCP du dispositif cible est fermé, le dispositif cible envoie un paquet TCP RST en réponse. Si le port TCP du dispositif cible est ouvert, la cible rejette le balayage TCP NULL et n’envoie pas de réponse.
Faire une attaque DOS – SYN Flood et SYN Flood avec Spoof
Hping3 donne aussi la possibilité de spoofer l’adresse source.
Il est, pour cela, capable de forger des paquets TCP en modifiant l’adresse source avec une adresse aléatoire.
Pour cela, on utilise l’option –rand-source :
hping3 --rand-source 192.168.1.1
Coupler avec l’option -S, il est alors possible d’effectuer une une attaque SYN flood (attaque DOS) sur l’hôte cible.
Cela est utile pour tester les protections anti-DOS de son parefeu comme par exemple des règles Anti-DOS d’iptables.
hping3 --rand-source -S 10.0.0.41
DOS Land Attack
Voici un exemple d’attaque DOS du type DOS Land Attack :
hping3 -V -c 1000000 -d 120 -S -w 64 -p 445 -s 445 --flood --rand-source 10.0.0.41
Smurf Attack
Enfin une attaque Smurf Attack utilisant le protocole ICMP :
hping3 -1 --flood -a <adresse IP cible> <Adresse Broadcast>
Il s’agit d’un type d’attaque par déni de service qui inonde un système cible via des messages ping de diffusion usurpés.
Faire un TCP Ping
Différents types de TCP Pings peuvent être envoyés en utilisant les drapeaux TCP standard. Par exemple, pour envoyer un Ping TCP SYN au port 80 :
hping3 -S 192.168.1.254 -p 80
Et voici un exemple de Xmas Ping :
hping3 -F -P -U 192.168.1.254 -p 0
Empreinte digitale de l’OS
hping propose plusieurs façons de collecter les ISN et de déterminer leurs incréments. La plus simple est d’utiliser -Q ou – seqnum :
Définir ou désactiver la fragmentation IP
hping3 est aussi capable de définir la fragmentation IP avec les options suivantes :
- -f –frag : divise les paquets en plusieurs fragments. (peut passer un acl faible)
- -x –morefrag : définit l’indicateur more fragment
- -y –dontfrag : met le drapeau “Don’t fragment” (ne pas fragmenter)
- -g –fragoff : définit le décalage des fragments
Activer le mode IP brut
En mode IP brut, hping3 envoie un en-tête IP avec des données ajoutées avec –signature et/ou –file.
sudo hping3 -0 192.168.56.102
sudo hping3 --rawip 192.168.56.102
Envoyer des paquets ICMP à la cible
Pour envoyer un paquet en ICMP, utilisez l’option -1 ou –icmp.
Par défaut, hping3 envoie un message avec un code 0.
sudo hping3 -1 192.168.56.102
Si vous avez besoin de changer le type ICMP, utilisez l’option –icmptype ou -K.
Par exemple pour envoyer un message de type 13 :
sudo hping3 -1 --icmptype 13 10.0.0.41
Enfin utilisez l’option –icmptype ou -C pour spécifier le type. Par exemple pour envoyer un message ICMP du type 13 ((ICMP timestamp) :
sudo hping3 -1 --icmptype 13 10.0.0.41
Envoyer des paquets UDP à la cible
Si vous souhaitez envoyer des paquets en UDP, vous devez utiliser l’option -2 :
sudo hping3 -2 10.0.0.41
ou encore l’option –udp :
sudo hping3 --udp 10.0.0.41
Ainsi pour faire un scan de port UDP avec hping :
hping3 -2 192.168.1.254 -p 80 -c 1
Faire de la découverte d’hôte
Pour tous les différents types de mécanismes de découverte d’hôtes, hping n’a que des possibilités limitées de balayer des cibles multiples à partir de la ligne de commande.
Afin de scanner une gamme d’adresses IP, vous pouvez utiliser le caractère //x// qui sera remplacé par hping par un nombre aléatoire. Par exemple, la commande suivante analysera toute la gamme des réseaux locaux de classe C :
sudo hping3 -1 10.0.0.x --rand-dest -I ens33
Spécifier le port de destination
Le port par défaut est 0. Vous pouvez utiliser l’option -p ou –destport pour définir le port de destination lors de l’envoi de paquets.
sudo hping3 -p port 10.0.0.41
sudo hping3 --destport port 10.0.0.41
Spécifier le nombre de paquets
L’option -c ou –count vous permet de spécifier le nombre de paquets à envoyer.
sudo hping3 -c num 192.168.56.102
sudo hping3 --count num 192.168.56.102
Mode d’écoute hping3
Vous pouvez activer le mode d’écoute en utilisant l’option -9 ou –listen.
sudo hping3 -9 signature
sudo hping3 --listen signature
Activer la sortie verbeuse
L’option -V ou –verbose affiche les informations détaillées. Vous pouvez voir les détails des paquets qui sont envoyés.
sudo hping3 -V 192.168.56.102
sudo hping3 --verbose 192.168.56.102
Spécifier l’interface à utiliser
L’option -I ou –interface force hping3 à utiliser l’interface que vous spécifiez dans la commande.
sudo hping3 -I <nom interface> <adresse ip>
sudo hping3 -I <nom interface> <adresse ip>
Par exemple pour spéficier l’interface réseau wlan0 :
tcpdump -i wlan0 -n host 10.0.0.4
hping3 pour renifler de paquets réseau
hping3 peut également être utilisé pour renifler des paquets réseau. En utilisant le mode écoute, vous pouvez intercepter le trafic passant par l’interface réseau du système.
Par exemple, vous pouvez utiliser cette commande pour intercepter tout le trafic contenant des signatures HTTP.
sudo hping3 -9 HTTP -I enp0s9
Vous pouvez aussi spécifier une URL :
hping3 -9 "http://www.google.com/search?" --beep -I enp0s9
D’où l’intérêt de HTTPS.
Pour sniffer le réseau, voir les alternatives du type ngrep, tcpdump ou encore wiresharck
Définir la taille du paquet
L’option -d ou –data vous permet de spécifier la taille des paquets.
sudo hping3 -d size 192.168.56.102
sudo hping3 --data size 192.168.56.102
Activer l’horodatage TCP (Timestamp)
Vous pouvez utiliser l’option –tcp-timestamp pour afficher l’horodatage TCP. Il peut être utilisé pour estimer la fréquence de mise à jour de l’horodatage et le temps de fonctionnement du système distant.
sudo hping3 --tcp-timestamp 192.168.52.106
Liens
- Mesurer le débit et lister les connexions réseaux
- Comment configurer une adresse IP sur Ubuntu
- Comment configurer le réseau sur Linux
- nmcli : configurer le réseau NetworkManager sur Linux (Debian, Ubuntu, …)
- /etc/network/interfaces : configurer le réseau sur Debian
- Comment changer la configuration des serveurs DNS sur Linux
- Comment changer la passerelle par défaut sur Linux
- Netstat sur Linux : utilisations et exemples
- Comment utiliser la commande ss sur Linux avec des exemples
- 15 commandes ifconfig pour configurer une interface réseau sous Linux
- 10 commandes “IP” utiles pour configurer les interfaces réseau sur Linux
- 6 outils pour tester la vitesse de la connexion internet sur Linux en ligne de commandes
- Nmap : exemples et utilisations
- TCPDump : capturer et analyser le trafic réseau sur Linux
- 25+ exemples de la commande Hping3
- iperf : tester la vitesse et bande passante entre deux hôtes
- Comment utiliser la commande traceroute sur Linux avec des exemples
- Comment utiliser wget avec 14 exemples
- 16 exemples de la commande CURL
- 6 commandes pour télécharger des fichiers en ligne de commandes sur Linux
- Les commandes Linux réseaux
- Unix socket : fonctionnement et utilisations
- Configurer un serveur DHCP sous Linux (isc-dhcp-server)
- Liste de toutes les commandes Linux