我将尝试编写一个使用Scapy模块的Python脚本,以ping内部IP范围来确定哪些IP地址在线。目前我已经有了以下代码:
#!/usr/bin/python
from scapy.all import *
conf.verb = 0
for ip in range(0, 256):
packet = IP(dst="192.168.0." + str(ip), ttl=20)/ICMP()
reply = sr1(packet)
if "192.168." in reply.src:
print reply.src, "is online"
这个程序有时会长时间不做任何操作,如果我使用CTRL+C中止它,会出现一个错误信息:
Traceback (most recent call last):
File "sweep.py", line 7, in <module>
if "192.168." in reply.src:
AttributeError: 'NoneType' object has no attribute 'src'
然而,如果我尝试使用单个IP地址而不是范围,则可以正常工作。像这样:
#!/usr/bin/python
from scapy.all import *
conf.verb = 0
packet = IP(dst="192.168.0.195", ttl=20)/ICMP()
reply = sr1(packet)
if "192.168." in reply.src:
print reply.src, "is online"
有人知道如何解决这个问题吗?或者你们有没有其他方法可以使用Scapy来ping一个IP范围,以确定哪些主机在线?
sr1(packet)
的返回值分配给reply有关。我不熟悉scapy
,所以除此之外无法提供更多帮助,但是从这里开始。 - brc