Le ping sans ping

Bonjour,

Je souhaite sonder plusieurs hôtes qui ont le bon goût de ne pas répondre au ping, ni à tout autre service que j’ai pu tester.
J’ai donc écrit, à l’arrache, un fonction en Python pour le ping :

from subprocess import call, Popen, PIPE, DEVNULL
from socket import gethostbyname


def non_ping_test (host):
	try:
		call (['/usr/bin/ping', '-c', '1', '-w', '1', host], stdout = DEVNULL, stderr = DEVNULL)
		ip = gethostbyname (host)
		neighbor = Popen (['/usr/bin/ip', 'neigh', 'get', 'to', ip, 'dev', 'enp8s0'], stdin = DEVNULL, stdout = PIPE, stderr = DEVNULL).communicate () [0].decode ('UTF-8')
		return ('REACHABLE' in neighbor)
	except Exception:
		return (False)

En fait, le but est de faire une requête ARP et de voir si l’hôte répond, au lieu d’utiliser le ping, cependant, je n’ai pas trouvé d’autre façon de faire ça.
Est-ce que quelqu’un a une idée ?

Bonjour,

Pour tester une machine qui ne répond pas au ping, on peut utiliser nmap -Pn hôte.
Pour les requêtes arp il y a arping.

1 J'aime

Un test de connexion avec ARP, c’est d’ailleurs la manière dont nmap fonctionne lorsque l’on est directement connecté au LAN.

Cela me pose problème vis à vis de switchs que nmap n’arrive pas à détecter via ce scan ARP, par exemple.
Alors que ces mêmes switchs répondent sans problème à la requête ARP émise par Linux quand on utilise la commande ping.

Ceci étant, je n’ai pas creusé mais j’imagine que taper « scapy ARP scan » sur un moteur de recherche doit renvoyer quelques résultats utilisables.


AnonymousCoward

Effectivement pour tester les machines du réseau local il y a aussi arp-scan.

Voilà qui est mieux :

from subprocess import call, DEVNULL


def non_ping_test (host):
	return (call (['/usr/sbin/arping', '-c', '1', '-w', '0.001', host], stdin = DEVNULL, stdout = DEVNULL, stderr = DEVNULL) == 0)

Merci à vous.

1 J'aime

Une autre possibilité est d’appeler l’outil traceroute avec l’option -I :wink:
Cela va utiliser les datagrammes UDP pour simuler un echo ICMP (fonctionne sur les deux couches IP)

Voire aussi l’option -P positionnée sur 1 qui enverra une requête ICMP Echo. (seulement IPv4).