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

Fra*_*nck 18 javascript java actionscript traceroute client-side

我正在寻找一种方法来进行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.

Bal*_*usC 5

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

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

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


Mar*_*c B 5

您根本无法通过浏览器执行此操作。Javascript最多可以打开返回其原始服务器的连接以进行AJAX请求,但只能通过HTTP进行。Flash可以与任意主机通信,但前提是它们必须在原始服务器的crossdomain.xml文件中列出,并且只能通过TCP进行通信。Flash中的UDP支持显然尚待解决。

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

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

  • “您根本无法通过浏览器执行此操作。” -使用JNI的签名小程序除外。我很确定运行JNI的签名小程序可以执行任何操作。 (2认同)