Comment savoir combien de clients sont sur une certaine plage d'adresses?
-
10-10-2019 - |
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?
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.