Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python2,3中运行Scapy Sniff函数时出错_Python_Python 2.7_Python 3.x_Scapy - Fatal编程技术网

在python2,3中运行Scapy Sniff函数时出错

在python2,3中运行Scapy Sniff函数时出错,python,python-2.7,python-3.x,scapy,Python,Python 2.7,Python 3.x,Scapy,我写这个程序是为了嗅探网络中的arp数据包,并在那里打印源地址。代码如下: 这只是一个关于amazon dash按钮狙击包的修改示例源代码 from scapy.all import * import urllib global flag def arp_display(pkt): if pkt[ARP].op == 1: #who-has (request) #if pkt[ARP].psrc == '0.0.0.0': # ARP Probe if pkt[ARP].hws

我写这个程序是为了嗅探网络中的arp数据包,并在那里打印源地址。代码如下: 这只是一个关于amazon dash按钮狙击包的修改示例源代码

from scapy.all import *

import urllib

global flag

def arp_display(pkt):


if pkt[ARP].op == 1: #who-has (request)

#if pkt[ARP].psrc == '0.0.0.0': # ARP Probe

  if pkt[ARP].hwsrc == '0c:47:c3:e6:c5:b7': # Energizier

    print ("Pushed Energizier")

    if (flag == NULL) or (flag == 0):

       url = url + "LED=0"

       req = urllib2.Request(url)

       response = urllib2.urlopen(req)

       flag = 1

       print ( "send signal")

    else :

       url = url + "LED=1"

       req = urllib2.Request(url)

       response = urllib2.urlopen(req)

       flag = 0


  elif pkt[ARP].hwsrc == 'a4:af:66:df:9e:45': # Elements

    print ("Pushed Elements")

  else:

    print ("ARP Probe from unknown device: " + pkt[ARP].hwsrc)



print ( sniff(prn=arp_display, filter="arp", store=0, count=10,lfilter=lambda pkt: ARP in pkt) )
错误消息是

Traceback (most recent call last):
File "/share/Web/python/dash_check.py", line 54, in <module>
print ( sniff(prn=arp_display, filter="arp", store=0, 
count=10,lfilter=lambda pkt: ARP in pkt) )
File "/opt/lib/python2.7/site-packages/scapy/sendrecv.py", line 620, in sniffr = prn(p)
File "/share/Web/python/dash_check.py", line 21, in arp_display
if (flag == NULL) or (flag == 0):
UnboundLocalError: local variable 'flag' referenced before assignment

我真的不知道为什么要打印这样的错误消息,因为您试图访问和修改函数中的全局变量。但当您在函数的作用域内分配此标志变量时,如:

flag = 1

该标志假定为局部变量,并在外部作用域中隐藏同一命名全局变量。请看这里:

这是代码发生了什么的一个最小示例:

flag = 0
def func():
    if flag==0:
        print("flag is 0")
        flag = 1
调用func将引发相同的错误:

UnboundLocalError: local variable 'flag' referenced before assignment
解决方案是使用global关键字在局部范围内修改全局变量。像这样:

flag = 0
def func():
    global flag
    if flag==0:
        print("flag is 0")
        flag = 1

请检查带有答案的链接,以便更好地理解。

在第21行的if语句中有一个值之前,您正在使用标志。在使用if语句之前,您需要为flag变量赋值,甚至不赋值。如果可以,请编辑问题的标题,因为您的问题与scrapy无关。
flag = 0
def func():
    global flag
    if flag==0:
        print("flag is 0")
        flag = 1