2017-03-15 57 views
0

我正在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))如何解釋recvfrom的結果(原始套接字)

謝謝!

+0

它在哪裏記錄?在docs.python.org上如何?此外,如果您需要幫助,則需要顯示您的代碼。 –

回答

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標頭')。

希望這會幫助某人