在python中识别链接层类型

时间:2015-08-31 13:04:51

标签: python rfc1123 rfc1122

显然,我们可以使用类似的套接字轻松嗅探网络:

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

我想在仅导入link layersocket时识别struct地址类型,但由于显而易见的原因,链接层不会显示在套接字中。我是否需要编写一个解决较低层的共享库?

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

更新

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

1 个答案:

答案 0 :(得分: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"