怎样用java实现traceroute啊?

怎样用java实现traceroute啊?,第1张

最简单的办法,直接调用CMD

try

{

Runtime.getRuntime().exec("cmd /c start ping 127.0.0.1")

}

catch (Exception ex)

{

System.out.println(ex.getMessage())

}

ping的过程可以显示在本地的办法

import java.io.*

public class Ping

{

public static void main(String args[])

{

String line = null

try

{

Process pro = Runtime.getRuntime().exec("ping 127.0.0.1 ")

BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()))

while ((line = buf.readLine()) != null)

System.out.println(line)

}

catch (Exception ex)

{

System.out.println(ex.getMessage())

}

}

}

traceroute实现过程中使用哪些技术

1、Traceroute命令基本功能

该命令用于测试两个TCP/IP系统之间的网络层连通性和显示传输路径中每一跳地址,又称为路径跟踪,如果Traceroute命令测试成功,我们能够观察到从源主机目的主机之间的一条完整的通信路径,能够明确的观察到路径的每一跳信息;该命令还能准确输出测试包到每一跳的通信延迟时间。

如果测试失败,也能够明确定位是哪一跳设备不能正常转发,该工具还能够测试路由是否选择最佳路径,是否存在非对称路径等问题,在复杂拓扑下具有更强大的测试能力。

2、Traceroute命令基本原理

当路由器收到一份I P数据报,如果其T T L字段是0或1,则路由器不转发该数据报(接收到这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。但是在通常情况下,系统不应该接收T T L字段为0的数据报)。相反,路由器将该数据报丢弃,并给信源机发一份I C M P“超时”信息。

Traceroute的 *** 作过程:它发送一份T T L字段为1的I P数据报给目的主机。处理这份数据报的第一个路由器将T T L值减1,丢弃该数据报,并发回一份超时I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后Traceroute程序发送一份

T T L值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到T T L值为1的I P数据报,也不会丢弃该数据报并产生一份超时I C M P报文,这是因为数据报已经到达其最终目的地。

Traceroute程序发送一份U D P数据报给目的主机,但它选择一个不可能的值作为U D P端口号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的U D P模块产生一份“端口不可达”错误的I C M P报文。这样,Traceroute程序所要做的就是区分接收到的I C M P报文是超时还是端口不可达,以判断什么时候结束(收到端口不可达ICMP报文即为到达了目的主机)。

3、结束语

通过本文的介绍,我们可以了解到Traceroute命令使用UDP高端口向目的主机依次发送多组探测包,通过逐次增加探测包TTL的方法探测通信路径中的每一跳节点,中间节点响应源主机ICMP超时消息,目的主机响应源主机ICMP端口不可达消息。源主机通过接收这些ICMP消息获知了从源到目的的每一跳地址。

如果通过互联网进行Traceroute测试可能不能得到完整的中间节点信息,这是由于有些节点部署有安全策略,拒绝了traceroute的udp端口或ICMP报错消息的通过。

通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。

当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,

但基本上来说大部分时候所走的路由是相同的。

linux系统中,我们称之为traceroute,在MS Windows中为tracert。

traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。

一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。

说明:

记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q的默认参数。

探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。

有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。

出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。

当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;

您可以加-n 参数来避免DNS解析,以IP格式输出数据。

如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。

如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;

但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。

说明:

Traceroute的工作原理:

Traceroute最简单的基本用法是:traceroute hostname

Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。

首先,traceroute送出一个TTL是1的IP datagram

(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,

当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,

所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息

(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,

便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,

发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,

这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,

该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?

Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),

所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,

而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。

Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。

每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12113885.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存