实验环境: 略。

实验背景:已编写好基于以太网接口的输入处理,能够解析到以太网数据包内的帧类型。

1. 协议栈底层采用轮询方式,即轮询以太网数据包。

2. 若收到数据,则交由以太网输入处理模块进行解析

3.

同时在这里打上断点,我们后续的操作是向此工程所在网卡发送一个arp数据包,以便代码执行能够进入到此断点处。

4. 正戏: 发送一个arp包,并使用wireshark验证。

谁(哪个网卡)来发送arp包?

如果是arp请求包,那么请求哪个ip地址呢?

如果发送一个免费arp,又能收到吗?

先简单分析,再来实操(疑问太多,想法太多,顾虑太多,不如一试):

我们的visual studio工程是基于virtualBox的虚拟网卡netifA,使用npcap技术去虚拟出一张属于自己的网卡netifB,(换句话说,netifB是和netifA有紧密联系的),

我们在windows主机下面执行ipconfig可以看到网卡netifA的ip地址(如下图示)。

我们可以在virtualBox内安装的windows虚拟机内去ping netifA的ip,这样,netifB应该也能够收到该以太网数据包,即我们的visual studio就能够收到以太网数据包了。

换句话说,通俗易懂点,相当于有一根网线连着我们virtualBox内的windows虚拟机的网卡和我们的visual studio工程所使用的网卡。

5. 发送ping包前的准备工作

6. 开启Whreshark,在第5步执行ping后,我们可以看到wireshark已经捕获到数据包,并且visual studio内代码已经执行到了断点处。

现在说明,我们已经搭建好了一个开发环境,可以针对收到的ARP包进行软件的解析了。解析以后才决定下一步要干啥嘛。

本次我们时windows虚拟机来ping virtualBox的虚拟网卡,并且我们使用wireshark抓到了 arp请求包和arp响应包。

我们来详细看一下其数据格式,这有助于我们来实现自己的简易版arp协议,请接着向下看本文,走起。

7. arp请求包分析

8. arp响应包分析

9. 我们已经了解了arp请求包和响应包的数据格式了,接着我们定一个小目标:

在自己的工程代码自定义一个IP地址,然后从外界向此IP发送ARP请求包,我们针对此ARP请求进行解析,然后回复ARP响应包。

我们使用wireshark来验证这个通信过程是否符合预期。

走起。

10. 编写好代码 相关代码展示

11.  打开wireshark, windows虚拟机内发送ping包,

在windows虚拟机内依次执行下述3条指令.

12. wireshark打开virtualBox的网卡,即可抓到我们的visual studio内的自己的协议栈的来往数据包.

由上图可见,arp响应包成功发送出去了。我们实现了第9步中的小目标了。

13. 对未来的。最近的一步规划:

  之后,我们可以干啥呢?

  还需要补充一个免费arp。

  实现arp后,可以实现ICMP。

  而实现ICMP,又必须先实现IP的输出输出处理。

  这样,我们就可以实现对外界的ping响应了。

  那时,咱们的简易版协议栈也算实现第一个小目标了。

  还可以扩展的地方:

  暂未实现本地的ARP表,

  暂未实现ARP表中某表项超时后重新发起ARP请求。

后记 调试过程中遇到的问题

1.

编写好arp发送响应包的代码后,将其跑起来,在windows虚拟机先执行arp -d,然后去ping我们的简易协议栈的IP(192.168.1.168),使用wireshark抓virtualBoxd的网卡数据(借此方法可以抓到其内部windows虚拟机内的网卡数据)

首先,可以看到windows虚拟机内正确发出了arp请求包。如下图

但是我们的简易版协议栈并没有正确回复arp响应包,如下图

很显然,这是由于我们的软件协议栈内发送ARP相应包时,一些字段填写错误导致arp响应没有成功。

也正是由于arp请求不成功, windows虚拟机内执行ping后才多次发送arp请求,在多次发送arp请求都无法接收到正确的arp相应包后,windows虚拟机内的本次ping过程也终止发送arp请求了,ping过程在arp阶段就结束了,后续的icmp包也就没有被发送出去了。

原因定位:有些字段需要进行字节序的转换,如下图

.

