3
我已經看到了創建套接字使用嗅探IP數據包,例如幾個例子:Python原始套接字(Windows)中:嗅探以太網幀
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
我所試圖實現的,是嗅探以太網框架並分析Windows中收到的數據。我感興趣的數據包是PPPoE幀不包含IP。
在的Linux(使用Python),我能夠做到這一點使用:
s = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(3))
s.setsockopt(socket.SOL_SOCKET, IN.SO_BINDTODEVICE, struct.pack("%ds"%(len("eth0")+1,),"eth0"))
while condition:
pkt = s.recvfrom(1500)
addToQueue(filter(pkt))
現在由於betweeen Linux的插座的WinSock2 API的差異,我有以下兼容性問題:
- 對於windows沒有IN包。這意味着SO_BINDTODEVICE不存在。 我如何嗅探eth0接口上的所有內容?
- 我應該在socket()構造函數中使用協議選項,因爲我不想將其限制爲IPPROTO_IP。
任何人都可以指向正確的方向嗎?我經歷了類似的問題去,但他們沒有真正解決我的問題,因爲他們都關心的IP數據包嗅探
注:我知道像Scapy的庫可用於嗅探,但如果我們試圖做到這一點失去了包任何精心過濾(或使用prn函數),並不適合我想要做的。原始插座完全符合我的需求。