首页 > 解决方案 > 我如何使用源和目标 MAC 地址嗅探以太网

问题描述

我正在尝试嗅探以太网数据包,但我无法从原始包中获取 MAC 地址,从 IP 标头开始我添加了 Wireshark 输出和脚本输出的图片。出于这个原因,我不使用结构,但dest_mac = data[:6]操作也给出了相同的结果。(物理设备和virtualbox上的windows作为NIC)

import socket
import sys

def receiveData(s):
    data = ''
    try:
        data = s.recvfrom(65000)
    except:
        print('Data read error')
        sys.exc_info()
    return data[0]


s = socket.socket(socket.AF_INET, socket.SOCK_RAW)
s.bind(('192.168.56.1', 0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

data = receiveData(s)
dest_mac = data[:6]

j = 0
for i in data:
    print(str(hex(j)) + ' ' + hex(i))
    j += 1
s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)


虚拟接口没有流量刚刚我发送 ping 192.168.56.2 到 192.168.56.1 可以回显或回复这个更接近。但是当我检查wireshark 0x49中的总长度时,当我检查我的代码输出0x3b 0x49-0x3b时,这个差异是我丢失的字节'因为我可以看到0x45它是wireshark中的0x0e索引号。

线鲨 Wireshark 和脚本输出

输出(只需移动到 excel 以便于阅读) Wireshark 和脚本输出

标签: pythonsocketsnetwork-programming

解决方案


推荐阅读