python - 我如何使用源和目标 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索引号。
解决方案
推荐阅读
- azure - New-AzEventGridSubscription“验证提供的终结点的尝试”失败
- kubernetes - 我的服务如何在 Kubernetes 部署中相互通信?
- javascript - React 如何有条件地覆盖 Material-UI 中的 TextField 错误颜色?
- regex - 清理这串 sed 命令
- node.js - JOI alternatives try - need one to be required
- javascript - 为每个字母制作文本动画的最高效方法是什么
- alembic - 数据库方言包含在 Alembic 降级脚本中,但不在升级脚本中?
- video - 拍摄实时视频流并将图像分成三份进行广播的最佳方式?
- ios - Swift - 如何像在 App Store 中一样共享应用链接
- python - 将连续数字列表生成为字符串