如何查看某个地址范围内有多少个客户端?
我试着在网上搜索这个问题,但没找到相关的信息……我正在制作一个端口扫描器,我想让它能够扫描一个网络范围,比如192.168.2.*,然后找出这个范围内有多少台电脑是在线的。这个功能和Nmap很像。我是在用Python编程。请问在Python中可以做到吗?
4 个回答
2
使用 python-nmap
。基本用法如下:
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))
想要了解更多,可以查看这个链接:http://pypi.python.org/pypi/python-nmap
1
这里有一个草稿示例,你可以用它来开始:
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
或者你也可以用ICMP(ping)来做类似的事情,而不是使用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