# Le ping sans ping

**URL:** <https://www.debian-fr.org/t/le-ping-sans-ping/85535>\
**Category:** Programmation\
**Created:** [Octobre 21, 2021, 10:17 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535 "2021-10-21T22:17:11Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Octobre 21, 2021, 10:17 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535/1 "2021-10-21T22:17:11Z")

</div>

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 :

```python
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 ?

---

<div class="post-metadata">

**Author:** ![anon70622873](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@anon70622873](https://www.debian-fr.org/u/anon70622873)\
**Post date:** [Octobre 22, 2021, 7:14 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535/2 "2021-10-22T07:14:26Z")

</div>

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`.

---

<div class="post-metadata">

**Author:** ![AnonymousCoward](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f9ae1b/32.png) [@AnonymousCoward](https://www.debian-fr.org/u/AnonymousCoward)\
**Post date:** [Octobre 22, 2021, 10:34 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535/3 "2021-10-22T10:34:22Z")

</div>

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 «&nbsp;scapy ARP scan&nbsp;» sur un moteur de recherche doit renvoyer quelques résultats utilisables.

–  
AnonymousCoward

---

<div class="post-metadata">

**Author:** ![anon70622873](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/278dde/32.png) [@anon70622873](https://www.debian-fr.org/u/anon70622873)\
**Post date:** [Octobre 22, 2021, 10:51 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535/4 "2021-10-22T10:51:48Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Almtesh](https://www.debian-fr.org/user_avatar/www.debian-fr.org/almtesh/32/10312_2.png) [@Almtesh](https://www.debian-fr.org/u/Almtesh)\
**Post date:** [Octobre 23, 2021, 4:05 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535/5 "2021-10-23T04:05:17Z")

</div>

Voilà qui est mieux :

```python
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.

---

<div class="post-metadata">

**Author:** ![PengouinPdt](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pengouinpdt/32/3978_2.png) [@PengouinPdt](https://www.debian-fr.org/u/PengouinPdt)\
**Post date:** [Octobre 23, 2021, 8:56 UTC](https://www.debian-fr.org/t/le-ping-sans-ping/85535/6 "2021-10-23T08:56:42Z")

</div>

Une autre possibilité est d’appeler l’outil `traceroute` avec l’option `-I` 😉  
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).
