Chinaunix首页 | 论坛 | 博客
  • 博客访问: 517619
  • 博文数量: 47
  • 博客积分: 1045
  • 博客等级: 准尉
  • 技术积分: 663
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-09 09:27
文章存档

2012年(47)

分类: 网络与安全

2012-05-21 11:13:11

 详细分析

结构e t h e r _ h e a d e r定义了以太网帧首部;结构a r p h d r定义了其后的5个字段,其信息
用于在任何类型的介质上传送A R P请求和回答; e t h e r _ a r p结构除了包含a r p h d r结构外,
还包含源主机和目的主机的地址。

定义常量

#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;

实例分析下,先看一个请求包

我把原始数据考了过来

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地址

真类型占两个字节 所以是 08 06 到这里以太网头就完了,08 06指的是后面的数据是属于arp包的

接着分析arp包。头两个字节是硬件类型 00 01 接着两个字节是协议类型arp使用的是ip协议代号08 00

硬件地址长度协议地址长度分别是6和4.这与arp报文格式是对应的(更详细信息可以参考TCP-IP详解卷1)

后面的2个字节op指的是这是一个请求包还是应答包,分别对应的值是0x0001和0x0002,原始数据里是  

00 01 所以这是一个请求包,然后6个字节又是发送者mac地址00 0c f1 d4 d9 60 ,后面4个字节是发送者ip

地址c0 a8 01 0f ,换成比较容易理解的10进制格式就是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包里的     发送者硬件地址|目标硬件地址   和 以太网首部的
                                       以太网目的地址|以太网源地址    对调(我把他们对齐了就是上下两个地址对调)

然后在把这个包发送出去,这样一次来回就可以让两台终端互相知道对方的ip和mac。

接着在看下应答数据包

头6个字节是本地的mac地址(00 0c f1 d4 d9 60)。

接着的6个字节就是对方的mac地址(00 40 d0 92 7c 1f),这样就知道了对方地址。加进缓存表

仔细看可以发现应答包比请求包对了18个字节,应答包有60个字节,后面的18个字节是填充字节,构造应答包是不用管,只是把arp包的op(操作类型选择)填充0x0002就可以了

未完待续......

......

继续分析下arp欺骗,这几天的研究成果。

先构造下网络环境 网关:192.168.1.1 mac: aa aa aa aa aa
主机B:192.168.1.2 mac:bb bb bb bb bb    主机c:192.168.1.15   cc cc cc cc cc(破坏者)

arp欺骗有3种基本方式 1. 主机C冒充网关欺骗主机B,
                                       2. 主机c冒充主机B欺骗网关。
                                      3.主机C同时欺骗主机B和网关,实现数据中转,并监听到所有主机B的数据)
详细信息参考收藏的另几篇文章,有详细说明。

 

 

 

ARP数据包的各种类型

总的说来,ARP数据包分两种,请求和应答。

以下是一些正常的ARP数据包。
1,下面是一个ARP请求包:
以太网 - II[0/14]
    目标地址:            FF:FF:FF:FF:FF:FF[0/6]
    源地址:                00:13:D4:70:ED:63[6/6]
    协议类型:              0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:            1(以太网)[14/2]
    协议类型:            0x0800[16/2]
    硬件地址长度:     6[18/1]
    协议地址长度:     4[19/1]
    操作类型:            1(ARP 请求)[20/2]
    源物理地址:         00:13:D4:70:ED:63[22/6]
    源IP地址:             192.168.0.200[28/4]
    目标物理地址:      00:00:00:00:00:00[32/6]
    目标IP地址:          192.168.0.222[38/4]

额外数据:[42/18]
    字节数:               18 bytes[42/18]


FCS - 帧校验序列:
FCS:0x1093A7B1(计算出的)
意思是:200要和222通信前就要先知道222的MAC地址。问谁是222?请告诉200.请注意以太网的地址是FF:FF:FF:FF:FF:FF,ARP协议中的目标物理地址是00:00:00:00:00:00

