我尝试谷歌搜索但我没有找到任何东西......我正在构建一个端口扫描仪,我想这样做,我可以扫描网络范围,例如192.168.2。*并找出有多少台计算机在那个在线的范围。很像Nmap。我在python中编程。这在Python中是否可行?
答案 0 :(得分: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 :(得分: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
答案 2 :(得分:0)
使用raw sockets,你可以实现类似nmap的东西。您可能会发现,与普通编程接口相比,需要使用特制的数据包来制作信息量最大的探测器。非常值得阅读IP / UDP / TCP RFCs。
使用原始套接字,您可以逐字节地生成您选择的任何探测数据包,其中选项/配置设置通常在正常情况下通常是不可能/难以做到的,但会“欺骗”主机以显示大量信息。
答案 3 :(得分:0)
对于本地网络上的IPv4,您可以使用ARP Scapy,see related question来诉诸{{3}}。