9

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

 2 years ago
source link: https://www.v2ex.com/t/815287
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

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

  amiwrong123 · 8 小时 18 分钟前 · 566 次点击

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

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

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

16 条回复    2021-11-14 22:19:37 +08:00

senghoo

senghoo   7 小时 6 分钟前

ping ( ICMP Echo)没有, 他的 Payload 是 abcd....
其他的比如( Destination unreachable )。这部分是有 IP 头部和其他 8 字节内容。

xarthur

xarthur   6 小时 57 分钟前

完全没看懂这个中文是什么意思……感觉是翻译的问题。
随便查了一个英文的说法是
1. Type (类型)一个字节,用来表示 ICMP 包的类型
2. Code (代码)一个字节,一般用来表示报文的类型和提供关于出错类型的附加信息
3. Checksum (校验码) 2 个字节,用来校验报文
4. Pointer (指针) 4 个字节,用来指出原始 IP 报文中出错的位置
5. 数据部分,IPv4 下是 72 字节,IPv6 下是 160 个字节,内容是有错误的 IP 报文

dendi009

dendi009   6 小时 56 分钟前

wireshark 鼠标直接点 消息释义,比如 Internet Control Message 中的 Type:8 ( 8 请求 0 应答)。就能对找到对应的位。61 、62 、63 这些不是无意义, 是你打开方式不对,看对应位置,对应组合表达不同的约定意思。

dendi009

dendi009   6 小时 50 分钟前

@dendi009 ICMP 指定报文大小的情况( ping -s )会追加 无意义数据到 协议内容后面的 data 数据里面。鼠标多点点就懂了

xarthur

xarthur   6 小时 43 分钟前

https://imgur.com/a/D16tTsl.jpg
手工构造了一个 host-unreachable 的请求,你可以看到,确实会带 IP 包的信息的,包括地址。

xarthur

xarthur   6 小时 41 分钟前

所以就像一楼说的,只是 ICMP Echo 的 payload 没有带而已。

amiwrong123

amiwrong123   6 小时 34 分钟前

@xarthur #5
老哥,你的图床我死活看不到。我好想看,却看不到~( PS:可以用这个图床 https://imgurl.org/)

另外,你是咋手工构造的呀😂有点神奇哦

xarthur

xarthur   6 小时 24 分钟前

@amiwrong123 顺便 ICMP 的主要作用是用来报告 IP 报文的错误,不过一般人手动用 ICMP 最多的时候还是 Echo 就是了……

amiwrong123

amiwrong123   6 小时 22 分钟前

@xarthur #8
看到了 12.12.12.12 就是 4 个 0C , 4 个 0C 后面的,就是我想要的 东西了。数了一下,payload 一共有 64 个字节。

即 IP 数据报的首部和前 8 字节 = 64 字节。哇,那 这个 IP 数据报的首部有 56 字节啊,好长啊

jedihy

jedihy   6 小时 20 分钟前

ping 不行的,只有 ICMP error 才会带传输层的头部。抓包 tracert 就能看到。

xarthur

xarthur   6 小时 16 分钟前

@amiwrong123 https://i.bmp.ovh/imgs/2021/11/4303fd586b8655a1.png
这张图你可能看的清楚点,4 个 0C (也就是 12.12.12.12 )之后就是我之前的发送报文( ICMP Echo )。
你注意看上面 Wireshark 给的报文结构

xarthur

xarthur   6 小时 14 分钟前

@amiwrong123 ICMP 报文的数据部分的内容就是一个 IP 报文被截取(前 72 或者 160 个字节,根据 IP 类型不同)

amiwrong123

amiwrong123   6 小时 10 分钟前

@xarthur
谢谢老哥,等会 我在我的 window 上也试一下~

xarthur

xarthur   6 小时 6 分钟前

@amiwrong123 我刚刚说错了一个地方,ICMP 数据部分最高是 72 ( IPv4 )和 160 ( IPv6 )个字节,不是必然有这么多字节。

amiwrong123

amiwrong123   1 小时 1 分钟前

@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 吗

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK