Java& Windows 7:可靠地获得IPv4网络掩码?

时间:2012-02-15 19:03:04

标签: java windows-7 netmask

我在Windows上遇到了Java 6的已知错误。我的理解是获取网络掩码的正常方法是查找网络前缀长度并进行一些位移。问题是在Windows上,前缀长度通常不正确地返回,因此当我们得到24或20时,我们得到128.

this solution中,建议将-Djava.net.preferIPv4Stack=true放在Java命令行上。不幸的是,在Windows 7上,将其添加为VM参数或在Java命令行上似乎没有任何效果。

(a)是否有人知道可能仍在Windows 7上运行的此问题的其他解决办法?

(b)或者,有一种完全不同的方法来获得可靠的网络掩码吗?

谢谢!

P.S。 Here is the bug report that pertains to this

3 个答案:

答案 0 :(得分:3)

-Djava.net.preferIPv4Stack=true VM选项应该适用于任何操作系统。或者,它可以作为System.setProperty("java.net.preferIPv4Stack","true");放入Java代码中。除非,某些东西(图书馆或其他)正在重置其真实状态。

答案 1 :(得分:2)

以下代码显示子网掩码。在具有多个网络连接的计算机上(如具有无线和Cat-5以太网连接的笔记本电脑),它可能会编写两次子网掩码,因为客户端可能有两个不同的IP地址。

    String os = System.getProperty("os.name");        
    try {
        if(os.indexOf("Windows 7")>=0) {
            Process process = Runtime.getRuntime().exec("ipconfig");
            process.waitFor();
            InputStream commandOut= process.getInputStream();

            BufferedReader in = new BufferedReader(new InputStreamReader(commandOut));
            String line;
            while((line = in.readLine()) !=null) {
                if(line.indexOf("Subnet Mask")>=0) {
                    int colon = line.indexOf(":");
                    System.out.println(line.substring(colon+2));
                }
            }
        }
    catch(IOException ioe) {    }
    catch(java.lang.InterruptedException utoh) {   }

在有线和无线连接都处于活动状态的笔记本电脑上,我得到了这个输出: 255.255.254.0 255.255.254.0

当我关闭无线连接时,我只看到有线以太网链路的一行输出,正如预期的那样。

答案 2 :(得分:1)

由于我们仅在Windows 7中遇到问题,为什么不寻找特定于操作系统的解决方案呢? 我知道我们可以从Java启动Windows程序,包括windows命令行或bat文件。必须有一种方法可以将ipconfig的输出重定向到Windows中的文本文件。您的程序应该能够通过调用ipconfig然后读取输出来获取子网掩码。