我正在寻找一种在客户端(即在浏览器中)进行traceroute的方法。
据我所知,不可能通过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的协议,无法通过Flash或Javascript创建/控制。它们还都需要“原始”访问权限来构建自定义数据包,而这绝对不能在浏览器端完成。这就是为什么“ ping”在Unix系统上是“ SUID”程序的原因,因为原始数据包访问需要root特权。
充其量,您可以执行服务器端实现,并将输出发送到浏览器。而且即使那样,您也很可能无法通过Unix机器上的服务器内进程来执行此操作,因为Web服务器不太可能以root身份运行。您必须执行系统ping和/或traceroute,然后将输出重定向回浏览器。