Как получить TTL UDP-пакета в Java? - PullRequest
5 голосов
/ 25 ноября 2010

Я использую приложение Java для отправки пакетов UDP на устройство Android. Там у меня есть другое Java-приложение, которое получает эти UDP-пакеты и отображает их данные - очень просто.

Сейчас я работаю над некоторыми алгоритмами маршрутизации - поэтому было бы неплохо узнать, сколько прыжков сделал UDP-пакет с момента его отправки. Моя идея состоит в том, чтобы просто прочитать TTL (время жизни) значение пакета и отобразить его. Знаете ли вы, возможно ли это с чистой Java? Класс DatagramPacket вообще не дает никаких подсказок.

Полагаю, это невозможно, потому что эта информация уже была удалена на нижнем уровне, но я просто хочу быть уверен. : -)

Ответы [ 3 ]

3 голосов
/ 25 ноября 2010

Поле TTL , как вы знаете, является функцией базового протокола IP (при его использовании), а не UDP.Поэтому имеет смысл не видеть его в API-интерфейсе DatagramPacket.Тем не менее, я думаю, что вы правы;обычно невозможно получить доступ к IP-пакетам через API уровня дейтаграмм: s.Вы, вероятно, должны посмотреть на захват пакета.

1 голос
/ 25 ноября 2010

Это часть IP-заголовка и устанавливается из сокета, по-видимому, только для многоадресных сокетов. Проверьте этот ответ:

Управление Java IP TTL?

0 голосов
/ 31 июля 2018

Для вашей цели, если я правильно понял, было бы достаточно манипулировать TTL отправителя;например, установите TTL отправляющего сокета на 1,2,3,4,5, и для каждого отправляемого отправьте одно сообщение с содержимым «1», «2», «3», «4» или «5» и т. д.отсутствует на приемнике ...

...