簡體   English   中英

使用Scapy ping IP范圍

[英]Pinging an IP range with Scapy

我正在嘗試編寫一個Python腳本,該腳本使用Scapy模塊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 + CI殺死它會得到一條錯誤消息:

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范圍有任何其他想法,以確定哪些主機在線?

您只需要確保reply不是NoneType ,如下所示...如果等待響應超時,則sr1()返回None 您還應該為sr1()添加timeout ,默認超時對於您的目的來說是非常荒謬的。

#!/usr/bin/python
from scapy.all import *

TIMEOUT = 2
conf.verb = 0
for ip in range(0, 256):
    packet = IP(dst="192.168.0." + str(ip), ttl=20)/ICMP()
    reply = sr1(packet, timeout=TIMEOUT)
    if not (reply is None):
         print reply.dst, "is online"
    else:
         print "Timeout waiting for %s" % packet[IP].dst

如果變量的返回值為null,則無法顯示reply.src字段。 換句話說,您需要驗證變量是否返回某個值(如果ping成功)。 只有當變量不為null時,才能生成IF條件以獲取.src字段。

FTR,Scapy支持隱式生成器。 這有效:

ans, unans = sr(IP(dst="192.169.0.1-255")/ICMP(), timeout=2) 

然后迭代答案。

它可能好多了:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM