【发布时间】:2013-03-13 06:19:42
【问题描述】:
当我运行脚本时,scapy 没有监听接口,它只是打印出这个错误:
Traceback(最近一次调用最后一次): 文件“keylogger.py”,第 91 行,在 sniff_packets(scapy_expression,target_site) 文件“keylogger.py”,第 15 行,在 sniff_packets 嗅探(filter=scapy_expression,prn=sniffer_callback(target_site),store=0,iface="eth0") TypeError: sniffer_callback() 正好接受 2 个参数(1 个给定)
发生错误的代码如下(嗅探的表达式)
def sniff_packets(scapy_expression, target_site):
sniff(filter=scapy_expression, prn=sniffer_callback(target_site), store=0, iface="eth0")
这是回调函数:
def sniffer_callback(packet, target_site):
print "[*] Got a packet"
我不知道为什么scapy 不听电话。任何帮助表示赞赏。
【问题讨论】:
-
这真的比将第二个参数传递给
sniffer_callback(target_site)更复杂吗?我厌倦了任何看似如此简单的答案,但看起来将prn=sniffer_callback(target_site)更改为prn=sniffer_callback确实有效 -
让我尝试另一种方式,看起来您正在传递函数
sniffer_callback(target_site)的结果(这不起作用,因为您已将sniffer_callback()定义为采用 2 个参数而不是一个) ,但正确的使用方法是传递函数 -
是的,但 sniffer_callback 会自动将数据包作为参数传递,因此当它使用 prn=sniffer_callback(target_site) 时,它会先通过目标站点,然后再传递数据包
-
加上嗅探函数在调用嗅探函数之前会起作用。一旦收到数据包就会出错
-
如果
sniffer_callback(target_site)返回了一个函数,那么我会看看它是如何工作的,但是由于定义了sniffer_callback(),它将返回None(任何有返回的def 的默认值'目前)