Tracert有什么用途?
对ISP而言,设立Traceroute网关,将使网络服务提供商帮助用户建立并维持对服务商服务质量的信心。
服务质量高的ISP可以通过设立Traceroute网关,使用户了解其与网络连接以及数据传输的效率。当然,基础设施差,服务质量低的ISP是比较害怕提供这种服务。
因为,这样用户可以使用这一工具了解服务商网络连接情况。
在一台主机安装了相关的Traceroute的CGI程序后,您可以输入相应的目的主机的IP地址或者名字,就可以得到相关的数据。
应用
Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。前面说到,尽管ping工具也可以进行侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。
Traceroute收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。
主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据 报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。从而避开了ip头只能记录有限路由IP的问题。
实现
主叫方首先发出 TTL=1 的数据包,第一个路由器将 TTL 减1得0后就不再继续转发此数据包,而是返回一个 ICMP 超时报文,主叫方从超时报文中即可提取出数据包所经过的第一个网关地址。
然后又发出一个 TTL=2 的 ICMP 数据包,可获得第二个网关地址,依次递增 TTL 便获取了沿途所有网关地址。
需要注意的是,并不是所有网关都会如实返回 ICMP 超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可被管理员主动修改配置变为不返回 ICMP 报文。
因此 Traceroute 程序不一定能拿全所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。一直达到默认或用参数指定的追踪限制(maximum_hops)才结束追踪。
依据上述原理,利用了 UDP 数据包的 Traceroute 程序在数据包到达真正的目的主机时,就可能因为该主机没有提供 UDP 服务而简单将数据包抛弃,并不返回任何信息。
为了解决这个问题,Traceroute 故意使用了一个大于 30000 的端口号,因 UDP 协议规定端口号必须小于 30000 ,所以目标主机收到数据包后唯一能做的事就是返回一个“端口不可达”的 ICMP 报文,于是主叫方就将端口不可达报文当作跟踪结束的标志。
以上内容参考 百度百科-traceroute
java实现tracert (不调用CMD)
可以在程序中利用process类启动cmd然后将你想显示的以流的形式显示在cmd中
String cmd = “notepad”;
ProcessBuilder pb = new ProcessBuilder(“cmd.exe”);
Process p = pb.start();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(p
.getOutputStream()));
bw.write(cmd + “\n”);
bw.flush();
System.out.println(“Done”);
if (null != bw) {
bw.close();
}
请教如何用JAVA程序设计实现windows中的tracert功能
import java.net.*;
import java.io.*;
public class Whois extends Thread
{
public String traceCmdUnix = “tracert -h 10 “;
private StringBuffer result = null;
private void pingCmd(String command)
{
result = new StringBuffer();
try
{
Process p;
p = Runtime.getRuntime().exec(command);
readResult(p.getInputStream());
p.destroy();
} catch (Exception e)
{
e.printStackTrace();
}
}
private void readResult(InputStream in)
{
String line = null;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
try
{
while (!this.isInterrupted() (line = br.readLine()) != null)
{
// this.doResultLine(line+”\n”);
System.out.println(line);
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
br.close();
} catch (IOException e)
{
}
}
if (this.isInterrupted())
System.out.println(“*** Canceld ***”);
}
public static void main(String args[]) throws Exception
{
Whois MyObj = new Whois();
MyObj.traceCmdUnix = MyObj.traceCmdUnix + ” ” + “”;
MyObj.pingCmd(MyObj.traceCmdUnix);
}
}
java IP反查域名,我随意输入IP,能得到此IP下所有的域名,例子,思路,资料,什么都要
要解决这个问题,首先要明白域名与ip之间的联系。
我们平时在配置本地ip的时候,都会有一个dns,dns的作用就是将域名解析为ip后,找到对应的ip地址上对应的内容,然后在页面打开展示给你。
你现在想要通过ip来得到域名的话,有两种方式:
一种是你找到一个ip与域名对应的数据,然后根据这个数据来查找;
另外的话就是找一下,看看网络上是否有使用ip来查询并返回域名的接口。
通过这个接口来实现域名反查,但是这种接口一般都是专门做ip解析的公司内部使用的,像万网之类的,像ping和tracert返回的数据都是返回的ip的,不会有域名返回来的。
实现windows批处理ping和tracert的输出结果
先建立一个记录ip的记事本,比如在d:\ip.txt,在里面输入ip:
10.0.0.1
172.16.0.1
192.168.0.1
关闭保存。然后打开d:\1.txt,输入
setlocal enabledelayedexpansion
for /f “delims=” %%i in (‘type ip.txt^|find /v “”‘) do (
set a=%%i
ping !a!2.txt
type 2.txt |findstr /c:”(100% loss)”
if %errorlevel%==0 (echo 0ping.txt) else (echo 1ping.txt)
)
保存1.txt,退出,重命名为1.bat,这样只要运行1.bat,它自动在ip.txt中读取ip,然后ping看看能不能通,如果不通,也就是掉包率100% loss,就在2.txt中输入0,通就输入1.
tracrt的话,建立3.bat,在里面输入
setlocal enabledelayedexpansion
for /f “delims=” %%i in (‘type ip.txt^|find /v “”‘) do (
set a=%%i
tracert !a!4.txt
)
关闭保存,这样tracert的资料全都在4.txt中了。