2010-11-25 2 views
5

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

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

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

+0

Возможный дубликат [Определить оставшийся TTL пакета многоадресной передачи в Java] (http://stackoverflow.com/questions/1723429/determine-the-remaining-ttl-of-a-multicast-packet-in-java) – 2010-11-25 14:19:25

+0

(И ответ кажется, что в чистой Java невозможно получить оставшийся TTL, и что TTL только имеет смысл на уровне необработанного IP-пакета.) – 2010-11-25 14:20:19

ответ

2

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

1

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

Java control IP TTL?

+0

Вы можете использовать MulticastSocket вместо DatagramSocket для одноадресной передачи но вы по-прежнему не можете получить TTL пакета из него. Метод getTimeToLive() возвращает только TTL по умолчанию для * отправки *. – EJP 2010-11-25 23:16:38

Смежные вопросы