结构ether_header定义了以太网帧首部;结构arphdr定义了其后的5个字段,其信息
用于在任何类型的介质上传送ARP请求和回答;ether_arp结构除了包含arphdr结构外,
还包含源主机和目的主机的地址。

定义常量

#define EPT_IP   0x0800    /* type: IP */
#define EPT_ARP   0x0806    /* type: ARP */
#define EPT_RARP 0x8035    /* type: RARP */
#define ARP_HARDWARE 0x0001    /* Dummy type for 802.3 frames */
#define ARP_REQUEST 0x0001    /* ARP request */
#define ARP_REPLY 0x0002    /* ARP reply */

定义以太网首部
typedef struct ehhdr 
{
unsigned char eh_dst[6];   /* destination ethernet addrress */
unsigned char eh_src[6];   /* source ethernet addresss */
unsigned short eh_type;   /* ethernet pachet type */
}EHHDR, *PEHHDR;

定义以太网arp字段
typedef struct arphdr
{
//arp首部
unsigned short arp_hrd;    /* format of hardware address */
unsigned short arp_pro;    /* format of protocol address */
unsigned char arp_hln;    /* length of hardware address */
unsigned char arp_pln;    /* length of protocol address */
unsigned short arp_op;     /* ARP/RARP operation */

unsigned char arp_sha[6];    /* sender hardware address */
unsigned long arp_spa;    /* sender protocol address */
unsigned char arp_tha[6];    /* target hardware address */
unsigned long arp_tpa;    /* target protocol address */
}ARPHDR, *PARPHDR;

定义整个arp报文包,总长度42字节
typedef struct arpPacket
{
EHHDR ehhdr;
ARPHDR arphdr;
} ARPPACKET, *PARPPACKET;

ARP请求包的分析:如下所示为一个ARP请求包

0000   ff   ff    ff    ff   ff   ff 00 0c f1 d4 d9 60 08 06 00 01 ...........`....
0010   08 00 06 04 00 01 00 0c f1 d4 d9 60 c0 a8 01 0f ...........`....
0020   00 00 00 00 00 00 c0 a8 01 02                              ..........
根据定义,头6个字节是以太网目的地址 ff ff ff ff ff ff 这是一个广播地址,全网下的所有终端都能接收到,紧跟着的6个字节是以太网源地址,即发送者的MAC地址( 00 0c f1 d4 d9 60 是我的MAC地址)。

帧类型0806占两个字节,到这里以太网帧头就结束了。0806指的是后面的数据是属于arp包的。

接着分析ARP包头。头两个字节是硬件类型 00 01,接着两个字节是协议类型,即ARP使用的是IP协议代号08 00硬件地址长度和协议地址长度分别是6和4。这与ARP报文格式是对应的。后面的2个字节OP指示当前包是请求包还是应答包,对应的值分别是0x0001和0x0002。原始数据里是00 01所以这是一个请求包,然后6个字节又是发送者MAC地址00 0c f1 d4 d9 60 ,后面4个字节是发送者IP地址c0 a8 01 0f ,转换成点分十进制格式即192.168.1.15,这是我的IP,接下来的6个字节留空,00 00 00 00 00 00 在arp请求包里也可以是其他数据,因为稍后IP地址为c0 a8 01 02 (192.168.1.2)会把自己的MAC地址填充进这6个字节中。
填充完后,arp包里的发送者硬件地址|目标硬件地址和以太网首部的以太网目的地址|以太网源地址正好对调。最后把这个封装好的ARP包发送出去,这样一个来回就可以让两台终端互相知道对方的IP和MAC。

ARP欺骗的3种基本方式:

1. 主机C冒充网关欺骗主机B;

2. 主机c冒充主机B欺骗网关;

3. 主机C同时欺骗主机B和网关,实现数据中转,并监听到所有主机B的数据。

PT下仿真如下:

这是使用的是Ethernet V2 MAC帧,然后封装ARP帧。另一台机器会返回:

这样两台PC都知道ip和MAC地址了。

