Python scapy“NameError:全局名称'LOOPBACK_NAME'未定义”

时间:2017-10-11 08:25:25

标签: python python-2.7 scapy

我有一个非常简单的scapy程序,它为我的子网arp_ping做了

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

def arp_ping(subnet):
    conf.verb = 1
    answered, unanswered = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=subnet),timeout=2,verbose=False, inter=0.1)
    return [rcv.sprintf(r"%Ether.src% - %ARP.psrc%") for snd, rcv in answered]

if __name__=="__main__":
    subnet = '192.168.1.0/24'

    for i in arp_ping(subnet):
        print i

修改

使用choco重新安装至少PyWin32WinPcap后,我现在有了 NameError

Traceback (most recent call last):
  File "arp_sender.py", line 1, in <module>
    from scapy.all import srp, Ether, ARP, conf
  File "C:\Python27\lib\site-packages\scapy\all.py", line 16, in <module>
    from scapy.arch import *
  File "C:\Python27\lib\site-packages\scapy\arch\__init__.py", line 83, in <module>
    from scapy.arch.windows import *
  File "C:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 465, in <module>
    conf.iface = get_working_if()
  File "C:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 463, in get_working_if
    return LOOPBACK_NAME
NameError: global name 'LOOPBACK_NAME' is not defined

检查依赖项问题

运行scapy.bat以检查依赖关系结果如下:

INFO: Can't load Python libreadline or completer
INFO: Can't import matplotlib. Won't be able to plot.
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: No match between your pcap and windows network interfaces found. You probably won't be able to send packets. Deactivating unneeded interfaces and restarting Scapy might help.Check your winpcap and powershell installation, and access rights.
INFO: Could not get readline console. Will not interpret ANSI color codes.
WARNING: No default IPv4 routes found. Your Windows release may no be supported and you have to enter your routes manually
Traceback (most recent call last):
  File "C:\Python27\Scripts\\scapy", line 25, in <module>
    interact()
  File "C:\Python27\lib\site-packages\scapy\main.py", line 300, in interact
    scapy_builtins = __import__("all",globals(),locals(),".").__dict__
  File "C:\Python27\lib\site-packages\scapy\all.py", line 16, in <module>
    from scapy.arch import *
  File "C:\Python27\lib\site-packages\scapy\arch\__init__.py", line 83, in <module>
    from scapy.arch.windows import *
  File "C:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 465, in <module>
    conf.iface = get_working_if()
  File "C:\Python27\lib\site-packages\scapy\arch\windows\__init__.py", line 463, in get_working_if
    return LOOPBACK_NAME
NameError: global name 'LOOPBACK_NAME' is not defined

我的猜测是:

WARNING: No match between your pcap and windows network interfaces found. You probably won't be able to send packets. Deactivating unneeded interfaces and restarting Scapy might help.Check your winpcap and powershell installation, and access rights.

导致了这个问题,但我不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

您正在使用旧的scapy版本,通过更新 pip install scapy --upgrade获得2.4.0

我可以看到,因为最新版本不再需要libreadline了

在最新版本中,您需要安装的唯一依赖项是:

  • Winpcap或Npcap
  • IPython(如果被问及)

答案 1 :(得分:-1)

您可能以非管理员身份运行Python代码。

我在使用PyCharm IDE时遇到了同样的问题,但未在管理员模式下打开(默认情况下)。 以管理员身份重新启动IDE后,错误消息消失了。

同样,当你想在Linux中使用scapy库时,你必须指定“sudo ...”