Question

J'ai essayé de googler pour cela, mais je ne ai pas trouver quoi que ce soit ... Je construis un scanner de port et je voudrais faire en sorte que je peux balayer une plage de réseau, par exemple 192.168.2. * Et savoir combien d'ordinateurs sont sur cette plage qui sont en ligne. Un peu comme Nmap. Je programme en python. Est-ce possible en Python?

Était-ce utile?

La solution

Voici Projet par exemple que vous pouvez commencer par:

import socket

addr_range = "192.168.1.%d"

ip_address_up = []

# Use UDP. 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

s.settimeout(2.0)

for i in range(1, 254):
    try:
        ip = addr_range % i
        socket.gethostbyaddr(ip)
        ip_address_up.append(ip)
    except socket.herror as ex:
        pass

print ip_address_up

ou quelque chose comme cela en utilisant ICMP ( ping ) merci plutôt UDP:

import socket
import ping

ip_address_up = []

addr_range = "192.168.1.%d"

for i in range(1, 254):       
   try:
       ip = addr_range % i
       delay = ping.do_one(ip, timeout=2)
       ip_address_up.append(ip)
   except (socket.herror, socket.timeout) as ex:
       pass

print ip_address_up

Autres conseils

Utilisez python-nmap. Utilisation de base:

import nmap
nm = nmap.PortScanner()
nm.scan(hosts='192.168.2.0/24', arguments='-n -sP -PE -PA21,23,80,3389')
hosts_list = [(x, nm[x]['status']['state']) for x in nm.all_hosts()]
for host, status in hosts_list:
    print('{0}:{1}'.format(host, status))

Pour référence plus voir http://pypi.python.org/pypi/python-nmap

Utilisation raw sockets vous pouvez mettre en œuvre nmap comme quelque chose. Vous constaterez probablement que doivent être prises les sondes les plus instructives en utilisant des paquets spécialement conçus qui font des choses bizarres « » par rapport aux interfaces de programmation normale. Il est digne d'être lue sur le IP / UDP / TCP RFCs.

Utilisation raw sockets, vous pouvez générer octet par octet tout paquet de sondage de votre choix, avec des options / configurations définies qui sont normalement impossibles / difficile à faire dans des circonstances normales, mais qui « truc » une foule en révélant une mine d'informations.

Pour IPv4 sur réseau local, vous pouvez recourir à la ARP en utilisant par exemple Scapy , voir question connexe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top