HPING2(8)

NOM
hping2 - envoie des paquets TCP/IP (presque) arbitraires à des systèmes réseaux

RESUME
hping2 [ -hvnqVDzZ012WrfxykQbFSRPAUXYjJBuTG ] [ -c count ] [ -i wait ] [ --fast ] [ -I interface ] [ -9 signature ] [ -a host ] [ -t ttl ] [ -N ip id ] [ -H ip protocol ] [ -g fragoff ] [ -m mtu ] [ -o tos ] [ -C icmp type ] [ -K icmp code ] [ -s source port ] [ -p[+][+] dest port ] [ -w tcp window ] [ -O tcp offset ] [ -M tcp sequence number ] [ -L tcp ack ] [ -d data size ] [ -E filename ] [ -e signature ] [ --icmp-ipver version ] [ --icmp-iphlen length ] [ --icmp-iplen length ] [ --icmp-ipid id ] [ --icmp-ipproto protocol ] [ --icmp-cksum checksum ] [ --icmp-ts ] [ --icmp-addr ] [ --tcpexitcode ] [ --tcp-timestamp ] [ --tr-stop ] [ --tr-keep-ttl ] [ --tr-no-rtt ] [ --rand-dest ] [ --rand-source ] hostname

DESCRIPTION
hping2 est un outil réseau capable d'envoyer des paquets TCP/IP sur commande et d'afficher les réponses de la cible comme le programme ping le fait avec les réponses ICMP. hping2 traite la fragmentation, les contenus de paquets et les tailles arbitraires, et peut être utilisé dans le but de transférer des fichiers encapsulés dans les protocoles supportés. En utilisant hping2 vous êtes capable d'effectuer au moins les tâches suivantes :
 - Tester les règles d'un firewall
 - Scanner des ports de façon avancée
 - Tester les performances réseau en utilisant différents protocoles, tailles de paquets, TOS (type de service) et fragmentation.
 - Découverte de "Path MTU"
 - Transférer des fichiers même au travers de règles de firewall vraiment fascistes.
 - Comme traceroute avec différents protocoles.
 - Utilisation comme Firewalk.
 - Détermination d'OS à distance.
 - Audit de pile TCP/IP.
 - Beaucoup d'autres. C'est également un bon outil didactique pour apprendre TCP/IP. hping2 est développé et maintenu par antirez@invece.org et est sous la version 2 de la licence GPL. Le développement est ouvert donc vous pouvez m'envoyer des patches, suggestions et affronts sans inhibition.

SITE DE HPING
site primaire sur http://www.hping.org. Vous pouvez trouver à la fois la version stable et les instructions pour télécharger le dernier code source sur http://www.hping.org/download.html

OPTIONS DE BASE

-h --help
    Montre l'écran d'aide sur la sortie standard, donc vous pouvez rediriger vers less.

-v --version
    Montre l'information de version et l'API utilisée pour accéder au niveau données (data link layer), linux sock packet ou libpcap.

-c --count count
    Arrête après avoir envoyé (et reçu) count paquets réponse. Après que le dernier paquet a été envoyé hping2 attend COUNTREACHED_TIMEOUT secondes les réponses du système cible. Vous avez la possibilité de régler COUNTREACHED_TIMEOUT en éditant hping2.h

-i --interval
    Attend le nombre spécifié de secondes ou de micro secondes entre l'envoie de chaque paquet. --interval X fixe wait à X secondes, --interval uX fixe wait à X micro secondes. Le défaut est d'attendre une seconde entre chaque paquet. En utilisant hping2 pour transférer des fichiers fixer cette option est très important pour augmenter le taux de transfert. Même en utilisant hping2 pour effectuer des scans passifs/avec usurpation d'adresse vous devriez fixer cette option, voir HPING2-HOWTO pour plus d'informations.

--fast
    Alias pour -i u10000. Hping enverra 10 paquets par seconde.

--faster
    Alias pour -i u1. Plus rapide que --fast ;) (mais pas aussi rapide que votre ordinateur peut envoyer des paquets à cause de la conception basée sur les signaux).

-n --numeric
    Sortie numérique seulement, aucune tentative ne sera faite pour chercher les noms symboliques pour les adresses système.

