显然,我们可以使用类似的套接字轻松嗅探网络:
socket.socket(socket.PF_PACKET,socket.SOCK_RAW,socket.htons(0x0003)
socket.recv(65535)
我想在仅导入link layer
和socket
时识别struct
地址类型,但由于显而易见的原因,链接层不会显示在套接字中。我是否需要编写一个解决较低层的共享库?
RFC 1122/1123地址链路层类型和链路层地址。
更新
我知道我可以将它作为pcap读取并获取链接层信息(即dpkt
有一个名为pcap.datalink()
的函数,它将返回链接层类型,而不是链接层地址)但是我我仍然不确定如何从原始端口(即eth0),python,windows和/或linux中读取它。
答案 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"