编写自己的简易版网络协议栈(1)--arp协议,使用wireshark抓包分析的更多相关文章

  1. python编写网络抓包分析脚本

    python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...

  2. 网络协议抓包分析——TCP传输控制协议(连接建立、释放)

    前言 TCP协议为数据提供可靠的端到端的传输,处理数据的顺序和错误恢复,保证数据能够到达其应到达的地方.TCP协议是面向连接的,在两台主机使用TCP协议进行通信之前,会先建立一个TCP连接(三次握手) ...

  3. 网络协议抓包分析——IP互联网协议

    前言 IP协议是位于OSI模型的第三层协议,其主要目的就是使得网络间可以相互通信.在这一层上运行的协议不止IP协议,但是使用最为广泛的就是互联网协议. 什么是IP数据报 TCP/IP协议定义了一个在因 ...

  4. 网络协议抓包分析——ARP地址解析协议

    前言 计算机之间可以相互通信的前提是要知道对方的地址,才可以发送信息给其他计算机,就像别人要联系你也得先知道你的电话号码一样.这里的地址因为网络分层的原因就包括IP地址和MAC地址(即网卡地址.硬件地 ...

  5. Wireshark数据抓包分析——网络协议篇

                   Wireshark数据抓包分析--网络协议篇     watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGF4dWViYQ==/ ...

  6. 网络知识===wireshark抓包数据分析(一)

    wireshark分析: 上图是我进行一个HTTP协议的下载,文件内容大概是1.7M左右. 抓包数据: https://files.cnblogs.com/files/botoo/wireshark% ...

  7. 网络基础:ARP 协议、IP协议、路由协议 均属于网络层协议

    ARP协议 ARP--地址解析协议(Address Resolution Protocol),实现通过 对方的IP地址(域名) 寻找对方的 MAC地址 ARP的功能 本地电脑查看 IP 和 MAC 对 ...

  8. 网络基本功(二十七):Wireshark抓包实例分析HTTP问题

    转载请在文首保留原文出处:EMC中文支持论坛https://community.emc.com/go/chinese 介绍 HTTP的问题可能是由于慢速服务器或客户端,TCP性能问题,本文讨论上述问题 ...

  9. UNIX网络编程——tcp流协议产生的粘包问题和解决方案

    我们在前面曾经说过,发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体 ...

  10. Android抓包分析-fiddler版

    本文介绍的是如何使用Fiddler工具抓取Android应用的HTTP协议的数据包 工具 Genymotion模拟器 笔记本电脑一台(Win7) Fiddler(v4.6.2),下载地址:http:/ ...

随机推荐

  1. ffmpeg精简

    自:http://www.chinavideo.org/viewthread.php?tid=5567&extra=page%3D1&page=2 现在更新一下目前遇到的问题: 我想裁 ...

  2. 一文全解:LVM(逻辑卷管理器)

    前两篇文章已经讲了关于磁盘分区和磁盘阵列的相关内容: 一文全懂:Linux磁盘分区 一文全懂:独立冗余磁盘阵列(RAID) 但是磁盘分区完后再想扩容或者缩容就比较麻烦了,甚至很多时候不能扩容或者缩容, ...

  3. Segment-anything学习到微调系列_SAM初步了解

    Segment-anything学习到微调系列_SAM初步了解 前言 本系列文章是博主在工作中使用SAM模型时的学习笔记,包含三部分: SAM初步理解,简单介绍模型框架,不涉及细节和代码 SAM细节理 ...

  4. 基于动态数据源的SAAS系统(SpringBoot+MybaitsPlus+Durid)

    一.什么是SAAS系统 SAAS全称 Software as a Service,软件即服务.本人接触SAAS也在近两年:在我的理解,SAAS不是特指某种系统,它是提供某类产品的系统服务平台,让第三方 ...

  5. 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉?

    我的博客园:https://www.cnblogs.com/CQman/ 如何自动实现本地AD中禁用的用户从地址列表中隐藏掉? 需求信息: 用户本地AD用户通过ADConnect同步到O365,用户想 ...

  6. 【Windows】关闭 Ctrl+Alt+Delete 锁屏

    参考百度经验: https://jingyan.baidu.com/article/9158e0005787c3a2541228b3.html Win + R 运行 gpedit.msc

  7. 【SpringMVC】06 转发 & 重定向

    除了快速入门的视图解析器方式处理, 我们还可以使用原生的Servlet转发方式执行 访问测试 还有重定向 访问 测试 使用SpringMVC的转发&重定向 和原生的重定向,有一点不同,MVC的 ...

  8. jdk命令行工具系列——检视阅读

    jdk命令行工具系列--检视阅读 参考 java虚拟机系列 RednaxelaFX知乎问答 RednaxelaFX博客 jps--虚拟机进程状态工具 jps :(JVM Process Status ...

  9. 编程语言中的Variable Shadowing(变量遮蔽)—— declaration shadows a local variable —— Consider Allow Shadowing of let Bindings

    Variable Shadowing(变量遮蔽)是编程语言中比较常见的一种情况,但是由于不同语言对于这个情景的处理是不同的,所以在具体语言中这个Variable Shadowing(变量遮蔽)的表现也 ...

  10. docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件

    docker容器挂载host宿主机的本地目录,docker容器与宿主机之间互相拷贝文件 参考于: https://blog.csdn.net/weixin_37773766/article/detai ...