1

显然,我们可以很容易地用如下套接字嗅探网络:

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

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

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

更新:

我知道我可以将它作为 pcap 读取并获取链路层信息(即dpkt有一个调用的函数pcap.datalink()将返回链路层类型,而不是链路层地址)但我仍然不确定如何从原始端口读取它(即 eth0),在 python 中,用于 windows 和/或 linux。

4

1 回答 1

2

我认为您不能使用仅在网络/传输层中工作的库来做到这一点。我会使用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"
于 2015-09-03T18:32:28.030 回答