web-dev-qa-db-ja.com

ブラウザでtracerouteを実行することは可能ですか?

クライアント側、つまりブラウザでtracerouteを実行する方法を探しています。

私の知る限り、JavaScriptまたはFlashを介してICMP、UDP、またはTCPパケットを任意のTTL値で送信することはできません。 FlashがActionscriptのSocketクラスを介したTCP接続を許可していることは知っていますが、tracerouteの実装には役立たないようです。

ブラウザプラグインを開発する唯一の解決策はありますか?

[〜#〜] edit [〜#〜]:Javaアプレットで実行されていることがわかりました: http://www.codefromthe70s.org/traceroute.aspx

悪いニュースは、このアプレットは、基盤となるクライアントシステムのping実行可能ファイルからの出力を実際に解析するため、署名されたコードが必要なことです。このため、ユーザーはJavaアプリケーションの実行を許可するように求められますが、これは面倒です。

詳細はこちら: http://www.codefromthe70s.org/traceroute_explained.aspx

誰かが助けてくれるなら、私はまだもっと簡単な解決策を探しています。

編集2:ご回答ありがとうございます。それならJavaを使わなければならないと思います。

NaCl( http://code.google.com/p/nativeclient/ )はある種のtracerouteアプリをサポートするのだろうか。

20
Franck

ブラウザからこれを行うことはできません。 JavascriptはせいぜいAJAXリクエストに対して元のサーバーへの接続を開くことができますが、HTTP経由でのみ可能です。Flashは任意のホストと通信できますが、それらがクロスドメインにリストされている場合に限ります発信元サーバー上の.xmlファイル、およびTCP経由のみ。FlashでのUDPサポートは明らかに保留中です。

TracerouteとpingはどちらもICMPベースのプロトコルであり、FlashまたはJavascriptから作成/制御することはできません。また、どちらもカス​​タムパケットを作成するために「生の」アクセスが必要であり、これはブラウザ側では絶対に実行できません。これが、生のパケットアクセスにはroot権限が必要なため、「ping」がUnixシステムの「SUID」プログラムである理由です。

せいぜい、サーバー側の実装を実行して、出力をブラウザーに送信することができます。それでも、Webサーバーがrootとして実行されている可能性は低いため、Unixボックスのサーバー内プロセスからは実行できなかった可能性があります。システムのpingやtracerouteを実行し、出力をブラウザにリダイレクトする必要があります。

4
Marc B

justアプレットに署名してみませんか?実際には、アプレットに署名する方法がわからないという問題ではありませんか?もしそうなら、ここから始めてください: jarsignerここ はより明確なチュートリアルです。

実際には、クライアントマシンでコードやコマンドの一部を実行する実際によりも簡単で優れたソリューションはありません。 tracerouteは、実際にはクライアントマシンから発信する必要があります。

JavascriptとActionscriptは、セキュリティ上の制限のため、これを行うことはできません。彼らはウェブページの文脈でのみ生きています。 Silverlightでできるかもしれませんが、私をそれに固定しないでください。私はNETのことはしません。

5
BalusC

CoNetServ(Complex Network Services)ブラウザ拡張機能があります。ローカルマシンからブラウザで直接tracerouteを実行できます。 https://github.com/VojtechVitek/CoNetServ/wiki

Chrome拡張機能: https://chrome.google.com/extensions/detail/mmkpilpdijdbifpgkpdndpjlkpjkihee Firefoxアドオン: https://addons.mozilla.org/en-US/firefox/アドオン/ 181909 /


EDIT:両方ChromeとFirefoxはNPAPIライブラリの拡張機能へのバンドルを取り消しました/ add-残念ながら、上記はもう機能しません。

3
Vojtech Vitek

うーん...いいえ、セキュリティモデルのためです。

あなたmightプラグインを使用して特定のブラウザでそれを行うことはできますが、広く利用可能なものを使用する任意のブラウザではできません。

ここで間違っていることが証明されたいのですが。

1
Rich

少し遅れるかもしれませんが、将来の読書のために興味深いかもしれません(私のように:-D)。

Java 1.5には、isReachableメソッドを持つInetAdressクラスがあり、これを試すことができます。これをチェックして:

http://download.Oracle.com/javase/1.5.0/docs/api/Java/net/InetAddress.html#isReachable(int

0
mTorres
<script type="text/javascript">
        function runapp() {
        var domain = "10.10.35.1";
        var cmdLine = "tracert" +" " + domain; 
        var wshShell = new ActiveXObject("WScript.Shell"); 
        var out = wshShell.Exec(cmdLine); 
        var output1 = out.StdOut.ReadAll();
        document.getElementById('box').innerHTML += output1;
        }

     </script>

<div id="box" align="center"></div>
    <button onclick="runapp();">Click me!</button>

したがって、ActiveXのため、IEでのみ機能します。

Tracerouteを10.10.35.1まで実行し、id = "box"を使用してdivに出力を書き込みます。

アプレットを作成して署名する必要はありません。 Java from javascript。 スクリプトを作成しました を使用してActiveXまたはJavaでtracerouteを実行することができます。

OS Xでセキュリティ警告が表示されません。WindowsとLinuxで試して、何が起こるか教えてください:-)

UPD:Firefoxでのみ機能するようです

0
myfreeweb

サーバーでtracerouteを実行し、なんらかのajax呼び出しで結果を返すのはどうですか

0
Ilian Iliev