2010-11-25 7 views
5

Javaアプリケーションを使用して、AndroidデバイスにUDPパケットを送信しています。そこには、これらのUDPパケットを受信し、そのデータを表示する別のJavaアプリケーションがあります。JavaでUDPパケットのTTLを取得するには?

私はいくつかのルーティングアルゴリズムに取り組んでいます。そのため、UDPパケットが送信されて以来のホップ数を知ることは良いことです。私の考えはちょうどパケットのTTL(生存時間)値を読んでそれを表示することです。これが純粋なJavaで可能かどうか知っていますか?クラスDatagramPacketは何のヒントも全く与えていない。

この情報は既に下位レイヤーで削除されている可能性がありますが、私は確信しています。 :-)

+0

[Javaでのマルチキャストパケットの残りのTTLを判別する](http://stackoverflow.com/questions/1723429/determine-the-remaining-ttl-of-a-multicast-packet-in-java ) –

+0

(純粋なJavaでは残りのTTLを取得することはできず、TTLは生のIPパケットレベルで厳密にしか意味がないと答えているようです) –

答えて

2

TTL fieldは、(使用)基本的なIPプロトコルのではなく、UDPの特徴です。だから、それがDatagramPacket APIに表示されないようにするのは理にかなっています。しかし、私はあなたが正しいと思います。通常、データグラムレベルのAPIを介してIPパケットにアクセスすることはできません。おそらくパケットキャプチャを調べる必要があります。

+0

ありがとうございます - もちろんあなたは正しいです。私はこのフィールドがIPレイヤーでのみ利用可能であることを完全に忘れていました。 :-)基本的に、下層のパケットをキャプチャするまでは不可能です。 – mreichelt

1

これはIPヘッダーの一部であり、ソケットから設定されます。明らかにマルチキャストソケットの場合のみです。この回答を確認してください:あなたが知っているよう

Java control IP TTL?

+0

ユニキャスト用にDatagramSocketの代わりにMulticastSocketを使用できますそれでもパケットからTTLを得ることはできません。 getTimeToLive()メソッドは、* sending *に使用されるデフォルトのTTLを返します。 – EJP

関連する問題