工具是 wireshark,window平台
我的过滤条件,接收 icmp 或者 arp包,并且MAC地址为我的网卡地址,这就只显示我需要看的数据了
(icmp or arp) and eth.addr==78:45:c4:2c:62:d9
本机的ARP缓存的基本操作命令
arp -a
arp -d *
arp -s
例如
本机IP 192.168.0.162 MAC 78 45 C4 2C 62 D9
目标IP 192.168.0.161 MAC 60 EB 69 F6 9D F2
先情况ARP 缓存 arp -d *
然后 ping 192.168.0.161
这时因为没有了ARP缓存,所以先发一个ARP请求包
ff ff ff ff ff ff 广播地址
78 45 c4 2c 62 d9 本机MAC
08 06 0x0806 表示 ARP 请求 (以上14byte为以太网头部)
00 01 表示 Eth 硬件类型
08 00 表示 IP 协议类型,属于IP包
06 6字节MAC
04 IPV4
00 01 1 请求, 2 应答
78 45 c4 2c 62 d9 本地MAC
c0 a8 00 a2 本地 IP
00 00 00 00 00 00 目标MAC,因为请求,所以全0
c0 a8 00 a1 目标IP
收到了一帧回应,各个位的含义和上面相同,除了OP
78 45 c4 2c 62 d9
60 eb 69 f6 9d f2
08 06
00 01
08 00
06
04
00 02 OP 2表示应答
60 eb 69 f6 9d f2
c0 a8 00 a1
78 45 c4 2c 62 d9
c0 a8 00 a2
00 00 00 00 00 00 PAD,够60byte一帧
00 00 00 00 00 00
00 00 00 00 00 00
从上面可以看出,这样一来,ARP请求之后就得到了MAC地址和IP地址的对应关系了。
接着封装 ICMP报文,PING说白了就是发ICMP报文。ICMP包的封装为
以太网包(14byte)+ IP包头(20byte)+ ICMP包
60 eb 69 f6 9d f2 以太网包,目标MAC
78 45 c4 2c 62 d9 源 MAC
08 00 IP 包类型
45 4表示版本4,5表示头长度 4*5 = 20字节
00 TOS服务类型,默认为0
00 3c 总长度 60byte
5a 19 标示
00 00 位置,片位移都是0,默认
40 生存时间 64MS
01 协议 ICMP
9e 14 头部 checksum
c0 a8 00 a2 源 IP
c0 a8 00 a1 目标IP,结束了,可选数据没有,所以一共20字节的IP头
接着就是ICMP头了
08 类型 类型8,代码0表示 PING请求,类型0表示ping应答
00 代码
33 5c 校验和
02 00 标识
18 00 序号
61 62 63 64 65 6667 68 69 6a 6b 6c 6d 6e 以下为数据
6f 70 71 72 73 74 75 76
77 61 62 63 64 65 66 67 68 69