从书中获取Python Scapy Arp扫描子网脚本

时间:2014-11-30 05:38:56

标签: python scapy

我正在阅读一本Python书籍,其中有一个脚本可以使用scapy(Python工具/模块)来扫描子网中任何已启动的主机并报告其IP和MAC地址。此脚本是对前一个调用/usr/bin/arping的增强功能。之前的脚本一次只允许一个IP地址,并且平台依赖于arping工具可用。显然,这个脚本(对我来说不起作用)与平台无关!

如果有人可以查看脚本并对其进行调试,那将是非常棒的。这是脚本:

#! /usr/bin/env python

from scapy.all import srp
from scapy.all import Ether, ARP, conf

import sys

def arping(iprange="10.0.1.0/24"):
    """Arping function takes IP Address or Network, returns nested mac/ip list"""

    #conf, verb = 0
    ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=iprange), timeout=2)

    collection = []
    for snd, rcv in ans:
        result = rcv.sprintf(r"%ARP.psrc% %Ether.src%").split()
        collection.append(result)
    return collection

if __name__ == "__main__":
    if len(sys.argv) > 1:
        for ip in sys.argv[1:]:
            print "arping", ip
            print arping(ip)

    else:
        print arping()

该脚本不起作用。它只是打印它扫描的东西,但没有找到任何东西。

我查看了这个网站,发现了一个也没有用的教程。该网站及相关内容如下:http://www.secdev.org/projects/scapy/doc/usage.html#arp-ping

请参阅下面的示例,了解运行此脚本时获得的输出示例:

loser@loser:~/Desktop/pyFun2$ gedit arp_scanz.py
loser@loser:~/Desktop/pyFun2$ sudo python arp_scanz.py
WARNING: No route found for IPv6 destination :: (no default route?)
Begin emission:
Finished to send 256 packets.

Received 0 packets, got 0 answers, remaining 256 packets
[]

有没有人知道我错过了什么?

更新 - 解决方案 更改srp函数或方法调用以指定要扫描的确切接口,如下所示:

ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=iprange),iface="en1", timeout=2)

1 个答案:

答案 0 :(得分:1)

可以是任何数量的东西。我似乎使用有效的IP起点在我的网络上运行该脚本。

您是否正在使用适当的IP范围?

例如我使用:

def arping(iprange="192.168.1.*"):

为arping()函数内置的scapy产生正确的结果和相同的结果。

所以我想也许这不是代码,而是你正在尝试的范围。