如何使用原始数据包在python3.5中的windows10中嗅探ospf数据包

时间:2017-06-20 04:08:25

标签: python sockets networking ospf

我试图在Python中嗅探ospf数据包,并在ubuntu中实现了这个目标。

说到Windows,我只能嗅探TCP,UDP和IGMP数据包。我可以通过wireshark捕获ospf数据包。

代码如下。

from socket import *
import struct
import binascii

local_name = getfqdn(gethostname())
local_addr = gethostbyname(local_name)
sniffer = socket(AF_INET, SOCK_RAW, IPPROTO_IP)

sniffer.bind((local_addr, 0))
sniffer.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)

sniffer.ioctl(SIO_RCVALL, RCVALL_ON)

while True:   
    pkt = sniffer.recvfrom(2048)

    ipHeader = pkt[0][0:20]       
    ip_hdr = struct.unpack("!9s1s10s",ipHeader)   
    print("proto:", binascii.hexlify(ip_hdr[1]))

在ubuntu 16.04中,我创建了如下套接字。

sniffer = socket(PF_PACKET,SOCK_RAW,htons(0x0800))

但似乎Windows中不支持PF_PACKET和AF_PACKET。

如何在Windows中修改我的代码?或者如何在Windows中捕获以太网帧?

提前致谢:)

1 个答案:

答案 0 :(得分:1)

我找出原因。似乎只能通过捕获数据链路层中的以太网帧来嗅探ospf数据包。但在Windows中,这是被禁止的。可以使用Winpcap。