ICMP协议和ARP地址解析协议-9.23
ICMP协议
1、概念:
- ICMP(Internet control message protocol),消息控制协议
- 为了方便网络连通性测试和网络路径优化,配合网络联合运作
- 工作在TCP/IP协议栈的网络层
2、功能:
①.询问报告
- 测试网络三层连通性的回声请求(echo request)和回声应答(echo reply)
- ICMP是有去有回的双向连通协议
②.差错提示
- 在报文出现问题的情况下,返回原因提示
- ICMP报文结果统计如下:
| 返回代码 | 内容 | 详细解释 |
| 0 0 | echo reply | 正确接收返回 |
| 3 0 | 网络不可达 | 没有找到目的地所在的网络(网段等) |
| 3 1 | 主机不可达 | 找到了目的地所在的网络,但是找不到对应的主机 |
| 3 2 | 协议不可达 | 能找到对应网络中的主机,但是三层协议中的报头无法识别(报文出现问题、传输数据包破损等) |
| 3 3 | 端口不可达 | 无法识别TCP/UDP端口 |
| 5 0 | 重定向 | 路径非最优路径,存在最优路径 |
| 8 0 | echo request | 正确发送请求 |
PS:
- 网络本身是不可靠的,在网络传输过程中,可能会发生许多突发事件并导致数据传输失败。网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。
③.路径优化
- 路由器通过自动判断来进行使用,通常基于ICMP重定向
3、报头分析
- ICMP消息类型大致分为两类:一类是差错报文,二类是查询报文
| 类型 | 代码 | 校验和 | |
| 由ICMP报文的类型决定 | |||
| ICMP数据部分 | |||

4、ICMP常用命令
①.ping
-
ping不仅可以差错提示,可以检测网络传输质量
-
ping + IP地址/域名
- 执行ping命令
-
ping -a + IP地址/域名
- 解析目的IP或者域名的主机名
-
ping -n(linux为-c) + 次数 + IP地址/域名
- 执行ping命令的次数,windows默认为4次,linux如果不结束会一直进行
②.tracert
-
在微软和华为中为tracert,思科、linux等为traceroute
-
tracert + IP地址/域名
- 检测包交换网络中经过路由器的接口ip和跳数
遇到网络问题时应该怎样排查?
-
可以先利用ICMP去进行ping测试,查看报文的返回代码。
-
如果没有办法找到问题,可以根据OSI七层模型从低层向高层排查:
- 首先检查物理层的传输介质,网线、网卡、网络适配器、路由器交换机等是否正常工作;
- 接着排查数据链路层,利用本地回环接口查看操作系统和网络设备间的关联关系是否出现异常;
- 然后排查网络层,查看IP地址、子网掩码、网关等是否配置正确;
- 之后排查传输层,查看端口号是否正确、是否正常映射,映射关系是否出现异常,是否发送的目标主机的应用程序不对
- 如果全没问题,就去排查应用层。
ARP地址解析协议
1、概念
- 将一个已知的的IP地址解析成MAC地址,以便在交换机上通过MAC地址进行通信。将IP地址和以太网深层次结合,把IP地址和MAC地址的映射关系完全对接起来。
- 在OSI模型中ARP协议属于链路层,在TCP/IP模型中ARP协议属于网络层。
- ARP只支持IPV4的地址解析,不支持IPV6
2、原理
- 在以太网通信体系中,只知道网络节点的IP地址,不知道以太网中的MAC地址,无法形成数据帧的封装。所以必须知道网络节点的MAC地址才可以正常封装报文完成网络传输。
3、ARP缓存表
描述:
- ARP缓存表是主机存储在内存中的IP和MAC的一一对应的表
基础命令:
- arp -a 查询arp缓存表
- arp -d 清除缓存表
ARP的工作机制:


- 假设A和B位于同一链路,不需要经过路由器的转换,主机A向主机B发送一个IP分组,主机A的地址是192.168.1.2,主机B的地址是192.168.1.3,它们都不知道对方的MAC地址是啥,主机C和主机D是同一链路的其他主机。

- 主机A想要获取主机B的MAC地址,通过主机A会通过广播的方式向以太网上的所有主机发送一个ARP请求包,这个ARP请求包中包含了主机A想要知道的主机B的IP地址的MAC地址。

-
主机A发送的ARP请求包会被同一链路上的所有主机/路由器接收并进行解析。每个主机/路由器都会检查ARP请求包中的信息,如果ARP请求包中的目标IP地址和自己的相同,就会将自己主机的MAC地址写入响应包返回主机A。
-
由此,可以通过ARP从IP地址获取MAC地址,实现同一链路内的通信。
跨网段的ARP通信:

