是否可以在浏览器中执行跟踪路由?

我正在寻找一种方法来执行跟踪路由客户端,即在浏览器中。

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

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

编辑:我刚刚发现它是用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/)是否会支持某种跟踪路由应用程序。


答案 1

您根本无法从浏览器中执行此操作。Javascript充其量可以为AJAX请求打开与其原始服务器的连接,但只能通过HTTP执行此操作。Flash可以与任意主机通信,但前提是它们列在源服务器上的跨域.xml文件中,并且只能通过TCP。Flash 中的 UDP 支持显然处于挂起状态。

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

充其量,您可以执行服务器端实现并将输出发送到浏览器。即便如此,您也很可能无法在Unix盒子上的服务器内进程中执行此操作,因为Web服务器不太可能以root身份运行。您必须执行系统 ping 和/或跟踪路由,并将输出重定向回浏览器。


答案 2

你为什么不直接在小程序上签名呢?问题是不是你不知道如何签署小程序?如果是这样,那么从这里开始:jarsigner这是一个更清楚的教程。

实际上,没有比在客户端计算机上实际运行一些代码和/或命令更简单/更好的解决方案了。跟踪路由实际上必须源自客户端计算机。

由于安全限制,Javascript 和 Actionscript 无法做到这一点。它们仅存在于网页上下文中。Silverlight也许可以做到,但不要把我寄托在上面。我不做NET的东西。