web-dev-qa-db-ja.com

Javaを使用して同じネットワーク(サブネット)に接続されているIPのリストを取得する方法

Javaを使用して同じサブネットに接続されているデバイスのIPアドレスのリストを取得するにはどうすればよいですか?

40
Jigar Joshi

これは、ネットワーク上のホストがICMPパッケージ(ping)(> JDK 5)に反応するときに機能するはずです。

public void checkHosts(String subnet){
   int timeout=1000;
   for (int i=1;i<255;i++){
       String Host=subnet + "." + i;
       if (InetAddress.getByName(Host).isReachable(timeout)){
           System.out.println(Host + " is reachable");
       }
   }
}

次のようにサブネット(192.168.0.1-254)のメソッドを呼び出します。

checkHosts("192.168.0");

テストしませんでしたが、このように動作するはずです。明らかにこれはIPアドレスの最後のバイトの254ホストのみをチェックします...

チェック:

http://download-llnw.Oracle.com/javase/6/docs/api/Java/net/InetAddress.html#isReachable%28int%29http:// blog。 taragana.com/index.php/archive/how-to-do-icmp-ping-in-Java-jdk-15-and-above/

助けたことを願っています

46
fasseg

LANに接続されているホストを一覧表示するには、サブネット上で利用可能なすべてのIPアドレスをpingする必要があります。ただし、pingメッセージはファイアウォールによって制限される可能性があるため、LANのIPアドレス範囲内の各IPアドレスへのソケットを開く方が安全です。

5
Suhas Phartale

LAN上のアクティブアドレスを表示します

public static void main(String[] args) {
    try {
        Enumeration nis = NetworkInterface.getNetworkInterfaces();
        while(nis.hasMoreElements())
        {
            NetworkInterface ni = (NetworkInterface) nis.nextElement();
            Enumeration ias = ni.getInetAddresses();
            while (ias.hasMoreElements())
            {
                InetAddress ia = (InetAddress) ias.nextElement();
                System.out.println(ia.getHostAddress());
            }

        }
    } catch (SocketException ex) {
        Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
    }
}

出力

127.0.0.1
0:0:0:0:0:0:0:1
172.128.1.102

Java 1.5)Java.net.InetAddressにはpingのようなメソッドがあります:public boolean isReachable(int timeout)。これを使用して、サブネット内のすべてのIPアドレスを反復処理できます。 。 Java-doc

2
vicatcu

ネットワークに接続されているすべてのホストのリストを意味する場合、機能することが保証されている唯一の方法は、IPアドレスのリストをステップスルーし、それらすべてをpingすることだと思います。

ただし、より具体的なものを探している場合は、検索できるものがあるかもしれません(例:RMIのレジストリ(LocateRegistry.getRegistry(Host, port).list())。

また、特定のホストが持つすべてのIPアドレスが必要な場合は、NetworkInterface.getNetworkInterfaces()をご覧ください。

1
Scott

サーバーを作成し、これらのpingに応答しなかったため、これらのいずれも機能していませんでした。そこで、サーバーがpingに応答するメカニズムを作成し、サブネット内のすべてのアドレスに対してブルートフォースチェック方式を使用しました。

PS:独自のサーバーを作成する誰かがこれを必要とするかもしれないので、これを書いています。

0
Sumukha Pk