-q --quiet
    Sortie silencieuse. Rien n'est affiche excepté les lignes de résume au moment du démarrage et quand c'est fini.

-I --interface interface name
    Par défaut sur les systèmes linux et BSD hping2 utilise l'interface de routage par défaut. Sur d'autres systèmes ou quand il n'y a pas d'interface de routage par défaut hping2 utilise la première interface non loopback. Quoi qu'il en soit vous avez la possibilité de forcer hping2 à utiliser l'interface dont vous avez besoin en utilisant cette option. Note : vous n'avez pas besoin de spécifier le nom complet, par exemple -I et va correspondre à eth0 ethernet0 myet1 et cetera. Si aucune interface ne correspond hping2 essayera d'utiliser lo.

-V --verbose
    Active la sortie verbeuse. Les réponses TCP seront affichées comme suit : len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms tos=0 iplen=40 seq=0 ack=1380893504 sum=2010 urp=0

-D --debug
    Active le mode de débogage, c'est utile quand vous rencontrez quelques problèmes avec hping2. Quand le mode de débogage est activé vous obtiendrez plus d'informations à propos de la détection des interfaces, de l'accès au niveau données, du réglage des interfaces, des options d'analyse, de la fragmentation, du protocole HCMP et d'autres choses.

-z --bind
    Lie CTRL+Z au time to live (TTL) ainsi vous serez capable d'incrémenter/décrémenter le ttl des paquets sortant en pressant CTRL+Z une ou deux fois.

-Z --unbind
    Dé-lie CTRL+Z ainsi vous serez capable d'arrêter hping2

SELECTION DE PROTOCOLE
Le protocole par défaut est TCP, par défaut hping2 enverra des entêtes TCP sur le port 0 du système cible avec une winsize (ndt : taille de fenêtre) de 64 sans aucun drapeau TCP activé. Souvent c'est la meilleure manière de faire un 'ping caché', utile quand la cible est derrière un firewall qui jette ICMP. De plus un paquet TCP null-flag (ndt : sans drapeau) vers le port 0 a de bonnes probabilités de ne pas être journalisé.

-0 --rawip
    Mode RAW IP, dans ce mode hping2 enverra une entête IP avec les données ajoutées avec --signature et/ou --file, voir également --ipproto qui vous autorise à fixer le champ protocole IP.

-1 --icmp
    Mode ICMP, par défaut hping2 enverra un paquet ICMP echo-request, vous pouvez fixer un autre type/code ICMP en utilisant les options --icmptype --icmpcode

-2 --udp
    Mode UDP, par défaut hping2 enverra des paquets UDP vers le port 0 du système cible. Les options réglables des entêtes UDP sont les suivantes : --baseport, --destport, --keep.

-8 --scan
    Mode scan, l'option attend un argument qui décrit des groupes de ports à scanner. Les groupes de ports sont séparés par des virgules : un nombre décrit seulement un port unique, donc 1,2,3 signifie ports 1, 2 et 3. Les intervalles sont spécifiés en utilisant une notation début-fin, comme 1-1000, qui dit à hping de scanner les ports entre 1 et 1000 (inclus). Le mot spécial all est un alors pour 0-65535, pendant que le mot spécial known inclut tous les ports listés dans /etc/services.
    Les groupes peuvent être combinés, donc la commande suivante scannera les ports entre 1 et 1000 ET le port 8888 ET les ports listés dans /etc/services: hping --scan 1-1000,8888,known -S target.host.com
    Les groupes peuvent être niés (soustraits) en utilisant un caractère ! comme préfix, donc la ligne de commande suivante scannera tous les ports NON listés dans /etc/services dans l'intervalle 1-1024 : hping --scan '1-1024,!known' -S target.host.com
    Gardez à l'esprit que pendant que hping apparaît beaucoup plus comme un scanneur de ports dans ce mode, la plupart des options sont toujours honorées, donc pour effectuer par exemple un scan SYN vous avez besoin de spécifier l'option -S, vous pouvez changer la taille de la fenêtre TCP, le TTL, contrôler la fragmentation IP comme habituellement, et ainsi de suite. La seule différence réelle est que le comportement standard de hping est encapsulé dans un algorithme de scan.
    Note technique : Le mode scan utilise une conception basée sur deux processus, avec de la mémoire partagée pour la synchronisation. L'algorithlme de scan n'est toujours pas optimal, mais déjà assez rapide.
    Conseil : à la différence de la plupart des scanneurs, hping montre quelques informations intéressantes à propos des paquets reçus, les champs IP ID, TCP win, TTL, et ainsi de suite, n'oubliez pas de regarder ces informations additionnelles quand vous effectuez un scan! Quelques fois elles montrent des détails intéressants.

