实验环境: 略。

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

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. 【Java】实体类转换框架 MapStruct

    简单尝试了下发现比Dozer还有BeanUtil还方便小巧 注解的作用是在生成字节码文件时实现具体GetterSetter方法,实际转换时就是赋值操作,嘎嘎快 参考文章: https://juejin ...

  2. 【Centos6】时间同步问题

    解决方案参考: https://www.cnblogs.com/webnote/p/5751758.html centos6并不会主动同步时间 上一次关机,将时间停留了 使用硬件时间同步校准 [roo ...

  3. 深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(5)

    代码1:(求雅可比矩阵, jacobian矩阵求解) import theano from theano import tensor # Creating a vector x = tensor.dv ...

  4. 【转载】 CUDA中的Unified Memory

    为了结合上篇 文章   https://www.cnblogs.com/devilmaycry812839668/p/13264080.html 对RTX显卡是否能够实现P2P通信功能,同时专业级别显 ...

  5. 中国版的huggingface——始智AI-wisemodel

    新闻: 始智AI-wisemodel社区正式上线,目标打造中国版"HuggingFace" 首先要知道,AI火热了7,8年了,不论是国内还是国外一直有要搞模型分享的网站,但是这东西 ...

  6. C#.Net筑基-解密委托与事件

    委托与事件是C#中历史比较悠久的技术,从C#1.0开始就有了,核心作用就是将方法作为参数(变量)来传递和使用.其中委托是基础,需要熟练掌握,编程中常用的Lambda表达式.Action.Func都是委 ...

  7. Java核心编程-第一卷:基础知识

    public static void main(String[] args) { BigInteger bigInteger1 = BigInteger.probablePrime(20, new R ...

  8. [nRF24L01+] 2. 芯片介绍

    2. 芯片介绍 2.1. 特点 电源管理 掉电模式: 900nA 待机1模式: 26uA 2.2. 方框图

  9. 2023 CCPC 女生题解

    gym B. 终焉之茧 \(\star\) 显然两个维度分别做 单谷函数,起始点 \(A\) 是一个端点.一个 naive 的想法是三分目标点 \(B\),但交互次数会超.二分关于 \(B\) 对称点 ...

  10. You are currently using minified code outside of NODE_ENV === 'production'. This means that you are running a slower development build of Redux.

    You are currently using minified code outside of NODE_ENV === 'production'. This means that you are ...