-
A向C跨局域网发消息:
- A首先检查其ARP缓存,以确定是否有C的IP地址对应的MAC地址记录。由于A和C之前没有通信,缓存中不会有C的MAC地址
- A在其所在的网段内广播一个ARP请求,询问“谁是IP地址为C的MAC地址?”
- 由于A和C位于不同的网段,A的ARP请求会被路由器接收。路由器不会转发ARP广播请求到其他网段,因为它仅针对本地网段有效
- 路由器检查其路由表,确定C的IP地址应该通过哪个接口转发。路由器会准备将A的消息发送到C所在的网段
- 路由器在转发A的消息之前,需要知道C的MAC地址。因此,路由器会在C所在的网段内广播一个ARP请求,询问“谁是IP地址为C的MAC地址?”
- C收到路由器的ARP请求后,会发送一个ARP响应,包含其MAC地址
- 路由器收到C的ARP响应后,会更新其ARP缓存,将C的IP地址与其MAC地址关联起来
- 现在路由器有了C的MAC地址,它将A的消息封装在一个新的以太网帧中。这个帧的目的MAC地址是C的MAC地址,源MAC地址是路由器连接到C所在网段的接口的MAC地址
- 路由器将封装好的以太网帧发送到C所在的网段,C接收到这个帧后,就可以处理来自A的消息
-
在整个过程中,A的原始ARP请求并没有被路由器转发到C所在的网段,而是路由器在确定转发路径后,自己发出了一个新的ARP请求来获取C的MAC地址。然后,路由器将A的消息封装在新的以太网帧中进行转发,这就是所谓的“二次封装”。
ARP表项的生成方式
- 静态配置,手动添加,有效期为24小时
- 通过ARP协议自动学习,动态获取,有效期为4小时
ARP欺骗与攻击
ARP欺骗

原理:
-
在TCP/IP网络环境下,一个IP数据包到达目的地所经过的网络路径是由路由器根据数据包的目的IP地址查找路由表决定的,但IP地址只是主机在网络层中的地址,要在实际的物理链路上传送数据包,还需要将IP数据包封装到MAC帧后才能发送到网络中。同一链路上的哪台主机接收这个MAC帧是依据该MAC帧中的目的MAC地址来识别的,即除了同一链路上将网卡置为混杂模式的主机外,只有当某台主机的MAC地址和链路中传输的MAC帧的目的MAC地址相同时,该主机才会接收这个MAC帧并拆封为IP数据包交给上层模块处理。因此,每一台主机在发送链路层数据帧前都需要知道同一链路上接收方的MAC地址,地址解析协议ARP正是用来进行IP地址到MAC地址的转换的。同时为了避免不必要的ARP报文查询,每台主机的操作系统都维护着一个ARP高速缓存ARP Cache,记录着同一链路上其它主机的IP地址到MAC地址的映射关系。ARP高速缓存通常是动态的,该缓存可以手工添加静态条目,由系统在一定的时间间隔后进行刷新。
-
ARP协议虽然是一个高效的数据链路层协议,但作为一个局域网协议,它是建立在各主机之间相互信任的基础上的,所以ARP协议存在以下缺陷:
- ARP高速缓存根据所接收到的ARP协议包随时进行动态更新;
- ARP协议没有连接的概念,任意主机即使在没有ARP请求的时候也可以做出应答;
- ARP协议没有认证机制,只要接收到的协议包是有效的,主机就无条件的根据协议包的内容刷新本机ARP缓存,并不检查该协议包的合法性。
-
因此攻击者可以随时发送虚假ARP包更新被攻击主机上的ARP缓存,进行地址欺骗或拒绝服务攻击。
-
针对交换机根据目的MAC地址来决定数据包转发端口的特点,ARP欺骗的实现:
- 假设主机C为实施ARP欺骗的攻击者,其目的是截获主机B和主机A之间的数据,且主机C在实施ARP欺骗前已经预先知道A和B的IP地址。这时C先发送ARP包获得主机B的MAC地址,然后向B发送ARP Reply数据包,其中源IP地址为A的IP地址,但是源MAC地址却是主机C的MAC地址。主机B收到该ARP Reply后,将根据新的IP地址与MAC映射对更新ARP缓存。这以后当B给A发送数据包时,目标MAC地址将使用C的MAC地址,因此交换机根据C的MAC地址就将数据包转发到攻击者C所在的端口。同理,攻击者C发送ARP Reply使主机A确信主机B的MAC地址为C的MAC地址。在间歇的发送虚假ARP Reply的同时,攻击者C打开本地主机的路由功能,将被劫持的数据包转发到正确的目的主机,这时攻击者对主机A和B来说是完全透明的,通信不会出现异常,但实际上数据包却被C非法截获,攻击者C成为了“中间人”。
类型:
①.主机型欺骗

- 欺骗者主机冒充网关设备对其他主机进行欺骗
②.网关型欺骗

- 欺骗者主机冒充其他主机对网关设备进行欺骗
ARP攻击
- 主动攻击(会让被攻击的一方察觉到)
- 被动攻击(以窃听为主,尽量不让被攻击者察觉)
参考资料:
python代码进行ARP欺骗 - yxchun - 博客园 (cnblogs.com)

浙公网安备 33010602011771号