为了账号安全,请及时绑定邮箱和手机立即绑定

这个函数如何知道变量存在?

这个函数如何知道变量存在?

PHP
呼啦一阵风 2023-11-09 21:19:37
我有一些代码:from scapy.all import *def sniffFunc(pkt):    print(pkt.show())    quit()myFilter = 'tcp and src host 192.168.1.2 and dst host 52.223.224.41'sniff(filter=myFilter, prn=sniffFunc)它从我的主机嗅探单个数据包到 twitch 服务器并显示该数据包的信息。sniffFunc() 如何知道变量“pkt”是什么以及该变量的值?我知道名称可以是程序员想要的关于传递给函数的变量的任何名称,但是,一旦进入函数内部,在我看来变量“pkt”将为空,但它包含所需的值。例如,我认为人们必须做类似的事情:pkt = sniff(filter=myFilter, prn=sniffFunc(pkt))虽然这行不通,但也许它会让我对我的思维过程有一些了解。
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

函数本身可以保存到变量中,然后调用:

f = sniffFunc
f(a_packet)  # Still works

被调用的函数对象sniffFunc会像任何其他对象一样传递给该函数。一旦进入sniff实际上在代码的深处),它会获取您提供的函数对象,并通过向其传递给定的数据包来调用它:

def on_packet_received(self, pkt):

    """DEV: entry point. Will be called by sniff() for each

    received packet (that passes the filters).

    """

    if not pkt:

        return

    if isinstance(pkt, list):

        for p in pkt:

            DefaultSession.on_packet_received(self, p)

        return

    self.__count += 1

    if self.store:

        self.lst.append(pkt)

    if self.prn:

        result = self.prn(pkt)  # Your function was stored in the variable self.prn <<<<<

        if result is not None:

            print(result)

result是你的函数返回的任何内容。你可以看到它只是打印返回值(如果有的话)。


查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 63 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信