- PR -

javaでtracert

1
投稿者投稿内容
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2007-03-23 16:52
【JDK1.3.1.20】

javaで"windowsで言うtracert"をやる方法はないでしょうか。
(ホップ数を計りたいのです。)
(windowsのプロセスを起動する方法は、なしで。)

どなたがご存知の方いらっしゃいましたら
お教えください。
よろしくお願いします。
Tasuku
大ベテラン
会議室デビュー日: 2006/09/14
投稿数: 106
お住まい・勤務地: tokyo
投稿日時: 2007-03-23 17:24
引用:

javaで"windowsで言うtracert"をやる方法はないでしょうか。
(ホップ数を計りたいのです。)
(windowsのプロセスを起動する方法は、なしで。)



tracert は traceroute を省略したものです。
システムコールでも関数でも何でもない、C なり何なりで
書かれたアプリケーションですので、
それを java でやりたいなら移植するしかないのでは?

そもそも traceroute が動いている仕組を理解されますか?
http://www.atmarkit.co.jp/fnetwork/netcom/traceroute/traceroute.html

RAWソケットでUDPパケットを生成すれば何とかなると思いますが、
IPに関する知識も必要になると思いますよ。
お犬様
ベテラン
会議室デビュー日: 2003/01/26
投稿数: 67
投稿日時: 2007-03-23 21:54
J2SE1.5 より古いものでは、ICMP を扱えないため無理です。

ホップ数だけであれば、J2SE1.5で追加されたInetAddress#isReachable(NetworkInterface,int,int)を使用すれば可能かもしれません。

余談ですが、 Sun の現在の実装(*)では、Windows上では常にICMP ECHO REQUESTを使用しません。ICMP&RAW socketが不安定とかコメントがあって、該当部分が #if 0 でカットされています。コメントには "We may revisit and enable this code in the future." と書かれているんですが……

(*)他社の実装や、Sun の将来の実装では ICMP ECHO REQUEST を使うかもしれません。その辺は実際に Wireshark 等でチェックするなりしないとわかりません。
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2007-03-24 10:02
お二方ともありがとうございます。

お犬様のおっしゃるとおりですね。
非常に参考になりました。
1

スキルアップ/キャリアアップ(JOB@IT)