ICMP协议分析

TCP/IP协议

Posted by Pele on March 19, 2022

ICMP 报文分析

理论

互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于网际协议(IP)中发送控制消息,提供可能发生在通信环境中的各种问题反馈。通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。 —— WikiPedia

ICMP是在 RFC 792 中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。

虽然ICMP是包含在IP数据包中的,但是对ICMP消息通常会特殊处理,会和一般IP数据包的处理不同,而不是作为IP的一个子协议来处理。在很多时候,需要去查看ICMP消息的内容,然后发送适当的错误消息到那个原来产生IP数据包的程序,即那个导致ICMP消息被发送的IP数据包。

image-20220319210429428

抓包测试

ping命令

在Windows Shell 中使用ping命令向局域网内的主机发送ICMP报文,并使用WireShark捕获

image-20220319210008501

请求报文

image-20220319211107393

  • Type : 08

  • Code : 00

    • 0800 表示这是一个 请求回显报文

    image-20220319211422581

  • 数据部分为一串ASC码image-20220319211958223

回复报文

image-20220319212111124

  • Type : 00

  • Coed :00

    • 该报文为Ping指令的echo响应

    • image-20220319212213143

不可达差错

image-20220319212511346

  • Type: 03
  • Code: 03
    • 0303表示这是一个目标端口不可答报文
    • image-20220319212825274
  • image-20220319213026808
    • 并且发现这个ICMP报文里还有一个UDP报文,从192.168.137.249的65046端口到126.255.110.50的20768端口
    • 所以这个ICMP差错报文是上一个UDP报文未到达目标端口的回显报文

tracert命令

使用Windows Shell执行tracert命令,使用wireshark命令捕获icmp报文

image-20220322133506970

image-20220322135919052

在抓包时发现,我抓到的ICMP报文里竟然有两个IPV4首部,我顿时感到事情不简单。

image-20220322140102105

image-20220322140155553

分析第一个IPv4首部,这里出现的src源地址并不是抓包过程中看到的10.200.49.95,而是10.136.8.139

image-20220322140304137

image-20220322140346436

查看电脑网卡配置可知,10.200.49.95属于一张虚拟网卡My VPN Link,而10.136.8.193属于电脑的以太网网卡。

image-20220322140815638

image-20220322140958652

我推测这是因为寝室的校园网使用的是L2TP拨号上网的形式,所有的数据包都要走虚拟网卡才能通过以太网口访问外网。前面出现的目标地址192.168.113.1 正好是拨号上网的服务器地址

继续对tracert中的ICMP报文进行分析

第一个报文

image-20220322141641360

  • IPv4 首部部分

    • TTL:1
    • Protocol: ICMP
  • ICMP 部分

    • Type: 08

    • Code: 00

      (这是一个请求回显报文)

回显报文

image-20220322142145504

  • Type: 11

  • Code: 0

    image-20220322142234655

    • 1100表示报文类型为TTL超时报文,并且在这个ICMP报文中还包含了一个ICMP报文,即上一个发自该主机的ICMP请求回显示报文

image-20220322142710321

之后就是重复性的每次把TTL+1,然后发送三个一样的ICMP请求回显报文

到达目标地址

image-20220322143024838

在ttl为22时,ICMP请求回显报文成功到达了bing.com的主机地址204.79.197.200

image-20220322143230046

  • Type: 0

  • Code:0

    这是一个echo响应报文

  • Response time:41.058 ms