Определите оставшийся TTL многоадресного пакета в Java - PullRequest
1 голос
/ 12 ноября 2009

Если у меня есть Java-программа, которая прослушивает многоадресные данные, как я могу узнать, каков оставшийся TTL входящей дейтаграммы?

Я знаю, как установить TTL для отправляющего многоадресного сокета, но я хочу знать оставшиеся TTL прибывающего пакета.

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Что такое прибывающий пакет? На самом деле дейтаграмма или пакет UDP могут быть разделены на несколько IP-пакетов, которые поступают с разными TTL, если они маршрутизируются по-разному. В любом случае (разделенный или нет) Java не предоставляет доступ к заголовку IP.

1 голос
/ 17 ноября 2009

Если вы получаете дейтаграммы UDP с необработанным сокетом, вы можете проверить TTL (или что-либо еще в заголовках IP или UDP). Хотя есть много ошибок:

  • Raw Sockets не являются нативными для Java (хотя доступно по крайней мере одно многоплатформенное стороннее дополнение: http://www.savarese.org/software/rocksaw/index.html).
  • В большинстве операционных систем у вас должны быть права доступа root или права администратора для использования необработанных сокетов
  • Если вы хотите использовать также данные UDP, вам придется самостоятельно выполнять контрольные суммы и повторную сборку фрагментированных дейтаграмм ... а также, возможно, встретиться с различными TTL между фрагментами (как сказал jambjo).
0 голосов
/ 12 ноября 2009

Я посмотрел (как я полагаю, вы тоже), но не смог найти хороший Java API для этого.

TTL является 9-м целым байтом в дейтаграмме IPv4. Что произойдет, если вы выведите 9-й байт DatagramPacket из входящей дейтаграммы? Это похоже на значение TTL? Или заголовки из дейтаграммы IP недоступны в DatagramPacket, только часть данных дейтаграммы IPv4?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...