我正在使用Python3开发自定义数据包嗅探器
它不必是平台独立的。我正在使用Linux
我使用的方法是从套接字recivfrom()(AF_PACKET,SOCK_RAW)
它工作正常,但我对recvfrom()返回的信息有问题
recvfrom()返回一个包含5个组件的元组
示例:('eno1',2054,0,1,b'\ x00!\ x9b \ x16 \ xfa \ xd1')
我如何解释最后4个组件?
它在哪里记录?
我不喜欢使用libpcap或scapy。
好!这是一段代码片段:
s = socket.socket(socket.AF_PACKET,socket.SOCK_RAW,socket.ntohs(0x0003))
...
packet,pktAdr = s.recvfrom(65565)
print('pktAdr:'+ str(pktAdr))
谢谢!
答案 0 :(得分:0)
docs.python.org上没有记录,所以我做了一些研究 我现在能够回答自己。
recvfrom返回的元组类似于Linux内核返回的sockaddr_ll结构。
元组包含5个组件:
- [0]:界面名称(例如' eth0')
- [1]:物理层的协议(在linux / if_ether.h中定义)
- [2]:包类型(在linux / if_packet.h中定义)
- [3]:ARPHRD(在linux / if_arp.h中定义)
- [4]:实际地址
问题中提供的示例可以解码为:
- ' eno1'
- ARP协议(0x806)
- 传入数据包
- 以太网框架
- MAC地址
在监视模式下的WiFi接口的情况下,[3]元素将是803(意味着' IEEE802.11 + RadioTap标题')。
希望这会对某人有所帮助