如何使用原始数据包嗅探 python3.5 中 windows10 中的 ospf 数据包
How to sniff ospf packet in windows10 in python3.5 with raw packet
我正在尝试嗅探 Python 中的 ospf 数据包,并在 ubuntu 中实现了这个目标。
说到windows,我只能嗅探TCP、UDP和IGMPpackets.I可以用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))
但是 PF_PACKET 和 AF_PACKET 似乎在 windows 中不受支持。
如何修改我在windows中的代码?或者如何在 windows 中捕获以太网帧?
提前致谢:)
我找到原因了。看来ospf数据包只能通过在数据link层捕获以太网帧来嗅探。但在 windows 中,这是被禁止的。可以使用 Winpcap。
我正在尝试嗅探 Python 中的 ospf 数据包,并在 ubuntu 中实现了这个目标。
说到windows,我只能嗅探TCP、UDP和IGMPpackets.I可以用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))
但是 PF_PACKET 和 AF_PACKET 似乎在 windows 中不受支持。
如何修改我在windows中的代码?或者如何在 windows 中捕获以太网帧?
提前致谢:)
我找到原因了。看来ospf数据包只能通过在数据link层捕获以太网帧来嗅探。但在 windows 中,这是被禁止的。可以使用 Winpcap。