使用 Scapy 嗅探本地主机上的数据包

Sniffing packets on localhost with Scapy

我正在学习如何使用 scapy 嗅探数据包。我已经在端口 50420 上的本地主机上设置了一个简单的回显服务器 运行。

然后我在终端中输入以下行,以便在通过该端口发送流量时嗅探该端口上的数据包:

p = sniff(filter = 'port 50420')

但是,尽管数据流正确,但没有捕获任何数据包。我已经验证嗅探适用于不使用本地主机的其他流量。如果可能的话,我如何使用 Scapy 嗅探此本地主机流量?

通过该行,您正在嗅探端口 50420 上的流量,但您应该做更多的事情。嗅探数据包时应该添加一个跳转函数

sniff(filter="port 50420",prn=myFunction)

并写入 myFunction:

def myFunction(pkt):
    print "Packet!"

您可能需要指定接口。在Linux,

    sniff(filter="port 50420",iface="lo")

当然要使用数据包,您需要使用 "prn" 选项指定回调函数(如其他回复中所述),或者您可以将数据包保存到列表中以备后用,例如

    packet_list = sniff(filter="port 50420",iface="lo")
    first_packet = packet_list[0]

为了更加确定,您可以将过滤器设置为 "port 50420 and host 127.0.0.1"