You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下调用Python socket.ioctl()设置混杂模式报错WinError 10022

错误触发根因

这个错误的核心触发原因是Windows平台对raw socket的固有约束:调用SIO_RCVALL开启全数据包接收权限时,关联的socket不能绑定到通配地址(""/0.0.0.0),必须绑定到某一块具体物理网卡的单播IPv4地址,否则系统会判定参数非法,抛出10022错误。

解决方案

1. 确认目标网卡IP

先查询你需要抓包的网卡对应的IPv4地址,例如本地以太网网卡地址为192.168.3.45,后续绑定操作使用该地址即可。

2. 调整代码逻辑

修改后的可运行代码如下:

import socket

# 替换为实际需要监听的网卡IPv4地址
TARGET_NIC_IP = "192.168.3.45"

sniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
# 绑定指定网卡IP,端口填0无实际意义
sniffer.bind((TARGET_NIC_IP, 0))
sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

try:
    data = sniffer.recvfrom(65535)
    print(f"RECVD : {data}")
finally:
    # 异常场景下也确保关闭混杂模式、释放socket
    sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)
    sniffer.close()

其他注意事项

  • 代码仍需要以管理员身份运行,否则raw socket创建阶段就会触发权限错误
  • 如需监听多块网卡,需要为每块网卡单独创建socket、绑定对应IP、开启混杂模式
  • 部分虚拟网卡(VPN、虚拟机适配网卡等)可能不支持混杂模式配置,遇到报错可切换到物理网卡测试

内容的提问来源于stack exchange,提问作者JA3G3R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:36:01