当前位置:  开发笔记 > 编程语言 > 正文

如何在Java中确定路由器/网关的IP?

如何解决《如何在Java中确定路由器/网关的IP?》经验,为你挑选了2个好方法。

如何在Java中确定路由器/网关的IP?我可以轻松地获得我的IP.我可以使用网站上的服务获取我的互联网IP.但是如何确定网关的IP?

如果你了解自己的方式,这在.NET中有点容易.但是你如何用Java做到这一点?



1> Alnitak..:

在Windows,OSX,Linux等上,Chris Bunch的答案可以通过使用来大大改善

netstat -rn

代替traceroute命令.

您的网关的IP地址将出现在以default或开始的行的第二个字段中0.0.0.0.

这会在尝试使用时遇到许多问题traceroute:

    traceroute实际上在Windows 上tracert.exe,所以代码中不需要O/S依赖

    它是一个快速运行的命令 - 它从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



2> Chris Bunch..:

不幸的是,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();以使标记器再推进一个位置.


实际上它不适用于Windows-OS,因为traceroute在那里被称为tracert.
-1:这不适用于非Windows操作系统.
推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有