如何在Java中确定路由器/网关的IP?
如何在Java中确定路由器/网关的IP?我可以很容易地获得我的IP。我可以使用网站上的服务获取我的互联网IP。但是,如何确定网关的 IP?
这在 .NET 中有些容易,如果您知道自己的方式。但是,如何在Java中做到这一点呢?
如何在Java中确定路由器/网关的IP?我可以很容易地获得我的IP。我可以使用网站上的服务获取我的互联网IP。但是,如何确定网关的 IP?
这在 .NET 中有些容易,如果您知道自己的方式。但是,如何在Java中做到这一点呢?
在Windows,OSX,Linux等上,Chris Bunch的答案可以通过使用
netstat -rn
代替命令。traceroute
网关的 IP 地址将显示在开始或 的行的第二个字段中。default
0.0.0.0
这解决了尝试使用的许多问题:traceroute
traceroute
tracert.exe
traceroute
有时被网络阻止唯一的缺点是,在找到正确的行之前,有必要从输出中读取行,因为将有多行输出。netstat
编辑:如果您使用的是 MAC(在 Lion 上测试),则默认网关的 IP 地址位于以“默认”开头的行的第二个字段中,或者位于以“0.0.0.0”开头的行的第三个字段中(在 Windows 7 上测试)
窗户:
网络目标网络掩码网关接口跃点计数
0.0.0.0 0.0.0.0 192.168.2.254 192.168.2.46 10
苹果电脑:
目标网关标志 引用 使用 Netif 过期
默认值 192.168.2.254 UGSc 104 4 en1
不幸的是,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);
}
}
这假定网关是第二个令牌,而不是第三个令牌。如果是这样,您需要添加额外的内容以将分词器再前进一个点。st.nextToken();