Fping à la découverte d’hôtes

Quoi de mieux que la bonne commande “ping” pour découvrir si des hôtes répondent présents ou non dans un réseau. Mais si nous avons plusieurs centaines de machines à vérifier, et/ou si un Firewall détecte les comportements de ping d’une adresse IP les unes après les autres, la mission de reconnaissance devient longue et fastidieuse.

Afin de palier au manque de la commande “ping” classique, l’outil fping permet de fournir en entrée une liste de plusieurs hôtes, ou réseaux, à analyser. Et à la place d’attendre la réponse d’un hôte pour commencer le test suivant, fping passera à un hôte suivant sélectionné dans la liste fournie en entrée et cela de façon aléatoire.

  • Ping sur un hôte

xxxx@xxxx $ sudo fping xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx is unreachable

  • Ping sur plusieurs hôtes

xxxxx@xxxxx $ sudo fping xxx.xxx.xxxx.xxx yyy.yyy.yyy.yyy
yyy.yyy.yyy.yyy is alive
xxx.xxx.xxx.xxx is unreachable

  • Ping sur plusieurs hôtes fournis dans un fichier

xxxx@xxxxx $ cat hosts.txt
xxx.xxx.xxx.xxx
yyy.yyy.yyy.yyy

xxxxx@xxxx $ sudo fping -f hosts.txt
yyy.yyy.yyy.yyy is alive
xxx.xxx.xxx.xxx is unreachable

  • Ping sur un réseau ou un nombre déterminé de hôtes

xxxxx@xxxxxx $ sudo fping -g xxx.xxx.xxx.0/24

xxxxx@xxxxxx $ sudo fping -g xxx.xxx.xxx.8 xxx.xxx.xxx.15

Il n’est pas possible de spécifier plusieurs réseaux les uns à la suite des autres, ni même de les appeler par l’option “-f

  • Afficher le temps de réponse au ping

xxxxx@xxxx $ sudo fping -e yyy.yyy.yyy.yyy
yyy.yyy.yyy.yyy is alive (128 ms)

  • Afficher la résolution de l’adresse IP

xxxx@xxxx $ sudo fping -n yyy.yyy.yyy.yyy
toto.toto.com is alive

  • Afficher l’IP et la résolution de l’adresse IP

xxxx@xxxx $ sudo fping -n -A yyy.yyy.yyy.yyy
toto.toto.com (yyy.yyy.yyy.yyy) is alive

  • Afficher les statistiques finale

xxxxx@xxxxx $ sudo fping -s xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
yyy.yyy.yyy.yyy is alive
xxx.xxx.xxx.xxx is unreachable

2 targets
1 alive
1 unreachable
0 unknown addresses

4 timeouts (waiting for response)
5 ICMP Echos sent
1 ICMP Echo Replies received
0 other ICMP received

23.3 ms (min round trip time)
23.3 ms (avg round trip time)
23.3 ms (max round trip time)
4.087 sec (elapsed real time)

  • N’afficher que les hôtes qui répondent

xxxx@xxxx $ sudo fping -a xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
yyy.yyy.yyy.yyy

  • N’afficher que les hôtes qui ne répondent pas

xxxx@xxxxx $ sudo fping -u xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy
xxx.xxx.xxx.xxx

  • Ping fping versus ping nmap

