Есть ли встроенная утилита или Linux для быстрого получения PMTU / MTU удаленной системы (предпочтительно менее 1 секунды)? Если да, то что это такое и какой синтаксис для этого требуется?
Сегодня поиск в Google мне не особо понравился, и единственное решение, которое я нашел, - это полноценная трассировка трассировки, которая может занять более 30 секунд.
Я нашел решение после долгих поисков. Просто собираюсь связать это здесь для всех, кого это волнует:
https://github.com/ValdikSS/p0f-mtu
У него есть API, который вы можете вызывать с полной поддержкой сокетов. Так что, хотя технически это демон, он делает свое дело.
Что я бы попробовал:
Пытаться этот скрипт nmap, который использует nmap
выполнить PMTUD. Не пробовал, не знаю, насколько быстро.
напишите небольшую программу, которая открывает TCP-соединение с включенным PMTUD, и считывает значение обратно из ядра. Потенциально это может быть довольно быстро. Я недостаточно знаю о том, как это сделать, чтобы рассказать вам больше, но вопрос, на который я указал в своем комментарии, содержит некоторые детали, которые должны помочь вам двигаться в правильном направлении.
если вы ограничены существующими командами оболочки, попробуйте параллельно отправлять эхо-запросы разного размера. ping -M do -s 1472 remote-host
отправит пакет размером 1500 байт (1472 байта данных + заголовки ICMP и IP). -M do
сообщает ему явно делать PMTUD. http://muzso.hu/2009/05/17/how-to-determine-the-proper-mtu-size-with-icmp-pings
вы упоминаете traceroute
- если вы пытаетесь выяснить где MTU ограничен, но хотите что-то быстрее, чем traceroute, попробуйте mtr; он отправляет группу пакетов с разным таймаутом параллельно, а не последовательно, как это делает traceroute.
К сожалению, у меня нет немедленного доступа к каким-либо системам с разными MTU, поэтому мои возможности для экспериментов ограничены.