我使用 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 进行嗅探,它就会开始嗅探。所以这就像逐行解释代码,并在所有行解释后清除范围。
最佳答案
您必须使用 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()
关于python - 如何指定scapy启动文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37088559/