获取本地网络中的所有Up ip -java

时间:2014-12-26 01:59:57

标签: java networking ip subnet

对于Java项目,我需要通过wlan或eth0或其他任何东西扫描连接到同一本地网络的ip列表。我需要获取本地网络中的IP地址列表

我试过

InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);

for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) 
{
        System.out.println(address.getNetworkPrefixLength());
}

但它给出了

Exception in thread "main" java.lang.NullPointerException
at com.Server.Subnet.main(Subnet.java:17)

我想我需要遵循这些步骤。

  1. 获取我连接的网络的子网地址
  2. 扫描子网掩码中的所有IP地址
  3. 列出已启动的IP地址
  4. 你能给我正确的实施方式

2 个答案:

答案 0 :(得分:1)

遵循以下指示
- 获得您的系统IP
- 获取子网掩码 - 根据子网掩码,获取子网中可能的IP地址列表。&
- 现在,一个接一个地ping他们。 (你可以用java的系统ping命令)
- 检查ping响应,然后您可以决定主机是否启用。

答案 1 :(得分:0)

我试过这个程序来查找连接系统子网中的所有up ip。

package com.Server;

import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.InterfaceAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;

public class Subnet
{
    public void Subnet() throws UnknownHostException, SocketException
    {
        Enumeration e = NetworkInterface.getNetworkInterfaces();
        while(e.hasMoreElements())
        {
            NetworkInterface n = (NetworkInterface) e.nextElement();
            Enumeration ee = n.getInetAddresses();
            while (ee.hasMoreElements())
            {
                InetAddress i = (InetAddress) ee.nextElement();
                String ip = i.getHostAddress();

                String sip = ip.substring(0, ip.indexOf('.',ip.indexOf('.',ip.indexOf('.')+1) + 1) + 1);
                try {
                    for(int it=1;it<=255;it++)
                    {
                        String ipToTest = sip+it;
                        boolean online = InetAddress.getByName(itToTest).isReachable(100);
                        if (online) {
                            System.out.println(ipToTest+" is online");
                        }

                    }
                } catch (IOException e1) {
                    System.out.println(sip);
                }
            }
        }
    }
}