Вопрос или проблема
В случае, если я могу использовать только UDP
и ICMP
протоколы, как я могу определить, в байтах, path MTU для передачи пакетов с моего компьютера на целевой IP?
Я думаю, что проще всего это сделать с помощью traceroute --mtu <target>
; возможно, с переключателем -6
, в зависимости от ваших интересов. Linux traceroute
по умолчанию использует UDP, если вы считаете, что вам повезет больше с ICMP, попробуйте также -I
.
Быстрый поиск с помощью apropos mtu
на CentOS5 дал следующие результаты:
tracepath
отслеживает путь к сетевому хосту, определяя MTU вдоль этого пути.
Эта команда даже работает без привилегий в пользовательском пространстве.
На Python вам нужно всего лишь установить один пакет:
python -m pip install ofunctions.network
Затем вы можете запустить следующий код на Python
from ofunctions.network import probe_mtu
print(probe_mtu(target_IP))
Это самый простой синтаксис, но вы также можете заставить работать обнаружение ICMPv6 или ICMPv4 и ограничить минимальные и максимальные настройки проб для более быстрого проведения проб.
В виде однострочной команды, чтобы определить реальный MTU для kernel.org
python -c "from ofunctions.network import probe_mtu; print(probe_mtu('kernel.org'))"
Отказ от ответственности: Я автор ofunctions 😉
Ответ или решение
Для определения максимального размера передаваемого пакета (MTU) между вашим компьютером и целевым IP-адресом, используя только протоколы UDP и ICMP, вы можете воспользоваться несколькими подходами.
-
Использование команды
traceroute
:На большинстве систем Linux вы можете использовать команду
traceroute
для определения MTU. Эта команда по умолчанию использует UDP, но для лучшей совместимости вы можете добавить опцию-I
, чтобы использовать ICMP. Пример команды:traceroute --mtu <целевой_IP> -I
При использовании этой команды система будет исследовать путь до целевого компьютера и определять максимальный размер пакетов, которые могут проходить через сетевые сегменты без фрагментации.
-
Использование команды
tracepath
:Команда
tracepath
также позволяет находить MTU на пути к целевому хосту. Это удобный инструмент, который можно выполнять без административных привилегий. Чтобы узнать MTU, выполните:tracepath <целевой_IP>
Результат этой командной строки предоставит информацию о каждом узле на пути и их значении MTU.
-
Использование Python:
Если вы предпочитаете программный подход, вы можете использовать Python, установив библиотеку
ofunctions.network
. Установите библиотеку с помощью следующей команды:python -m pip install ofunctions.network
Затем выполните следующий код для определения MTU:
from ofunctions.network import probe_mtu target_IP = '<целевой_IP>' print(probe_mtu(target_IP))
Вы также можете изменить параметры, используя дополнительные аргументы, чтобы настроить минимальные и максимальные значения при пробировании.
Для выполнения команды в одну строку, чтобы определить реальный MTU для
kernel.org
, используйте следующий код:python -c "from ofunctions.network import probe_mtu; print(probe_mtu('kernel.org'))"
Эти методы помогут вам эффективно определить параметр MTU между вашим компьютером и целевым IP-адресом. Убедитесь, что у вас есть необходимые права доступа и установлены все требуемые инструменты для выполнения команд.