原文地址:http://blog.csdn.net/piggyxp/article/details/19606

前   言

首先要感谢网络安全资深专家卢湖川博士以及VC网络版的limin朋友提供的资料以及帮助^_^

经常看到论坛有人问起关于数据包的截获、分析等问题,幸好本人也对此略有所知,所以就想写一系列的文章来详细深入的探讨关于数据包的知识,,我希望通过这一系列的文章,能使得关于数据包的知识得以普及,所以这系列的每一篇文章我都会有由浅入深的解释、详细的分析、以及编码步骤,另外附上带有详细注释的源码(为了照顾大多数朋友,我提供的都是MFC的源码)。

不过由于也是初学者,疏漏之处还望不吝指正。

本文凝聚着笔者心血,如要转载,请指明原作者及出处,谢谢!^_^

OK,. Let’s go !  Have fun!! q^_^p

第一篇         手把手教你玩转ARP包

   目录:

    一.    关于ARP协议的基础知识

1.        ARP的工作原理

2.        ARP包的格式

作者:

CSDN  VC/MFC 网络编程 PiggyXP  ^_^

一.             关于ARP协议的基础知识

1.ARP的工作原理

本来我不想在此重复那些遍地都是的关于ARP的基本常识,但是为了保持文章的完整性以及照顾初学者,我就再啰嗦一些文字吧,资深读者可以直接跳过此节。

我们都知道以太网设备比如网卡都有自己全球唯一的MAC地址,它们是以MAC地址来传输以太网数据包的,但是它们却识别不了我们IP包中的IP地址,所以我们在以太网中进行IP通信的时候就需要一个协议来建立IP地址与MAC地址的对应关系,以使IP数据包能发到一个确定的地方去。这就是ARP(Address Resolution Protocol,地址解析协议)。

讲到此处,我们可以在命令行窗口中,输入

arp –a

来看一下效果,类似于这样的条目

210.118.45.100    00-0b-5f-e6-c5-d7    dynamic

就是我们电脑里存储的关于IP地址与MAC地址的对应关系,dynamic表示是临时存储在ARP缓存中的条目,过一段时间就会超时被删除(xp/2003系统是2分钟)。

这样一来,比如我们的电脑要和一台机器比如210.118.45.1通信的时候,它会首先去检查arp缓存,查找是否有对应的arp条目,如果没有,它就会给这个以太网络发ARP请求包广播询问210.118.45.1的对应MAC地址,当然,网络中每台电脑都会收到这个请求包,但是它们发现210.118.45.1并非自己,就不会做出相应,而210.118.45.1就会给我们的电脑回复一个ARP应答包,告诉我们它的MAC地址是xx-xx-xx-xx-xx-xx,于是我们电脑的ARP缓存就会相应刷新,多了这么一条:

210.118.45.1   xx-xx-xx-xx-xx-xx   dynamic

为什么要有这么一个ARP缓存呢,试想一下如果没有缓存,我们每发一个IP包都要发个广播查询地址,岂不是又浪费带宽又浪费资源?

而且我们的网络设备是无法识别ARP包的真伪的,如果我们按照ARP的格式来发送数据包,只要信息有效计算机就会根据包中的内容做相应的反应.

试想一下,如果我们按照ARP响应包的相应的内容来刷新自己的ARP缓存中的列表,嘿嘿,那我们岂不是可以根据这点在没有安全防范的网络中玩些ARP包的小把戏了?在后面的文章里我就手把手来教你们如何填充发送ARP包,不过先别急,我们再继续学点基础知识^_^

2.ARP包的格式

既然我们要来做一个我们自己的ARP包,当然首先要学习一下ARP包的格式。

从网络底层看来,一个ARP包是分为两个部分的,前面一个是物理帧头,后面一个才是ARP帧

首先,物理帧头,它将存在于任何一个协议数据包的前面,我们称之为DLC Header,因为这个帧头是在数据链路层构造的,并且其主要内容为收发双方的物理地址,以便硬件设备识别。

DLC Header

字段

长度(Byte)

默认值

备注

接收方MAC

6

广播时,为 ff-ff-ff-ff-ff-ff

发送方MAC

6

Ethertype

2

0x0806

0x0806是ARP帧的类型值

图1 物理帧头格式

图1是需要我们填充的物理帧头的格式,我们可以看到需要我们填充的仅仅是发送端和接收端的物理地址罢了,是不是很简单呢?

接下来我们看一下ARP帧的格式.

ARP Frame

字段

长度(Byte)

默认值

备注

硬件类型

2

0x1

以太网类型值

上层协议类型

2

0x0800

上层协议为IP协议

MAC地址长度

1

0x6

以太网MAC地址长度为 6

IP地址长度

1

0x4

IP地址长度为 4

操作码

2

0x1表示ARP请求包,0x2表示应答包

发送方MAC

6

发送方IP

4

接收方MAC

6

接收方IP

4

填充数据

18

因为物理帧最小长度为64字节,前面的42字节再加上4个CRC校验字节,还差18个字节

图2 ARP帧格式

我们可以看到需要我们填充的同样也只是MAC,IP,再加上一个1或2的操作码而已。

..................
    =======================================================================

晕,本来想一口气发完,没想到这么点字就到了64k限额了,不知道是不是彩色字和表格的关系,没办法,只好把文章掰成四、五瓣来发了-_-b,下次再说吧

请期待下文 : )

-------    Finished at  2004-05-29 19:41

-------    Made In     DLUT | DIP

手把手教你玩转ARP包(一)相关推荐

  1. 手把手教你玩转ARP包(四)

    原文链接:http://blog.csdn.net/piggyxp/article/details/19609 作者: CSDN  VC/MFC 网络编程 PiggyXP  ^_^ 本篇目录:     ...

  2. 手把手教你玩转ARP包(三)

    作者:CSDN  VC/MFC 网络编程 PiggyXP  ^_^     目录: 二.发送数据包的编程实现    1.  填充数据包    2.  发送数据包 三.一些附加步骤及说明    1.  ...

  3. 手把手教你玩转ARP包(二)

    原文链接:http://blog.csdn.net/piggyxp/article/details/19607 作者:    CSDN  VC/MFC 网络编程 PiggyXP  ^_^   目录: ...

  4. 手把手教你玩转SOCKET模型:完成端口(Completion Port)详解

    这篇文档我非常详细并且图文并茂的介绍了关于网络编程模型中完成端口的方方面面的信息,从API的用法到使用的步骤,从完成端口的实现机理到实际使用的注意事项,都有所涉及,并且为了让朋友们更直观的体会完成端口 ...

  5. android 自动化 微信,C#手把手教你玩微信自动化

    原标题:C#手把手教你玩微信自动化 转自:初久的私房菜 cnblogs.com/MrChuJiu/p/13959383.html 介绍 本文主要讲的内容是 C# + Appium 自动化玩微信. Ap ...

  6. echarts formatter_手把手教你玩转echarts(二)折线图

    茫茫人海中与你相遇 相信未来的你不会很差 作者:婷酱Yaaa 来源:https://juejin.im/post/5f0292d35188252e5a5dbed0 前言 哈喽,everybody,我又 ...

  7. 手把手教你玩转SOCKET模型之重叠I/O篇(下)

    http://blog.csdn.net/PiggyXP/archive/2004/09/23/114908.aspx 四.     实现重叠模型的步骤 作了这么多的准备工作,费了这么多的笔墨,我们终 ...

  8. 手把手教你玩转SOCKET模型:完成例程(Completion Routine)篇

    本文假设你已经对重叠I/O的机制已有了解,否则请先参考本系列的前一篇<手把手教你玩转SOCKET模型之重叠I/O篇>: 目录: 1.完成例程的优点 2.完成例程的基本原理 3.关于完成例程 ...

  9. 手把手教你玩转网络编程模型之完成例程(Completion Routine)

    前  言 记得写这个系列的上一篇文章的时候已经是四年前了,准确的说是四年半以前了,翻开我尘封已久的IO模型里面的"完成例程"的实现方式及示例代码. 本文凝聚着笔者心血,如要转载,请 ...

最新文章

  1. ubuntu16.04 ROS安转及RVIZ启动
  2. 银行计算机设备管理 总结,【2017年银行自助设备中心年终总结】_银行自助设备工作总结...
  3. wsdl文件是怎么生成的_电子标书怎么做需要注意的事项,您学会了吗?
  4. Linux文件与目录的rwx权限
  5. quercus mysql_14.5 Quercus 原理及展望
  6. 基于.NET实现数据挖掘--关联规则分析算法
  7. vue svg sprite loader_Vue项最佳实践
  8. 响应优先级与zorder
  9. 【docker】如何在docker中执行redis命令
  10. 谷歌浏览器提示Flash版本过低,要求更新或运行一次
  11. 网页HTML5制作flex布局骰子,css利用flex布局画骰子的六个面
  12. rtx3060性能相当于什么水平 rtx3060参数
  13. 第一次暑假实习面试,进入二面就算成功(没有成功)
  14. javaWeb快速开发框架之Play
  15. SystemInfo.deviceUniqueIdentifier
  16. 第二届“强网”拟态防御国际精英挑战赛落幕,29支国内外精英队伍未能突破拟态防御,赛宁网安靶场平台完美支撑BWM新赛制.
  17. HCNA静态路由配置
  18. 合泰杯 | 合泰单片机入门 编程详解(二)
  19. android和emule区别,emule-project是什么?正宗电驴和VeryCD电驴有什么区别?
  20. 关于umeditor粘贴图片自动上传

热门文章

  1. 私有属性和方法-通过父类方法间接访问
  2. 在 IntelliJ IDEA 中远程调试 Java 程序
  3. 分贝(BD)的含义以及关系(有助于深刻理解)
  4. 数据中心机房设计及各专业技术平衡
  5. 环信集成 2---基于环信Demo3.0,实现单聊功能
  6. 深入浅出LVS:企业集群平台负载均衡的三种模式和算法实现
  7. 检查IP的shell
  8. CCNA学习指南第二章
  9. 《父亲家书》选:母亲的手摔伤了
  10. 在一基金慈善年会上面发言