我正在寻找一种在客户端(即在浏览器中)进行路由跟踪的方法。

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

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

编辑:我刚刚发现它已使用Java小程序完成: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应用程序。

最佳答案

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

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

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

10-06 07:10