ARP协议的报文格式相关推荐

  1. ICMP协议及报文格式

    摘自:<深入理解计算机网络> 王达著 机械工业出版社 相关知识链接 1. IPV4数据报头部格式请点击这里 2. IPv6数据报头部格式请点击这里 3. IPv4数据报的封装与解封装请点击 ...

  2. 常用应用层协议的报文格式

    常见应用层协议的报文格式 1.常用应用程序的端口号 2.HTTP的报文格式 1.常用应用程序的端口号 名称 应用层协议 端口 运输层协议 说明 超文本传输协议 HTTP 80 TCP 域名解析系统 D ...

  3. MQTT协议 -- 消息报文格式

    虽然学习协议是枯燥的,但是熟悉协议本身却是很重要的事情.如果能把其细节弄清楚,并且配合一些实验来学习,就不会那么枯燥了. 消息报文格式 MQTT协议是应用层协议,需要借助TCP/IP协议进行传输,类似 ...

  4. HTTP协议【报文格式】

    文章目录 HTTP协议 什么是HTTP协议 HTTP协议格式 抓包工具的使用 HTTP请求 URL URL的组成 URL encode HTTP请求的报文格式 HTTP响应的报文格式 HTTP方法 G ...

  5. 互联网协议 — TCP — 报文格式

    目录 文章目录 目录 TCP 传输控制协议 TCP Header TCP 的分段与拼接 基于硬件卸载的分段与组装 TSO(TCP Segmentation Offload) GSO(Generic S ...

  6. 互联网协议 — UDP — 报文格式

    目录 文章目录 目录 UDP 协议 UDP Header IP & UDP Header UDP Fragment UDP 协议 UDP(User Datagram Protocol,用户数据 ...

  7. 计算机网络实验arp协议分析,计算机网络ARP地址协议解析实验报告

    计算机网络ARP地址协议解析实验报告 (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 计算机网络实验报告.实验目的:1. 掌握ARP协议 ...

  8. 网络协议:ARP协议

    一 ARP协议 ARP协议: 地址转换协议,即Address Resolution Protocol缩写,主要用于向局域网查找指定IP地址的MAC地址. 每一个主机或者路由器都会维护一个ARP高速缓存 ...

  9. 网络协议实验四 ARP 协议分析实验

    实验四 ARP 协议分析实验 2.2 ARP 协议分析实验 1.ARP 协议介绍 ARP 是地址解析协议 (Reverse Address Resolution Protocol)的缩写,负责实现从I ...

最新文章

  1. 深入全面阐释Struts 2的方方面面
  2. centos7删除符号链接_技术|在 Linux 中怎样移除(删除)符号链接
  3. opencv 使用cvload加载xml出现错误原因解析及方法
  4. js slice 参数为负值
  5. nuxt.js的核心代码_Nuxt.js中的通用应用程序代码结构
  6. CCF201612-2 工资计算(100分)
  7. 控制自己的贪念,提升自己的能力
  8. 论文精读—XGBoost paper
  9. 关于X WindowSystem 、gnome、以及安装vncserver
  10. vue项目,路由跳转页面后滚动条自动回到顶部
  11. Synopsys Mentor Candence
  12. JavaME开发环境的搭建
  13. 绘图板应用讲解计算机,如何用数位板在电脑上画画?5个板绘使用技巧分享!...
  14. 计算机教室如何防火,校园防火及火灾逃生自救安全常识
  15. An error occurred.Faithfully yours, nginx
  16. 支配节点树及其构建算法 Dominator-tree and its Construction Algorithms
  17. 比亚迪--一文看懂--家用新能源汽车产品线
  18. 解决vue用ckplayer播放器pc端可以正常使用但是移动端提示:please use the http protocol to open the page
  19. Mybatis中resultMap和resultType的区别
  20. TestLink1.6.0安装说明

热门文章

  1. maven java 配置文件路径_Maven 的配置文件路径读取
  2. java junit 运行_appium+java+junit demo运行
  3. linux vi 清除所有,Vi命令:如何删除全部内容
  4. 新手学习单片机最常见的六大误区,你进坑了吗?
  5. PTA团体程序设计天梯赛-L2-019 悄悄关注
  6. zzuli 20级新生周赛(1)题解
  7. 链表的基本操作(c++实现)
  8. 图论 ---- F. The Shortest Statement (最短路的性质 + 任意两点间最短路 + 图转树)
  9. java客服系统_阿里Java内部资料:2020最全Java技术栈(架构篇+算法篇+大数据)
  10. 字符串的html语言,html语言解析为属性字符串NSMutableAttributedString