需要探测链路的MTU,初步想法是手动构造一个ICMP报文,并设置不分片,逐步增大报文大小,当收到要求分片的错误信息时候便是MTU的大小.
因为是要重头构造,所以直接在python里调用command('ping -f')的不行.构造ICMP报文需要用到RAW SOCKET:
1.使用socket.IPPROTO_ICMP的时候内核接管了IP头默认分片没有方法设置DF为1.
2.使用socket.IPPROTO_RAW的时候自己构造的IP头如果DF为1就发不出去,DF为0才可以发出去.
总之RAW socket始终是自动分片的,这样就没有办法探测MTU了,出了RAW_SOCKET还有什么方法可以实现MTU探测?
1
thekll 2015-04-02 21:31:46 +08:00 via iPhone
|
2
geeklian 2015-04-02 21:53:44 +08:00
why not google?
|
3
geeklian 2015-04-02 22:00:58 +08:00 1
|
5
invite 2015-04-02 22:44:47 +08:00
你发送了多大的ICMP包?然后设置的DF为1?
|
7
dndx 2015-04-03 00:54:34 +08:00 1
|
8
ceyes 2015-04-03 01:06:11 +08:00 via Android
不是有 tracepath 么?
另,ping -M do 就是禁止分片。 |