2,下面是一个ARP应答包
以太网 - II[0/14]
    目标地址:              00:13:D4:70:ED:63[0/6]
    源地址:                  00:19:21:CA:B7:08[6/6]
    协议类型:              0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:              1(以太网)[14/2]
    协议类型:                0x0800[16/2]
    硬件地址长度:         6[18/1]
    协议地址长度:         4[19/1]
    操作类型:                 2 (ARP 响应)[20/2]
    源物理地址:              00:19:21:CA:B7:08[22/6]
    源IP地址:                 192.168.0.222[28/4]
    目标物理地址:          00:13:D4:70:ED:63[32/6]
    目标IP地址:              192.168.0.200[38/4]

额外数据:[42/18]
    字节数:                  18

FCS - 帧校验序列:
FCS:0x01C929A9(计算出的)
意思是:222应答200.告诉200我的MAC地址是00:19:21:CA:B7:08。这样在双方的ARP缓存表中就有了对方的地址。他们就可以正常通信了。

这两种数据包在局域网中很普遍,可以是网关和其它机器发起请求,本机应答,也可以是本机向网关或别的机器发起请求,网关或别的机器应答。

3,下面这个ARP请求包,目的是为了检查局域网中是否与自己的IP有冲突。,如果网内与自己相同的IP,就会发出应答包。就是我们常看到的报IP冲突。(注意源IP和目的IP相同)

以太网 - II[0/14]
    目标地址:                      FF:FF:FF:FF:FF:FF[0/6]
    源地址:                         00:13:D3:B8:14:2D[6/6]
    协议类型:                     0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:                     1(以太网)[14/2]
    协议类型:                     0x0800[16/2]
    硬件地址长度:             6[18/1]
    协议地址长度:             4[19/1]
    操作类型:                     1(ARP 请求)[20/2]
    源物理地址:                00:13:D3:B8:14:2D[22/6]
    源IP地址:                    192.168.0.169[28/4]
    目标物理地址:              00:00:00:00:00:00[32/6]
    目标IP地址:                   192.168.0.169[38/4]

额外数据:[42/18]
    字节数:                        18 bytes[42/18]

FCS - 帧校验序列:
FCS:0x9A3BEC05(计算出的)

4,下面是一个网关或其它机器(装了特定软件)发出的一个广播包,目的是广播正确的网关地址。当然网关要有此功能才行,也是很多防ARP欺骗软件一个主要功能。注意数据包中的目标IP和目标物理地址格式。

以太网 - II[0/14]
    目标地址:       FF:FF:FF:FF:FF:FF[0/6]
    源地址:          00:19:E0:25:77:FF[6/6]
    协议类型:       0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:            1(以太网)[14/2]
    协议类型:            0x0800[16/2]
    硬件地址长度:     6[18/1]
    协议地址长度:     4[19/1]
    操作类型             2(ARP 响应)[20/2]
    源物理地址:        00:E0:FC:48:91:54[22/6]
    源IP地址:           192.168.0.1[28/4]
    目标物理地址:    01:01:01:01:01:01[32/6]
    目标IP地址:       1.1.1.1[38/4]

额外数据:[42/2]
    字节数:            2 bytes[42/2]

FCS - 帧校验序列:
FCS:0xCA212540(计算出的)


以下是一些不正常的ARP数据包。
不正常的ARP数据包总有一些特点,就是不真实性。有时是以太网地址与下面的ARP协议中的地址不一样,有时是ARP协议中的IP地址或MAC地址是假的。以下红色部分为假地址。

1,下面是让一个机器产生IP冲突的ARP应答包。(注意源和目标的IP相同,而源和目标的MAC不同)

以太网 - II[0/14]
    目标地址:                     00:13:D4:70:ED:63[0/6]
    源地址:                         AD:E8:48:02:6D:14[6/6]
    协议类型:                      0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:                     1(以太网)[14/2]
    协议类型:                     0x0800[16/2]
    硬件地址长度:              6[18/1]
    协议地址长度:              4[19/1]
    操作类型:                     2(ARP 响应)[20/2]
    源物理地址:                 AD:E8:48:02:6D:14[22/6]
    源IP地址:                     192.168.0.200[28/4]
    目标物理地址:              00:13:D4:70:ED:63[32/6]
    目标IP地址:                  192.168.0.200[38/4]

