是否可以在浏览器中执行traceroute?

时间:2010-02-01 14:43:31

标签: java javascript actionscript client-side traceroute

我正在寻找一种方法来进行traceroute客户端,即在浏览器中。

据我所知,通过Javascript或Flash发送任意TTL值的ICMP,UDP或TCP数据包是不可能的。我知道Flash允许通过Actionscript中的Socket类进行TCP连接,但它对于traceroute实现似乎没什么用。

是开发浏览器插件的唯一解决方案吗?

编辑:我刚刚发现它已经完成了Java applet:http://www.codefromthe70s.org/traceroute.aspx

坏消息是这个applet需要签名代码,因为它实际上解析了底层客户端系统的ping可执行文件的输出。因此,要求用户允许Java应用程序运行,这很麻烦。

此处有更多信息:http://www.codefromthe70s.org/traceroute_explained.aspx

如果有人可以提供帮助,我仍然在寻找一个更简单的解决方案。

编辑2 :感谢您的回答。我想我当时不得不选择Java。

我想知道NaCl(http://code.google.com/p/nativeclient/)是否会支持某种traceroute app。

8 个答案:

答案 0 :(得分:5)

为什么你只是签署applet?是不是问题实际上你不知道如何签署applet?如果是,请从这里开始:jarsignerHere是一个更清晰的教程。

实际上没有比实际在客户端计算机上运行某些代码和/或命令更简单/更好的解决方案。 traceroute确实必须来自客户机。

由于安全限制,Javascript和Actionscript无法执行此操作。它们仅存在于网页上下文中。 Silverlight可能会这样做,但不要指责我。我不做NET的东西。

答案 1 :(得分:4)

您无法通过浏览器执行此操作。 Javascript最多可以为其原始服务器打开连接以获取AJAX请求,但只能通过HTTP执行此操作。 Flash可以与任意主机通信,但前提是它们在原始服务器上的crossdomain.xml文件中列出,并且仅通过TCP再次列出。 Flash中的UDP支持显然正在等待。

Traceroute和ping都是基于ICMP的协议,无法通过Flash或Javascript创建/控制。他们也都需要'原始'访问来构建自定义数据包,这绝对不能在浏览器端完成。这就是为什么'ping'是Unix系统上的'SUID'程序,因为原始数据包访问需要root权限。

充其量,您可以执行服务器端实现并将输出发送到浏览器。即便如此,你很可能无法通过Unix机箱上的服务器内进程来实现,因为Web服务器不太可能以root身份运行。您必须执行系统ping和/或traceroute并将输出重定向回浏览器。

答案 2 :(得分:3)

有CoNetServ(复杂网络服务)浏览器扩展。它可以直接在浏览器中从本地计算机执行traceroute。 http://wiki.github.com/VojtechVitek/CoNetServ/

Chrome扩展程序:https://chrome.google.com/extensions/detail/mmkpilpdijdbifpgkpdndpjlkpjkihee Firefox插件:https://addons.mozilla.org/en-US/firefox/addon/181909/


编辑: Chrome和Firefox都撤销了将NPAPI库捆绑到扩展程序/附加组件中的功能。不幸的是,上述内容将不再适用。

答案 3 :(得分:1)

嗯......不,因为安全模型。

可能能够在具有插件的特定浏览器中执行此操作,但不能使用任何广泛可用的任意浏览器。

我想在这里被证明是错误的。

答案 4 :(得分:0)

如何在服务器上执行traceroute并使用某种ajax调用返回结果

答案 5 :(得分:0)

也许有点晚了,但对未来的读数可能很有意思(比如我的:-D)。

Java 1.5有一个带有isReachable方法的InetAdress类,您可以尝试。检查一下:

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

答案 6 :(得分:0)

您无需创建小程序并签名!可以从javascript使用java。 I made a script用于使用ActiveX或Java进行跟踪路由。

我在OS X上没有看到任何安全警告。在Windows和Linux上尝试并告诉我会发生什么: - )

UPD:似乎只适用于Firefox

答案 7 :(得分:0)

<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并将输出写入div,其中id =&#34; box&#34;。