In a case I can use only UDP
and ICMP
protocols, how can I discover, in bytes, the path MTU for packet transfer from my computer to a destination IP?
3 Answers
I believe what you are looking for, is easiest gotten via traceroute --mtu <target>
; maybe with a -6
switch thrown in for good measure depending on your interests.
Linux traceroute
uses UDP as a default, if you believe your luck is better with ICMP try also -I
.
A quick search with apropos mtu
on CentOS5 turned out:
tracepath
traces path to a network host discovering MTU along this path
This command even works unprivileged in user space.
-
I prefer this over
traceroute
since it returns a simple result at the end and I don't have to look for the last hop that returned a different MTU.– comfreakCommented Aug 14, 2017 at 17:22 -
Alas,
tracepath
doesn't let you choose which network interface to use. You can choose withtraceroute
(using-i
). Commented Feb 14, 2020 at 19:35
Under Python, you are just one install away:
pip install ofunctions.network
Then you can run the following python code
from ofunctions.network import probe_mtu
print(probe_mtu(target_IP))
This is the simplest syntax, but you may also force ICMPv6 or ICMPv4 discovery, and limit the minimum and maximum probe settings in order for the probing to happen faster.
Disclaimer: I am the author of ofunctions ;)
-
I guessed that you meant
print(probe_mtu("142.250.187.206"))
, but that just gave meValueError: Both sides of the argument list are unexpected results
. Did I misunderstand your instructions? Commented Dec 12, 2021 at 21:57 -
I just tried that code again. Works for me. What version of python and ofunctions.network do you use ? Commented Dec 17, 2021 at 10:04
-
-
I've just tried with Python 3.9.9 x64 on Win10 x64 without any trouble. There may be two solutions, or you don't have internet while trying this command (or at least ECHO request filtering somewhere), or your ping command is not standard. Can you give more details on your environment in order to replicate the issue ? Commented Dec 20, 2021 at 8:26
-
1It's pretty slow, but it works. If you want to see some progress, run tcpdump along side and see it binary searching (i believe) the value for the path mtu. Rough command:
sudo tcpdump -i any icmp -n
– ValerCommented Feb 7, 2022 at 15:39
ping -s $SIZE -c 1 -M dont
and lowering thatSIZE
value till it works, or just having a look at theICMP
returns viatcpdump
if we are talking ipv6 buttraceroute
has this built in I just realized.