Как получить TTL UDP-пакета в Java?
Я использую приложение Java для отправки пакетов UDP на устройство Android. Там у меня есть другое Java-приложение, которое получает эти UDP-пакеты и отображает их данные - очень просто.
Сейчас я работаю над некоторыми алгоритмами маршрутизации - поэтому было бы неплохо узнать, сколько прыжков сделал пакет UDP с момента его отправки. Моя идея состоит в том, чтобы просто прочитать TTL (время жизни) значение пакета и отобразить его. Знаете ли вы, возможно ли это с чистой Java? Класс DatagramPacket
не дает никаких подсказок вообще.
Я предполагаю, что это невозможно, потому что эта информация уже была удалена на более низком уровне, но я просто хочу быть уверен.:-)
3 ответа
Как вы знаете, поле TTL является функцией базового протокола IP (при его использовании), а не UDP. Поэтому имеет смысл не видеть его в API-интерфейсе DatagramPacket. Тем не менее, я думаю, что вы правы; обычно невозможно получить доступ к IP-пакетам через API уровня дейтаграмм:s. Вы, вероятно, должны посмотреть на захват пакетов.
Это часть IP-заголовка и устанавливается из сокета, по-видимому, только для многоадресных сокетов. Проверьте этот ответ:
Для вашей цели, если я правильно понял, было бы достаточно манипулировать TTL отправителя; например, установите TTL сокета-отправителя на 1,2,3,4,5, и для каждого отправляемого отправьте одно сообщение с содержимым "1","2","3","4" или "5" и т. д. Некоторые из них, вероятно, будут отсутствует на приемнике...