显然,我们可以轻松地通过套接字来嗅探网络:

socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0003)
socket.recv(65535)


我想在仅导入link layersocket时标识struct地址类型,但是出于明显的原因,链接层没有显示在套接字中。我是否需要编写一个针对较低层的共享库?

RFC 1122/1123地址链接层类型和链接层地址。

更新:

我知道我可以将其读取为pcap并获取链接层信息(即dpkt具有称为pcap.datalink()的函数,该函数将返回链接层类型,而不是链接层地址),但是我仍然不确定如何处理在Windows和/或Linux中,从python的原始端口(即eth0)读取它。

最佳答案

我认为您无法使用仅在网络/传输层中工作的库来实现此目的。
我会用scapy来做,它应该在python的所有系统中都能工作。

from scapy.all import *
pkts = sniff(count = 1, ifcae = "eth1")
pkt = pkts[0]
layers = {
scapy.layers.l2.Ether:"Link layer is Ethernet"
#put other layers here, I can't test it in my PC
}
if type(pkt) == scapy.layers.l2.Ether:
    print "Link layer of eth1 is Ethernet"

关于python - 在python中识别链接层类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32311992/

10-12 17:04