额外数据:[42/18]
    字节数:                       18 bytes[42/18]

FCS - 帧校验序列:
FCS:0x232FBD99(计算出的)

2,这是一个让200不能和156不能通信的ARP应答包,(注意200的MAC地址是假的)

以太网 - II[0/14]
    目标地址:                  00:14:2A:77:21:1C[0/6]
    源地址:                      07:46:31:01:AE:98[6/6]
    协议类型:                  0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:                 1(以太网)[14/2]
    协议类型:                 0x0800[16/2]
    硬件地址长度:          6[18/1]
    协议地址长度:          4[19/1]
    操作类型:                 2(ARP 响应)[20/2]
    源物理地址:             07:46:31:01:AE:98[22/6]
    源IP地址:                 192.168.0.200[28/4]
    目标物理地址:          00:14:2A:77:21:1C[32/6]
    目标IP地址:              192.168.0.156[38/4]

额外数据:[42/18]
    字节数:                    18 bytes[42/18]

FCS - 帧校验序列:
FCS:0x6016DF8D(计算出的)

3,下面是一个让200不能上网的ARP应答包,它告诉了200一个错误的网关地址。

以太网 - II[0/14]
    目标地址:               00:13:D4:70:ED:63[0/6]
    源地址:                   9E:87:A4:0A:30:5F[6/6]
    协议类型:               0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:              1(以太网)[14/2]
    协议类型:               0x0800[16/2]
    硬件地址长度:        6[18/1]
    协议地址长度:         4[19/1]
    操作类型:              2(ARP 响应)[20/2]
    源物理地址:          9E:87:A4:0A:30:5F[22/6](假的)
    源IP地址:              192.168.0.1[28/4]
    目标物理地址:       00:13:D4:70:ED:63[32/6]
    目标IP地址:          192.168.0.200[38/4]

额外数据:[42/18]
    字节数:                 18 bytes[42/18]

FCS - 帧校验序列:
FCS:0x2DFE1259(计算出的)

4,下面也是一个让200不能上网ARP应答包,它告诉网关(0.1)一个200的错误MAC。

以太网 - II[0/14]
    目标地址:                  9E:87:A4:0A:30:5F[0/6]
    源地址:                     00:13:D4:70:ED:66[6/6]
    协议类型:                  0x0806[12/2]

ARP - 地址解析协议[14/28]
    硬件类型:                  1(以太网)[14/2]
    协议类型:                   0x0800[16/2]
    硬件地址长度:            6[18/1]
    协议地址长度:             4[19/1]
    操作类型:                    2(ARP 响应)[20/2]
    源物理地址:                00:13:D4:70:ED:66 [22/6](假的)
    源IP地址:                    192.168.0.200[28/4]
    目标物理地址:            9E:87:A4:0A:30:5F [32/6](正确的)
    目标IP地址:                192.168.0.1[38/4]

额外数据:[42/18]
    字节数:                        18 bytes[42/18]

FCS - 帧校验序列:
FCS:0x2DFE1259(计算出的)


要识别不正常的ARP数据包,掌握正确的IP和MAC是很必要的。

阅读(5479) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

我是要饭的2012-05-22 22:01:43

常虫清: ARP与网关有什么关系?.....
兄弟,arp包一般是用于局域网,网关在局域网中的作用多数要用到arp包。具体的 你需要,看一些网关的知识。讲的不是很清楚,望包涵!

我是要饭的2012-05-22 22:01:40

常虫清: ARP与网关有什么关系?.....
兄弟,arp包一般是用于局域网,网关在局域网中的作用多数要用到arp包。具体的 你需要,看一些网关的知识。讲的不是很清楚,望包涵!

常虫清2012-05-21 22:05:56

ARP与网关有什么关系?