我使用scapy和-c命令行选项来加载启动文件:
# liquidsoap debug
streamerIP = "192.168.0.53"
dump= []
def filterStreamer(pkt):
if pkt.src == streamerIP or pkt.dst == streamerIP:
dump.append(pkt)
sniff(prn=filterStreamer)
ls(dump)
它给出了:
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/scapy/main.py", line 30, in _read_config_file
execfile(cf)
File "icecast-debug.py", line 9, in <module>
sniff(prn=filterStreamer)
File "/usr/lib/python2.7/dist-packages/scapy/sendrecv.py", line 586, in sniff
r = prn(p)
File "icecast-debug.py", line 6, in filterStreamer
if (pkt.src == streamerIP or pkt.dst == streamerIP):
NameError: global name 'streamerIP' is not defined
Welcome to Scapy (2.2.0)
并且在控制台中我看到并且streamerIP都没有转储,但是最有趣的所有filterStreamer作为函数都没有定义。 但是,如果我不通过filterStreamer来嗅探它开始嗅探。所以它就像逐行解释代码一样,并在所有行解释后清除范围。
答案 0 :(得分:1)
您必须使用global
关键字。另外,使用PacketList()
而不是列表。 ls()
不会对列表有效,但如果您使用PacketList()
,则会使用.summary()
方法。
streamerIP = "192.168.0.53"
dump = PacketList()
def filterStreamer(pkt):
global streamerIP, dump
if pkt.src == streamerIP or pkt.dst == streamerIP:
dump.append(pkt)
dump.summary()