`
izuoyan
  • 浏览: 8933723 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

windows和linux的协议栈驱动

阅读更多

windows中没有将loopback当成一个网卡来实现,而是直接在比较高的层次解决了对127.0.0.0网段的访问,因此使用wiresharck是无法抓取这种loopback包的,pcap工作在非常低的层次,127.0.0.0网段的数据流是不会到这个层次的。因此你必须按照驱动或者自己写一个驱动去将127.0.0.0网段的数据包抓取,已经比较好的实现有CommView,然而它需要安装一大堆的驱动程序,而且没有微软徽标,很恐怖的,虽然它没有公布驱动的源码,然而很显然,它在比较高的层次截取了127.0.0.0网段的数据流。
本来想安装microsoft的loopback adapter驱动程序,但是这个adapter还不能指定127.0.0.0网段的地址,只能指定一个别的地址,并且它还不会生成自动路由,也就是本网段的路由通过本adapter,还必须手工添加一条主机路由才能实现抓包,也就是自己到自己的路由:
route add 192.168.40.34 192.168.40.34 mask 255.255.255.255
如果没有这条路由,那么它的行为和127.0.0.0网段的行为一样,所不同的是,wiresharck认出了这个loopback网卡,然而还是不能抓取它上面的包,也不知道这个loopback adapter的作用到底是什么?资料上说是为了模拟出一个本地网卡来,可是为何不直接自带一个呢?内置127.0.0.0网段的ip地址,就像linux那样。在linux中所有源和目的地都是本地网卡或者127网段的数据都会通过lo这个虚拟网卡发送接收,而且它还能配置别的ip地址:
ifconfig lo 11.22.33.44 netmask 255.255.255.0
唯一觉得不妥的是即使是linux的lo也没有办法配置mac地址,不过这无所谓,问题不大,至少在lo上能抓到本地包可以分析,而在windows上却只能安装loopback adapter然后还要配置路由,可见如果不配置路由的话,虽然有了一个环回的网卡,数据还是下不去,可能是路由将数据给导入到这个loopback adapter的。
影响linux协议栈数据流的方式有两个,第一是通过netfilter的用户态接口配置(有时候还要写内核模块),第二就是写一个协议处理驱动注册进内核,第一种方式更方便,不使用的时候直接在用户态清除配置即可,比如iptables -F,而第二种方式只能卸载内核模块了。然而不是每种需求都适合这两种方式的,如果你想在5个HOOK点对数据进行影响,那么可以使用第一种方式,如果你想对一个新的协议进行处理,那么使用第二种方式,linux不允许对协议栈进行纵向插入hook,比如在ip层和tcp层中间加一个“过滤层”,linux只能根据数据包的内容进行横向过滤,要么使用netfilter,要么注册一个协议和既有协议平行,也就是说linux不运行增加协议栈的高度,然而却可以增加每一层的宽度。
对于windows而言,由于它的驱动实现方式本身就是分层的,协议栈实现也不例外,和linux正好相反,它在横向扩展方面很吃力,虽然可以实现类似netfilter的机制,却很少有人尝试,这是由于windows的协议栈很容易在任何一个位置而不是仅有的几个HOOK位置插入一个新的“层”来过滤数据包,ndis的驱动模型十分善于做这个,tdi之上的东西更善于,直到用户态的lsp还在干这个。因此windows的数据过滤完全是纵向的,协议栈自然可以越来越高。因此在稳定性和配置的灵活性方面,windows远远不如linux,然而在windows上很少有人想做配置协议栈之类的工作。
添加了loopback adapter之后,重启机器,然后发现虚拟机突然就不通了,虚拟机中的网卡使用了bridge模式,不通的原因在于在虚拟机的网络配置中勾选了“Automatically choose an available physical network adapter to bridge to VMnet0”,并且loopback adapter的本地连接属性中又勾选了“VMware Bridge Protocol”,这样由于loopback adapter已经被模拟成了physical network adapter,因此它接管了这个虚拟机的bridge的话,自然就和真实机器的物理网卡不通了,然而此时虚拟机里面却能ping通外面的loopback adapter上的ip地址,实际上虚拟机的网卡bridge到这个loopback adapter了。解决办法就是不勾选loopback adapter的bridge选项或者手工指定虚拟机网卡bridge到哪个网卡。由此引出了下面的关于vmnet的预研。

分享到:
评论

相关推荐

    通信与网络中的你知道Linux网络协议栈吗?

    Linux网络协议栈跟Windows系统中的网络协议有什么不一样呢?这个还需要我们来看看具体的内容。下面就来简单看看它的概念,结构以及相应的一些解说吧。望对大家有所帮助。  Linux网络协议栈  Linux的协议栈其实是...

    SCTP Linux下的性能测试程序,服务器为Windows

    SCTP Linux下的性能测试程序,服务器为Windows,脚本驱动,测试吞吐量,反应时间,用来进行SCTP协议栈的测试。

    深入分析Linux内核源码

    1.2 Linux的开发模式和运作机制 1.3走进Linux内核 1.3.1 Linux内核的特征 1.3.2 Linux内核版本的变化 1.4 分析Linux内核的意义 1.4.1 开发适合自己的操作系统 1.4.2 开发高水平软件 1.4.3 有助于计算机...

    Kali Linux渗透测试(安全牛).txt

    │ 任务053:Linux 无线协议栈及配置命令.mp4 │ 任务054:RADIOTAP头部.mp4 │ 任务055:CONTROL FRAME.mp4 │ 任务056:MANAGEMENT FRAME 管理帧.mp4 │ 任务057:REASSOCIATION REQUEST FRAME.mp4 │ 任务058:...

    嵌入式系统/ARM技术中的嵌入式系统中USB-HOST协议栈的设计

    两大主流操作系统中,Windows不公开源码而Linux的代码却不方便移植。对于目前使用μCOS,VxWorks和QNX等OS的嵌入式系统和一些无OS的单片机系统来说,建立好一整套方便移植的USB主机驱动程序将会有更大的意义。 2...

    pjproject-1.8

    只需简单的编译一次,它能够在多种平台上运行(所有Windows 系统列, Windows Mobile, Linux, 所有Unix 系列, MacOS X, RTEMS, Symbian OS, 等等)。 4).极小的内存需求 官方宣称编译后的库,完全实现SIP的功能只...

    Quectel_EC200S_参考设计手册_V1.0.pdf

    协议栈: TCP/UDP/PPP/FTP/HTTP/FILE/MQTT/PING*/ CMUX*/NTP*/NITZ*/HTTPS*/FTPS*/SSL*/ MMS*/SMTP*/SMTPS* 一般特性 扩展温度范围: -40 °C ~ +85 °C 模块尺寸: 29.0 mm × 32.0 mm × 2.4 mm 重量: TBD LCC ...

    SkyEye教程

    目前已经在在基于Atmel91X40 CPU的开发板上实现了网络芯片8019AS扩展,并增加了μC/OS-II和μClinux的网络驱动程序,已经支持大量的网络应用程序,如LwIP (一个TCP/IP协议栈实现)、nfs server/clinet、...

    基于 Node.js 的个人博客系统,采用 Nuxt + Vue + TypeScript 技术栈。.zip

    操作系统 (OS):如Windows、macOS、Linux、Unix等,是管理和控制计算机硬件与软件资源、提供公共服务、协调计算机各部分工作的基础平台,是用户与计算机硬件之间的桥梁。 驱动程序:为特定硬件设备提供接口,使...

    Python灰帽子-黑客与逆向工程师的Python编程之道[简体中文版]

    第10章 面向Windows驱动的Fuzzing测试技术 10.1 驱动通信基础 10.2 使用Immunity Debugger进行驱动级的Fuzzing测试 10.3 Driverlib——面向驱动的静态分析工具 10.3.1 寻找设备名称 10.3.2 寻找IOCTL分派例程 10.3.3...

    精通qt4编程(源代码)

    开源版遵循QPL(Q Public License)和GPL(GNU General Public License)协议,商业版则提供了一些特有的模块,如Windows平台上的ActiveQt框架,Oralce、DB2等商业数据库的驱动。本书主要介绍开源版的Qt 4.3。 \阅读...

    精通Qt4编程(第二版)源代码

    开源版遵循QPL(Q Public License)和GPL(GNU General Public License)协议,商业版则提供了一些特有的模块,如Windows平台上的ActiveQt框架,Oralce、DB2等商业数据库的驱动。本书主要介绍开源版的Qt 4.3。 \...

    网络编程实用教程(第三版).zip

    1.2.1 基于TCP/IP协议栈的网络编程 10 1.2.2 基于WWW应用的网络编程 10 1.2.3 基于.NET框架的Web Services网络编程 10 1.3 客户机/服务器交互模式 13 1.3.1 网络应用软件的地位和功能 13 1.3.2 客户机/...

    新版Android开发教程.rar

    o Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows o Not Not Not Not compatible with Gnu Compiler for Java (gcj) Note: Note: Note: Note: If JDK is already installed on your ...

    usb_bootloader.zip

    支持各种系统(Windows/Linux/Mac/Android) 不用开发任何上位机,提高产品效率 支持各种加密算法(AES256等),轻松安全升级 自动识别Bin,Hex,自定义加密固件(后缀为sec)文件 支持MD5文件校验机制,保证固件...

    802.11无线网络权威指南(第二版全_非扫描).pdf

    3.4 802.11 对上层协议的封装 65 3.5 竞争式数据服务 66 3.5.1 广播与组播数据或管理帧................................................................... 66 3.5.2 单点传播帧...................................

Global site tag (gtag.js) - Google Analytics