Nmap propose aussi une option ping pour vérifier si un hôte est accessible ou pas (-sP). A la différence de fping (qui effectue uniquement une demande “ICMP echo request“, nmap va lancer une connexion ACK sur le port 80 de l’adresse IP, et demandera aussi un “ICMP echo request“. L’option “-sP” de nmap n’est pas un véritable ping, mais permet éventuellement d’aller un peu plus loin dans l’étude de disponibilité d’un hôte ou pas.

Prenons, par exemple, notre machine xxx.xxx.xxx.xxx qui ne répond pas avec fping, et lançons l’analyse avec nmap.

xxxxx@xxxxxx $ sudo nmap -v -sP xxx.xxx.xxx.xxx

Starting Nmap 4.76 ( http://nmap.org ) at 2009-06-28 11:09 CEST
Initiating Ping Scan at 11:09
Scanning xxx.xxx.xxx.xxx [2 ports]
Completed Ping Scan at 11:09, 0.08s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:09
Completed Parallel DNS resolution of 1 host. at 11:09, 0.00s elapsed
Host toto.titi.com (xxx.xxx.xxx.xxx) appears to be up.
Read data files from: /usr/local/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.59 seconds
Raw packets sent: 2 (68B) | Rcvd: 1 (40B)

Un tcpdump nous permet de voir ce qui se passe lorsque nmap -sP est lancé.

10:17:19.259833 IP 192.168.aaa.aaa.50409 > xxx.xxx.xxx.xxx.80: . ack 2315653060 win 3072
10:17:19.260143 IP 192.168.aaa.aaa > xxx.xxx.xxx.xxx: ICMP echo request, id 21709, seq 0, length 8
10:17:19.283920 IP xxx.xxx.xxx.xxx.80 > 192.168.aaa.aaa.50409: R 2315653060:2315653060(0) win 0

Le hôte ne répond pas à la connexion “ICMP echo request”, mais par contre répond sur le port 80. Ce fait peut être vérifié par un simple telnet.

xxxxx@xxxxxx $ telnet xxx.xxx.xxx.xxx 80
Trying xxx.xxx.xxx.xxx...
telnet: connect to address xxx.xxx.xxx.xxx: Connection refused
telnet: Unable to connect to remote host

L’on peut remarquer que le port 80 est ouvert, mais filtré par des règles quelconques.

  • Détection de filtrage par le biais de fping, versus nmap

Fping pourra permettre par les réponses données, de voir que certains hôtes sont inaccessible à cause de règles quelconques, petits exemples :

Exemple 1 :

xxxxxx@xxxxx $ sudo fping zzz.zzz.zzz.zzz
ICMP Unreachable (Communication Administratively Prohibited) from zzz.zzz.zzz.zzz for ICMP Echo sent to zzz.zzz.zzz.zzz
ICMP Unreachable (Communication Administratively Prohibited) from zzz.zzz.zzz.zzz for ICMP Echo sent to zzz.zzz.zzz.zzz
ICMP Unreachable (Communication Administratively Prohibited) from zzz.zzz.zzz.zzz for ICMP Echo sent to zzz.zzz.zzz.zzz
ICMP Unreachable (Communication Administratively Prohibited) from zzz.zzz.zzz.zzz for ICMP Echo sent to zzz.zzz.zzz.zzz
zzz.zzz.zzz.zzz is unreachable

L’hôte sera déclaré comme “unreachable”, par contre les messages de retour montre qu’un élément filtrant empêche la communication.

Comparons maintenant ces résultats avec l’option “-sP” de nmap.

xxxx@xxxxx $ sudo nmap -v -sP zzz.zzz.zzz.zzz

Starting Nmap 4.76 ( http://nmap.org ) at 2009-06-28 11:20 CEST
Initiating Ping Scan at 11:20
Scanning zzz.zzz.zzz.zzz [2 ports]
Completed Ping Scan at 11:20, 0.08s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:20
Completed Parallel DNS resolution of 1 host. at 11:20, 0.02s elapsed
Host yaya.gougou.com (zzz.zzz.zzz.zzz) appears to be up.
Read data files from: /usr/local/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 0.74 seconds
Raw packets sent: 2 (68B) | Rcvd: 1 (56B)

Nmap a déclaré que l’hôte était accessible, car le port 80 de cette machine est accessible, mais par contre ne nous a pas donner autant d’information sur fping sur la présence d’un élément filtrant. Il faudra rajouter l’option “-d” ou “–packet-trace” pour avoir le même résultat que fping.

Exemple 2 :

xxxxx@xxxxx $ sudo fping rrr.rrr.rrr.rrr
ICMP Host Unreachable from sss.sss.sss.sss for ICMP Echo sent to rrr.rrr.rrr.rrr
ICMP Host Unreachable from sss.sss.sss.sss for ICMP Echo sent to rrr.rrr.rrr.rrr
ICMP Host Unreachable from sss.sss.sss.sss for ICMP Echo sent to rrr.rrr.rrr.rrr
rrr.rrr.rrr.rrr is unreachable

L’on peut voir grâce à fping que l’hôte sss.sss.sss.sss répond lorsque l’on effectue un ping sur l’hôte rrr.rrr.rrr.rrr

Comparons maintenant ces résultats avec l’option “-sP” de nmap.

xxxxx@xxxxx $ sudo nmap -v -sP rrr.rrr.rrr.rrr

Starting Nmap 4.76 ( http://nmap.org ) at 2009-06-28 11:29 CEST
Initiating Ping Scan at 11:29
Scanning rrr.rrr.rrr.rrr [2 ports]
Completed Ping Scan at 11:29, 3.03s elapsed (1 total hosts)
Host rrr.rrr.rrr.rrr appears to be down.
Read data files from: /usr/local/share/nmap
Note: Host seems down. If it is really up, but blocking our ping probes, try -PN
Nmap done: 1 IP address (0 hosts up) scanned in 3.57 seconds
Raw packets sent: 4 (136B) | Rcvd: 0 (0B)

L’on peut voir ici que nmap ne nous signifie pas que l’hôte sss.sss.sss.sss répond lorsque l’on effectue un ping sur l’hôte rrr.rrr.rrr.rrr

L’option “-PN” pourra détecter que l’hôte rrr.rrr.rrr.rrr est up, mais sans pour autant nous signifier que sss.sss.sss.sss est un élément intermédiaire de filtrage.

Fping est un outil de base, qui en complément avec d’autres outils, tels que nmap, pourrait permettre d’avoir une vue complète sur un réseau et effectuer une phase d’approche intéressante.