问题

Environment :Win10, python 3.7 and scapy 2.4.3

路由表如下所示, ZeroTier是一个虚拟内网接口,I219是外网接口。 明显I219的Metric比较小,所以I219应该是默认网卡,scapy 的 conf.iface 返回的也是I219,但 get_working_if() 却返回了 ZeroTier。

>>> conf.route
Network          Netmask          Gateway         Iface                                        Output IP        Metric
0.0.0.0          0.0.0.0          25.255.255.254  ZeroTier One Virtual Port                    172.28.33.102    10034
0.0.0.0          0.0.0.0          10.11.91.254    Intel(R) Ethernet Connection (5) I219-V      10.11.91.161     25>>> conf.iface
<NetworkInterface [Intel(R) Ethernet Connection (5) I219-V]>>>> get_working_if()
<NetworkInterface [ZeroTier One Virtual Port]>

分析原因,源代码中get_working_if() 是获取的conf.route中mask最小的网卡。如果有多个网卡的mask是0.0.0.0,
就有可能出错。conf.iface初始化情况下是获取的默认路由对应的网卡,但scapy中多处代码均有conf.iface = get_working_if(),因此在scapy执行过程中conf.iface可能会被改写,且sr(),traceroute()等多个函数如果不指定iface的话就会提示网卡不可用。已在github上提交此issue

 /Lib/site-packages/scapy/arch/windows/init.pydef get_working_if():"""Return an interface that works"""try:# return the interface associated with the route with smallest# mask (route by default if it exists)iface = min(conf.route.routes, key=lambda x: x[1])[3]  // 我觉得这里应该改成lambda x: x[5] ,1代表mask,5代表metric

解决方案

根据scapy作者的回复,get_working_if() 并不是用来返回默认网卡,而是用来返回一个可以用的网卡。

The return value of get_working_if() does not seem “wrong”. As I said, it is not supposed to return the default interface but rather “an interface that works”.

如果要获取默认网卡,应该使用conf.route.resync() ; conf.route.route('0.0.0.0')[0] 两个步骤

For the first, you need to run conf.route.resync() to read again the interfaces and routes from your host network stack.
For the second, conf.route.route(‘0.0.0.0’) returns the route (as a Python tuple) for 0.0.0.0, so you can use conf.route.route(‘0.0.0.0’)[0] to get the interface.

win10下scapy get_working_if()不能获得正确的网卡原因分析相关推荐

  1. python access violation_Python x64下ctypes动态链接库出现access violation的原因分析

    access violation error in Python x64 when using ctypes (caused by pointer) 问题描述 似乎这个问题仅存在于Windows下Py ...

  2. win10下安装华为Atals USB虚拟网卡驱动

    1. 用USB连接电脑和HUAWEI Atlas 200 进入设备管理器,查看设备驱动安装情况 2. 安装驱动 (1) 在RNDIS上点击右键,选择更新驱动程序 (2) 接下来选择浏览我的电脑以查找驱 ...

  3. win10下自带输入法变为繁体字的原因及解决方法

    原因:win10自带输入法简繁切换快捷键Ctrl+Shift+F: 在使用Eclipse(或其他软件),使用Ctrl+Shift+F快捷键调整格式时未选中当前软件: 和输入法快捷键冲突,按shift将 ...

  4. Linux下sqlite3乱码,sqlite中文乱码问题原因分析及解决

    在VC++中通过sqlite3.dll接口对sqlite数据库进行操作,包括打开数据库,插入,查询数据库等,如果操作接口输入参数包含中文字符,会导致操作异常.例如调用sqlite3_open打开数据库 ...

  5. win10下在局域网找不到本地计算机,win10系统网上邻居找不到本地连接的解决步骤...

    win10系统使用久了,好多网友反馈说win10系统网上邻居找不到本地连接的问题,非常不方便.有什么办法可以永久解决win10系统网上邻居找不到本地连接的问题,面对win10系统网上邻居找不到本地连接 ...

  6. 1、win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现)

    1.win10下连接本地系统上的Linux操作系统(分别以Nat方式和桥接模式实现) 一.准备知识:win10下打开Administrator的方式 在win10操作系统中,Administrator ...

  7. win10 linux uefi启动不了系统安装教程,【从踩坑到教程】win10下ubuntu18.04双系统UEFI模式安装、Nvidia驱动安装...

    欢迎转载,转载请说明出处 前言 之前(旧笔记本电脑)装过Ubuntu,按照经验贴一次就成功了,所以我以为不就是装系统嘛,很简单马上就能完事. 结果--这次(新笔记本电脑)花了 4天时间才装好.配好环境 ...

  8. win10 下pycharm+anaconda 编译生成pyd文件

    由于生产部署的问题,需要把用python写的深度学习代码编译为可被调用的文件.上网搜索了下,暂时了解到win10下pyd文件比较流行.下面是直接引用某位博主的结论,个人感觉总结的很好.其中Cython ...

  9. 计算机win10下常用命令验证性实验

    文章目录 计算机win10下常用命令验证性实验 ipconfig ping tracert ARP DHCP netstat DNS cache 计算机win10下常用命令验证性实验 1.需要安装的软 ...

最新文章

  1. vbsedit无法创建空文档_vue文档里你没捡起来的宝藏
  2. 3.1.3 训练/开发/测试集的问题以及注意事项
  3. 倒计时321控制器设置
  4. typescript 怎么表示当前时间减一个月_TypeScript类型元编程:实现8位数的算术运算...
  5. 这个一夜暴富的秘诀你还不知道?
  6. linux期末作业设计,linux作业与项目设计
  7. 2015年第六届蓝桥杯 - 省赛 - Java大学A组 - A. 熊怪吃核桃
  8. 2018-2019年度总结
  9. CloudFoundry环境上的三种端口,您分清楚了吗
  10. java开发环境搭建--写给java新手
  11. Excel 导入数据库中java.lang.StringIndexOutOfBoundsException: String index out of range: -50提示解决原因...
  12. SpringBoot中获取微信用户信息竟然这么简单!
  13. 千万数据去重_如何在 1 秒内做到大数据精准去重?
  14. maven 如何引入不同版本_React中不同webpack版本如何配置less
  15. 2021北京计算机考研科目,2021年北京大学计算机考研科目
  16. JVM参数-X和-XX的区别
  17. 视图:定义视图 (建立视图、删除视图格式、查询视图、更新视图、视图的作用)
  18. matlab示波器有毛刺,在使用示波器时如何消除毛刺?
  19. python unpack_Python:struct模块的pack、unpack
  20. vistor和tsmserver不在同一台机器上的连接问题

热门文章

  1. linux开启防火墙后,Docker容器启动报错:ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule 解决办法
  2. 微信公众号接入科大讯飞AI
  3. 卡图星小机器人怎么过_瑞奇与叮当全黄金螺丝收集图文攻略
  4. 画西瓜图的html代码,西瓜图片卡通简笔画步骤
  5. 【visum工作笔记】之七
  6. 个人简历电子版免费范文(合集)
  7. Integer自动装箱
  8. glibc: ld.so;ld; LD_LIBRARY_PATH; rpath-link
  9. 虚拟机软件(VMware)的下载与安装
  10. AIX系统生僻字的解决方案