Aln*_*tak 23
在Windows,OSX,Linux等上,Chris Bunch的答案可以通过使用来大大改善
netstat -rn
Run Code Online (Sandbox Code Playgroud)
代替traceroute命令.
您的网关的IP地址将出现在以default或开始的行的第二个字段中0.0.0.0.
这会在尝试使用时遇到许多问题traceroute:
traceroute实际上在Windows 上tracert.exe,所以代码中不需要O/S依赖traceroute 有时被网络阻止唯一的缺点是必须保持从netstat输出读取行直到找到右行,因为将有多行输出.
编辑:默认网关的IP地址位于以"默认"开头的行的第二个字段中,如果您在MAC上(在Lion上测试),或在以"0.0.0.0"开头的行的第三个字段中(在Windows 7上测试)
视窗:
网络目标网络掩码网关接口度量标准
0.0.0.0 0.0.0.0 192.168.2.254 192.168.2.46 10
苹果电脑:
目标网关标志参考使用Netif Expire
默认值 192.168.2.254 UGSc 104 4 en1
Chr*_*nch 10
不幸的是,Java并没有像其他语言那样令人愉快.这是我做的:
import java.io.*;
import java.util.*;
public class ExecTest {
public static void main(String[] args) throws IOException {
Process result = Runtime.getRuntime().exec("traceroute -m 1 www.amazon.com");
BufferedReader output = new BufferedReader(new InputStreamReader(result.getInputStream()));
String thisLine = output.readLine();
StringTokenizer st = new StringTokenizer(thisLine);
st.nextToken();
String gateway = st.nextToken();
System.out.printf("The gateway is %s\n", gateway);
}
}
Run Code Online (Sandbox Code Playgroud)
这假定网关是第二个令牌而不是第三个令牌.如果是,则需要添加额外的一个st.nextToken();以使标记器再推进一个位置.