-9 --listen signature
    Mode d'écoute de HPING2, en utilisant cette option hping2 attend les paquets qui contiennent signature et exporte de la fin de la signature à la fin du paquet. Par exemple si hping2 --listen TEST lit un paquet qui contient 234-09sdflkjs45-TESThello_world il affichera hello_world.

OPTIONS IP

-a --spoof hostname
    Utiliser cette option dans le but de fixer une fausse adresse source, cette option assure que le système cible n'obtiendra pas votre adresse réelle. Quoi qu'il en soit les réponses seront envoyées à l'adresse usurpée, ainsi vous ne serez pas capable de les voir. Afin de voir comment il est possible d'effectuer des scans avec des adresses usurpées/passifs voir le fichier HPING2-HOWTO.

--rand-source
    Cette option active le mode source aléatoire. hping enverra des paquets avec des adresses sources aléatoires. Il est intéressant d'utiliser cette option pour stresser les tables d'étât d'un firewall, et d'autres tables dynamiques basées sur les IP dans les piles TCP/IP et les firewall logiciels.

--rand-dest
    Cette option active le mode destination aléatoire. hping enverra des paquets à des adresses aléatoires obtenues en suivant la règle que vous avez spécifiée comme système cible. Vous avez besoin de spécifier une adresse IP numérique en tant que système cible comme 10.0.0.x. Toutes les occurrences de x seront remplacées avec un nombre aléatoire dans l'intervalle 0-255. Ainsi pour obtenir des adresses IP internet dans l'espace IPv4 complet utilisez quelque chose comme hping x.x.x.x --rand-dest. Si vous n'êtes pas sûrs du genre d'adresses que votre règle génère essayez d'utiliser l'option --debug pour afficher chaque nouvelle adresse destination générée.
    Attention : quand cette option est activée hping ne peut pas détecter la bonne interface de sortie pour les paquets, ainsi vous devez utiliser l'option --interface pour sélectionner l'interface de sortie.

