如何指定scapy启动文件?

How to specify a scapy startup file?

我使用带 -c 命令行选项的 scapy 加载启动文件:

# 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()