我正在寻找一种方法来进行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。
答案 0 :(得分:5)
为什么你只是签署applet?是不是问题实际上你不知道如何签署applet?如果是,请从这里开始:jarsigner。 Here是一个更清晰的教程。
实际上没有比实际在客户端计算机上运行某些代码和/或命令更简单/更好的解决方案。 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;。