zoukankan      html  css  js  c++  java
  • 编写自己的简易版网络协议栈(1)--arp协议,使用wireshark抓包分析

     

    实验环境: 略。

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

     

    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),使用wiresharkvirtualBoxd的网卡数据(借此方法可以抓到其内部windows虚拟机内的网卡数据)

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

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

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

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

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

     

    .

    /************* 社会的有色眼光是:博士生、研究生、本科生、车间工人; 重点大学高材生、普通院校、二流院校、野鸡大学; 年薪百万、五十万、五万; 这些都只是帽子,可以失败千百次,但我和社会都觉得,人只要成功一次,就能换一顶帽子,只是社会看不见你之前的失败的帽子。 当然,换帽子决不是最终目的,走好自己的路就行。 杭州.大话西游 *******/
  • 相关阅读:
    LR常用函数汇总
    常用工具软件包下载地址
    MySQL分表操作的例子
    Redis性能优化之redis.cnf配置参数
    Redis监控之redis-live.conf配置
    Oracle中查询和定位数据库问题的SQL语句
    Oracle种常用性能监控SQL语句
    show processlist使用介绍
    MySQL流程控制和存储过程介绍
    MySQL字符集和排序介绍
  • 原文地址:https://www.cnblogs.com/happybirthdaytoyou/p/14650959.html
Copyright © 2011-2022 走看看