-t --ttl time to live
    En utilisant cette option vous pouvez fixer le TTL (time to live) des paquets sortant, il est vraisemblable que vous utiliserez ceci avec les options --traceroute ou --bind Dans le doute essayez `hping2 some.host.com -t 1 --traceroute'.

-N --id
    Fixe le champ ip->id . La valeur du champ id par défaut est aléatoire mais si la fragmentation est activée et que le champ id n'est pas spécifié alors il sera égal à getpid() & 0xFF, mettre en oeuvre une meilleure solution est dans la liste TODO (ndt : à faire).

-H --ipproto
    Fixe le protocole IP dans le mode RAW IP.

-W --winid
    Le champ id des systèmes Windows* avant Win2k ont un byte ordering (ndt : ordre des octets) différent, si cette option est activée hping2 affichera proprement les champs id des réponses de ces Windows.

-r --rel
    Affiche les incréments du champ id au lieu du champ id. Voir le fichier HPING2-HOWTO pour plus d'informations. Les incréments ne sont pas calculés comme id[N]-id[N-1] mais en utilisant une compensation de pertes de paquets. Voir le fichier relid.c pour plus d'informations.

-f --frag
    Découpe les paquets en fragments, ceci peut être utile afin de tester les performances de la fragmentation des piles IP et de tester si certains filtres de paquets sont si faibles qu'ils peuvent être passés en utilisant de petits fragments (anachronique). Par défaut le 'mtu virtuel' (ndt : taille des fragments) est de 16 octets. Voir également l'option --mtu.

-x --morefrag
    Fixe le drapeau IP "more fragments" (ndt : d'autres fragments), utilisez cette option si vous voulez que le système cible envoie un paquet ICMP time-exceeded during reassembly (ndt : délai dépassé durant le ré-assemblage).

-y --dontfrag
    Fixe le drapeau IP "don't fragment" (ndt : ne pas fragmenter), ceci peut être utilisé pour effectuer un MTU path discovery (ndt : découverte de la valeur minimale de la "taille maximale des paquets" sur le chemin).

-g --fragoff fragment offset value
    Fixe l'offset du fragment.

-m --mtu mtu value
    Fixe un 'mtu virtuel' différent de 16 quand la fragmentation est activée. Si la taille des paquets est supérieure au 'mtu virtuel' alors la fragmentation est automatiquement activée.

-o --tos hex_tos
    Fixe Type Of Service (TOS) (ndt : le type de service), pour plus d'informations essayez --tos help.

-G --rroute
    Enregistrer la route. Inclut l'option RECORD_ROUTE dans chaque paquet envoyé et affiche la route présente dans le tampon du paquet retourné. Notez que l'entête IP n'est suffisamment large que pour neuf routes. Beaucoup de systèmes ignorent ou suppriment cette option. Notez également qu'en utilisant hping vous êtes capable d'utiliser l'enregistrement de la route même si le système cible filtre ICMP. Enregistrer la route est une option IP, non pas une option ICMP, ainsi vous pouvez utiliser l'option d'enregistrement de la route même dans les modes TCP et UDP.

OPTIONS ICMP

-C --icmptype type
    Fixe le type ICMP, le défaut est ICMP echo request.

-K --icmpcode code
    Fixe le code ICMP, le défaut est 0 (implique --icmp).

--icmp-ipver
    Fixe la version IP de l'entête IP contenue dans les données ICMP, le défaut est 4.

--icmp-iphlen
    Fixe la longueur de l'entête IP contenue dans les données ICMP, le défaut est 5 (5 mots de 32 bits).

--icmp-iplen
    Fixe la longueur du paquet IP de l'entête IP contenue dans les données ICMP, le défaut est la taille réelle.

--icmp-ipid
    Fixe le champ IP id de l'entête IP contenue dans les données ICMP, le défaut est aléatoire.

--icmp-ipproto
    Fixe le protocole IP de l'entête IP contenue dans les données ICMP, le défaut est TCP.

--icmp-cksum
    Fixe la somme de contrôle ICMP, le défaut est la somme de contrôle valide.

--icmp-ts
    Alias pour --icmptype 13 (pour envoyer des requêtes ICMP timestamp).

--icmp-addr
    Alias pour --icmptype 17 (pour envoyer des requêtes ICMP masque réseau).

OPTIONS TCP/UDP

-s --baseport source port
    hping2 utilise le port source afin de deviner les numéros de séquence des réponses. Il commence avec un numéro de port source de base, et incrémente ce numéro pour chaque paquet envoyé. Quand un paquet est reçu alors le numéro de séquence peut être calculé comme port.source.réponse - port.source.de.base. Le port source de base par défaut est aléatoire, en utilisant cette option vous êtes capable de fixer un numéro différent. Si vous avez besoin que le port source ne soit pas incrémenté pour chaque paquet envoyé utilisez l'option -k --keep.

-p --destport [+][+]dest port
    Fixe le port destination, le défaut est 0. Si le caractère '+' précède le numéro de port destination (i.e. +1024) le port destination sera incrémenté pour chaque paquet reçu. Si deux '+' précèdent le numéro de port destination (i.e. ++1024), le port destination sera incrémenté pour chaque paquet envoyé. Par défaut le port destination peut être modifié interactivement en utilisant CTRL+z.

--keep
    Garde constant le port source, voir --baseport pour plus d'informations.

-w --win
    Fixe la taille de la fenêtre TCP. Le défaut est 64.

-O --tcpoff
    Fixe un faux offset (ndt : décalage) des données TCP. L'offset normal des données est tcphdrlen / 4.

-M --tcpseq
    Fixe le numéro de séquence TCP.

-L --tcpack
    Fixe le drapeau TCP ack.

-Q --seqnum
    Cette option peut être utilisée afin de collecter les numéros de séquence générés par le système cible. Ceci peut être utile quand vous avez besoin d'analyser si les numéros de séquence TCP sont prévisibles. Exemple de sortie : #hping2 win98 --seqnum -p 139 -S -i u1 -I eth0
    HPING uaz (eth0 192.168.4.41): S set, 40 headers + 0 data bytes
    2361294848 +2361294848
    2411626496 +50331648
    2545844224 +134217728
    2713616384 +167772160
    2881388544 +167772160
    3049160704 +167772160
    3216932864 +167772160
    3384705024 +167772160
    3552477184 +167772160
    3720249344 +167772160
    3888021504 +167772160
    4055793664 +167772160
    4223565824 +167772160
    La première colonne reporte les numéros de séquence, la seconde la différence entre le numéro de séquence courant et le dernier. Comme vous pouvez le voir les numéros de séquence du système cible sont prévisibles.

-b --badcksum
    Envoie des paquets avec une mauvaise somme de contrôle UDP/TCP

--tcp-timestamp
    Active l'option TCP timestamp, et essaye de deviner la fréquence de mise à jour du timestamp et l'uptime du système distant.

-F --fin
    Fixe le drapeau TCP FIN.

-S --syn
    Fixe le drapeau TCP SYN.

-R --rst
    Fixe le drapeau TCP RST.

-P --push
    Fixe le drapeau TCP PUSH.

-A --ack
    Fixe le drapeau TCP ACK.

-U --urg
    Fixe le drapeau TCP URG.

-X --xmas
    Fixe le drapeau TCP Xmas.

-Y --ymas
    Fixe le drapeau TCP Ymas.

OPTIONS COMMUNES

-d --data data size
    Fixe la taille du corps du paquet. Attention, en utilisant --data 40 hping2 ne générera pas des paquets de 0 octet mais de entête_de_protocole+40 octets. hping2 affichera en information la taille des paquets comme première ligne de sortie, comme ceci : HPING www.yahoo.com (ppp0 204.71.200.67): NO FLAGS are set, 40 headers + 40 data bytes

-E --file filename
    Utilise le contenu du fichier filename pour remplir les données du paquet.

-e --sign signature
    Remplit d'abord longueur de signature octets de données avec signature. Si longueur de signature est plus grand que la taille des données alors un message d'erreur sera affiché. Si vous ne spécifiez pas la taille des données hping utilisera la taille de la signature comme taille des données. Cette option peut être utilisée sans risque avec l'option --file filename, l'espace de données restant sera rempli en utilisant le fichier filename.

-j --dump
    Affiche les paquets en hexadécimal.

-J --print
    Affiche les caractères imprimables des paquets reçus.

-B --safe
    Active le protocole safe, en utilisant cette option les paquets perdus dans un transfert de fichier seront renvoyés. Par exemple afin d'envoyer le fichier /etc/passwd depuis le système A au système B vous pouvez utiliser ce qui suit :
    [host_a]
    # hping2 host_b --udp -p 53 -d 100 --sign signature --safe --file /etc/passwd
    [host_b]
    # hping2 host_a --listen signature --safe --icmp

-u --end
    Si vous utilisez l'option --file filename, cela vous dit quand la fin du fichier a été atteinte. D'ailleurs cela prévient que l'autre côté accepte plus de paquets. S'il vous plaît, pour plus d'informations voir le fichier HPING2-HOWTO.

-T --traceroute
    Mode traceroute. En utilisant cette option hping2 incrémentera le ttl pour chaque paquet ICMP time to live 0 during transit reçu. Essayez hping2 host --traceroute. Cette option implique --bind et --ttl 1. Vous pouvez l'emporter sur le ttl à 1 en utilisant l'option --ttl. Depuis 2.0.0 stable il affiche les informations de RTT. --tr-keep-ttl garde le ttl fixe en mode traceroute, ainsi vous pouvez contrôler simplement un noeud sur la route. Par exemple, pour contrôler comment le 5ème noeud change ou comment son RTT change vous pouvez essayer hping2 host --traceroute --ttl 5 --tr-keep-ttl.

--tr-stop
    Si cette option est spécifiée hping quittera dès que le premier paquet qui n'est pas un ICMP time exceeded est reçu. Ceci émule mieux le comportement de traceroute.

--tr-no-rtt
    Ne montre pas l'information RTT en mode traceroute. L'information du RTT des ICMP time exceeded n'est même pas calculée si cette option est positionnée.

--tcpexitcode
    Quitte avec le champ tcp->th_flag du dernier paquet reçu comme code de retour. Utile pour les scripts qui ont besoin, par exemple, de savoir si le port 999 de quelque système répond avec SYN/ACK ou avec RST en réponse à un SYN, i.e. le service est lancé ou arrêté.

FORMAT DE SORTIE TCP
Le format standard de sortie TCP est le suivant : len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms len est la taille, en octets, des données capturées dans la couche liaison de données en excluant la taille de l'entête de liaison de données. Ceci peut ne pas correspondre à la taille du datagramme IP à cause du rembourrage bas niveau de la couche liaison de données. ip est l'adresse ip source. flags sont les drapeaux TCP, R pour RESET, S pour SYN, A pour ACK, F pour FIN, P pour PUSH, U pour URGENT, X pour 0x40 non standard, Y pour 0x80 non standard. Si la réponse contient DF l'entête IP possède le bit don't fragment (ndt : ne pas fragmenter) positionné. seq est le numéro de séquence du paquet, obtenu en utilisant le port source pour les paquets TCP/UDP, le champ séquence pour les paquets ICMP. id est le champ IP ID. win est la taille de la fenêtre TCP rtt est le "round trip time" (ndt : temps aller-retour) en millisecondes. Si vous exécutez hping en utilisant l'option -V de la ligne de commande il affichera des informations supplémentaires à propos du paquet, par exemple : len=46 ip=192.168.1.1 flags=RA DF seq=0 ttl=255 id=0 win=0 rtt=0.4 ms tos=0 iplen=40 seq=0 ack=1223672061 sum=e61d urp=0 tos est le champ type de service de l'entête IP. iplen est le champ IP longueur totale. seq et ack sont les numéros de séquence et d'acquittement sur 32 bits dans l'entête TCP. sum est la valeur de la somme de contrôle de l'entête TCP. urp est la valeur du pointeur urgent TCP.

FORMAT DE SORTIE UDP
Le format standard de sortie est : len=46 ip=192.168.1.1 seq=0 ttl=64 id=0 rtt=6.0 ms La signification des champs est la même que celle de la sortie TCP pour les champs de même nom.

FORMAT DE SORTIE ICMP
Un exemple de sortie ICMP est : ICMP Port Unreachable from ip=192.168.1.1 name=nano.marmoc.net Il est très facile à comprendre. Il commence avec la chaîne "ICMP" suivie par la description de l'erreur ICMP, dans l'exemple Port Unreachable (ndt : port non accessible). Le champ ip est l'adresse IP source du datagramme IP contenant l'erreur ICMP, le champ name est simplement l'adresse numérique résolue en un nom (une requête dns PTR) ou UNKNOWN si la résolution a échoué. Le format ICMP de Time exceeded during ou de reassembly est un peu différent : TTL 0 during transit from ip=192.168.1.1 name=nano.marmoc.net TTL 0 during reassembly from ip=192.70.106.25 name=UNKNOWN La seule différence est la description de l'erreur, elle commence avec TTL 0.

AUTEUR
Salvatore Sanfilippo <antirez@invece.org>, avec l'aide des personnes mentionnées dans le fichier AUTHORS et sur http://www.hping.org/authors.html

BOGUES
Même en utilisant les options --end et --safe pour transférer des fichiers, le paquet final sera rembourré avec des octets 0x00.

Les données sont lues sans tenir compte de l'alignement, mais l'alignement est imposé dans les structures de données. Ceci ne sera pas un problème sous i386 mais, alors que normalement les entêtes TCP/IP sont naturellement alignées, cela peut créer des problèmes avec divers processeurs et des paquets mal-formés si il y a des accès non alignés quelque part dans le code (aucun avec un peu de chance).

Sur Solaris hping ne fonctionne pas sur l'interface loopback. Ceci semble être un problème solaris, comme exposé dans la liste de diffusion tcpdump-workers, ainsi la libpcap ne peut rien faire pour la supporter correctement.

VOIR AUSSI
ping(8), traceroute(8), ifconfig(8), nmap(1)

TRADUCTEUR
Denis Ducamp <Denis.Ducamp@groar.org>