ICMP 报文包含 引起该 ICMP 报文首次生成的 IP 数据报的首部和前 8 字节?怎么验证 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
amiwrong123
V2EX    程序员

ICMP 报文包含 引起该 ICMP 报文首次生成的 IP 数据报的首部和前 8 字节?怎么验证

  •  
  •   amiwrong123 2021-11-14 15:03:10 +08:00 2456 次点击
    这是一个创建于 1435 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是上面这句话,ICMP 报文包含 引起该 ICMP 报文首次生成的 IP 数据报的首部和前 8 字节? 我试了一下 wireshark 抓包 ping 命令,https://blog.csdn.net/weixin_41656968/article/details/80595038 ,还是没看出来头绪。所以怎么通过抓包验证这句话?

    另外,“以便发送方能确定引发该差错的数据报”,这句话看起来好像很合理,但是我没有从抓包得到验证 上一句的证据,所以这句话也有点疑惑。

    我只发现,每一对 ICMP 请求和回应里,它们的 ICMP 的 payload 都是什么 61 62 63 ... 这样的无意义的东西。

    19 条回复    2021-11-15 10:40:42 +08:00
    senghoo
        1
    senghoo  
       2021-11-14 16:14:48 +08:00
    ping ( ICMP Echo)没有, 他的 Payload 是 abcd....
    其他的比如( Destination unreachable )。这部分是有 IP 头部和其他 8 字节内容。
    xarthur
        2
    xarthur  
       2021-11-14 16:23:38 +08:00
    完全没看懂这个中文是什么意思……感觉是翻译的问题。
    随便查了一个英文的说法是
    1. Type (类型)一个字节,用来表示 ICMP 包的类型
    2. Code (代码)一个字节,一般用来表示报文的类型和提供关于出错类型的附加信息
    3. Checksum (校验码) 2 个字节,用来校验报文
    4. Pointer (指针) 4 个字节,用来指出原始 IP 报文中出错的位置
    5. 数据部分,IPv4 下是 72 字节,IPv6 下是 160 个字节,内容是有错误的 IP 报文
    dendi009
        3
    dendi009  
       2021-11-14 16:24:49 +08:00
    wireshark 鼠标直接点 消息释义,比如 Internet Control Message 中的 Type:8 ( 8 请求 0 应答)。就能对找到对应的位。61 、62 、63 这些不是无意义, 是你打开方式不对,看对应位置,对应组合表达不同的约定意思。
    dendi009
        4
    dendi009  
       2021-11-14 16:30:57 +08:00
    @dendi009 ICMP 指定报文大小的情况( ping -s )会追加 无意义数据到 协议内容后面的 data 数据里面。鼠标多点点就懂了
    xarthur
        5
    xarthur  
       2021-11-14 16:38:24 +08:00
    https://imgur.com/a/D16tTsl.jpg
    手工构造了一个 host-unreachable 的请求,你可以看到,确实会带 IP 包的信息的,包括地址。
    xarthur
        6
    xarthur  
       2021-11-14 16:39:38 +08:00
    所以就像一楼说的,只是 ICMP Echo 的 payload 没有带而已。
    amiwrong123
        7
    amiwrong123  
    OP
       2021-11-14 16:46:47 +08:00
    @xarthur #5
    老哥,你的图床我死活看不到。我好想看,却看不到~( PS:可以用这个图床 https://imgurl.org/)

    另外,你是咋手工构造的呀有点神奇哦
    xarthur
        8
    xarthur  
       2021-11-14 16:51:25 +08:00
    https://i.bmp.ovh/imgs/2021/11/fde6026d72b3f82b.png
    @amiwrong123 iptables 和 nftables 都可以指定某个地址 reject 时候返回的 ICMP 类型
    xarthur
        9
    xarthur  
       2021-11-14 16:56:52 +08:00
    @amiwrong123 顺便 ICMP 的主要作用是用来报告 IP 报文的错误,不过一般人手动用 ICMP 最多的时候还是 Echo 就是了……
    amiwrong123
        10
    amiwrong123  
    OP
       2021-11-14 16:59:19 +08:00
    @xarthur #8
    看到了 12.12.12.12 就是 4 个 0C , 4 个 0C 后面的,就是我想要的 东西了。数了一下,payload 一共有 64 个字节。

    即 IP 数据报的首部和前 8 字节 = 64 字节。哇,那 这个 IP 数据报的首部有 56 字节啊,好长啊
    jedihy
        11
    jedihy  
       2021-11-14 17:00:49 +08:00
    ping 不行的,只有 ICMP error 才会带传输层的头部。抓包 tracert 就能看到。
    xarthur
        12
    xarthur  
       2021-11-14 17:04:56 +08:00
    @amiwrong123 https://i.bmp.ovh/imgs/2021/11/4303fd586b8655a1.png
    这张图你可能看的清楚点,4 个 0C (也就是 12.12.12.12 )之后就是我之前的发送报文( ICMP Echo )。
    你注意看上面 Wireshark 给的报文结构
    xarthur
        13
    xarthur  
       2021-11-14 17:06:56 +08:00
    @amiwrong123 ICMP 报文的数据部分的内容就是一个 IP 报文被截取(前 72 或者 160 个字节,根据 IP 类型不同)
    amiwrong123
        14
    amiwrong123  
    OP
       2021-11-14 17:11:16 +08:00
    @xarthur
    谢谢老哥,等会 我在我的 window 上也试一下~
    xarthur
        15
    xarthur  
       2021-11-14 17:15:08 +08:00
    @amiwrong123 我刚刚说错了一个地方,ICMP 数据部分最高是 72 ( IPv4 )和 160 ( IPv6 )个字节,不是必然有这么多字节。
    amiwrong123
        16
    amiwrong123  
    OP
       2021-11-14 22:19:37 +08:00
    @xarthur #8
    我有点不太会弄这个 iptables ,本着不懂就问的原则,我先按照 这文章里的 https://www.cnblogs.com/EasonJim/p/6851007.html 先新建一个 rules.v4 ,做完步骤。然后在 这文件添加一行啥呢?(我是用 Windows 的 Ubuntu 虚拟机)

    类似于
    iptables -A INPUT -p tcp -m tcp --dport 4444 -j DROP 吗
    xarthur
        17
    xarthur  
       2021-11-14 23:42:02 +08:00 via iPhone
    @amiwrong123 如果是虚拟机的话你要先把虚拟机的设置里把网卡改成桥接模式(这样虚拟机就有单独的 ip ,可以 ping )
    然后直接在命令行输入
    iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
    这样会禁止所有入站的包,并且返回 host-prohibited 类型的 icmp 报文,如果你要不同报文类型就改 reject-with 后面的参数,具体有哪些看文档。
    建议稍微看一眼 iptables 的用法。
    反正是实验不用持久化,不用写到文本里的。
    别忘了启用 ubuntu 的防火墙。
    hxysnail
        18
    hxysnail  
       2021-11-15 10:39:51 +08:00
    当 IP 包发生差错时,会将该差错包的头部以及前 8 个字节附到 ICMP 包的数据部分。

    之所以要附上差错包的前 8 个字节,是因为: IP 报文数据经常承载传输层的协议分组,前 8 个字节刚好是分组的头部。有了差错包的传输层分组头部,则可以进一步确定差错是访问目标主机的什么端口产生的。关于 ICMP 协议更具体的内容,可以参照这篇文章: https://fasionchan.com/network/icmp/ping/

    ping 命令也是利用 ICMP 报文的回显请求和回显响应报文来探测主机的。原理可以看下这篇: https://fasionchan.com/network/icmp/ping/
    hxysnail
        19
    hxysnail  
       2021-11-15 10:40:42 +08:00
    ICMP 协议的链接错了,应该是: https://fasionchan.com/network/icmp/icmp/
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3617 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 04:24 PVG 12:24 LAX 21:24 JFK 00:24
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86