gpt4 book ai didi

python-3.x - 如何解释 recvfrom 的结果(原始套接字)

转载 作者:行者123 更新时间:2023-12-03 12:03:56 25 4
gpt4 key购买 nike

我正在 Python3 中开发一个自定义数据包嗅探器。
它不必独立于平台。我正在使用 Linux。
我使用的方法是从一个套接字(AF_PACKET,SOCK_RAW)recvfrom()。
它工作正常,但我对 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)) ... 数据包,pktAdr = s.recvfrom(65565)
打印('pktAdr:'+str(pktAdr))

谢谢!

最佳答案

它没有记录在 docs.python.org 上,所以我做了一些研究。
我现在可以回答自己了。

recvfrom 返回的元组类似于 Linux 内核返回的 sockaddr_ll 结构。
元组包含 5 个组件:
- [0]:接口(interface)名称(例如'eth0')
- [1]: 物理层协议(protocol)(定义在 linux/if_ether.h 中)
- [2]:数据包类型(在 linux/if_packet.h 中定义)
- [3]: ARPHRD (在 linux/if_arp.h 中定义)
- [4]:物理地址
问题中提供的示例可以解码为:
- 'eno1'
- ARP 协议(protocol) (0x806)
- 传入数据包
- 以太网帧
- MAC地址
如果 WiFi 接口(interface)处于监控模式,[3] 元素将是 803(意思是“IEEE802.11 + RadioTap header ”)。

希望这会对某人有所帮助

关于python-3.x - 如何解释 recvfrom 的结果(原始套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42821309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com