# Python : scan réseau

**URL:** <https://www.debian-fr.org/t/python-scan-reseau/81124>\
**Category:** Programmation\
**Created:** [Janvier 29, 2020, 7:16 UTC](https://www.debian-fr.org/t/python-scan-reseau/81124 "2020-01-29T19:16:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Janvier 29, 2020, 7:16 UTC](https://www.debian-fr.org/t/python-scan-reseau/81124/1 "2020-01-29T19:16:30Z")

</div>

Bonjour  
J’essaye d’écrire un script python mais je suis bloqué par une fonction  
Je voudrais scanner le réseau local (c’est à dire une dizaine de poste avec des ip de style 192.168.0.[0|255] à la recherche de celle qui à un port spécifique d’ouvert  
L’histoire du port ouvert, je pense gérer.  
C’est le scan que je n’arrive pas à coder. J’ai vu la doc de python-nmap , de socket et d’ipdress mais je n’arrive pas à grand chose mis à part scanner ma machine.  
De plus j’aimerais autant éviter d’utiliser une commande Linux passée par un subprocess.

Enfin voilà, je bloque malgré mes recherches sur le NEt, je me dis que je ne dois pas avoir les bons mots clefs car ce ne doit pas être si dur que ça.

Enfin, voilà, si qq un a des pistes je suis preneur

Merci,

Donc je serai un truc du style, scanReseau(ModeledIP) qui retournerait  
192.168.1.12  
192.168.1.32  
192.168.1.55  
…  
Enfin l’ip des machines présentes…

(poru l’instant j’ai bien un truc avec une boucle de ce style

```
for i in range(len(all_hosts)):
    output = subprocess.call(['fping','-a', '-q', str(all_hosts[i])])

```

mais c’est hyper long…)  
Et puis je préférerai sans appel de commande linux

---

<div class="post-metadata">

**Author:** ![mattotop](https://www.debian-fr.org/user_avatar/www.debian-fr.org/mattotop/32/3942_2.png) [@mattotop](https://www.debian-fr.org/u/mattotop)\
**Post date:** [Janvier 29, 2020, 8:38 UTC](https://www.debian-fr.org/t/python-scan-reseau/81124/2 "2020-01-29T20:38:02Z")

</div>

> [@crustyourmind](#):
>
> une boucle de ce style

Ouais enfin là de ce que je vois, c’est juste une autre manière de lancer des commandes linux:  
python ne fait que la boucle et appelle le shell pour lancer fping à chaque itération.

> [@crustyourmind](#):
>
> mais c’est hyper long

Et du coup, je pense que ça explique pourquoi c’est long (au delà des délais d’attente réseau), parce qu’à mon avis, ta boucle lance un nouveau shell fils à chaque appel de fping, alors qu’en boucle dans un shell, toutes les commandes ping se lanceraient dans le même shell ou tu executes ta boucles.  
(pas sur)

> [@crustyourmind](#):
>
> je n’arrive pas à grand chose mis à part scanner ma machine.

Il est possible que ce que tu fais nécessite une execution en sudo: certaines fonctionnalités de scan réseau nécessitent des droits root.  
Si tu ne comprends pas pourquoi un truc local s’execute, mais pas quand tu essayes sur le réseau, c’est possible que ce soit ça.

---

<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:** [Janvier 30, 2020, 9:14 UTC](https://www.debian-fr.org/t/python-scan-reseau/81124/3 "2020-01-30T09:14:37Z")

</div>

Tant qu’à utiliser une commande Linux, autant utiliser nmap :

```auto
nmap -sP 192.168.1.0/24

```

Sinon en Python (recopié de la doc [python-nmap](https://pypi.org/project/python-nmap/) adapté et testé) :

```python
#!/usr/bin/env python
import nmap # import nmap.py module
nm = nmap.PortScanner() # instantiate nmap.PortScanner object

nm.scan(hosts='192.168.1.0/24', arguments='-n -sP')
for host in nm.all_hosts():
    print('----------------------------------------------------')
    print('Host : %s (%s)' % (host, nm[host].hostname()))
    print('State : %s' % nm[host].state())

```

---

<div class="post-metadata">

**Author:** ![crustyourmind](https://www.debian-fr.org/user_avatar/www.debian-fr.org/crustyourmind/32/2955_2.png) [@crustyourmind](https://www.debian-fr.org/u/crustyourmind)\
**Post date:** [Janvier 30, 2020, 4:32 UTC](https://www.debian-fr.org/t/python-scan-reseau/81124/4 "2020-01-30T16:32:35Z")

</div>

@mattotop

> python ne fait que la boucle et appelle le shell pour lancer fping à chaque itération.

Effectivement, j’aurais dû y penser…

@anon70622873  
Nickel. J’avais mis de côté nmap car son import plantait sous Pycharm (mais fonctionnait dans un python3 ) et j’ai enfin compris pourquoi : je n’avais pas bien appréhendé la notion d’environnement virtuel et donc l’environnement de Pycharm n’appelait pas le même python que la console

Merci beaucoup, ça m’ôte une épine du pied et cela aura été instructif

Bien à vous 😉
