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 [AT] 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 [AT] 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 [AT] groar.org>