Javaを使用して同じサブネットに接続されているデバイスのIPアドレスのリストを取得するにはどうすればよいですか?
これは、ネットワーク上のホストが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/
助けたことを願っています
LANに接続されているホストを一覧表示するには、サブネット上で利用可能なすべてのIPアドレスをpingする必要があります。ただし、pingメッセージはファイアウォールによって制限される可能性があるため、LANのIPアドレス範囲内の各IPアドレスへのソケットを開く方が安全です。
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
ネットワークに接続されているすべてのホストのリストを意味する場合、機能することが保証されている唯一の方法は、IPアドレスのリストをステップスルーし、それらすべてをpingすることだと思います。
ただし、より具体的なものを探している場合は、検索できるものがあるかもしれません(例:RMIのレジストリ(LocateRegistry.getRegistry(Host, port).list()
)。
また、特定のホストが持つすべてのIPアドレスが必要な場合は、NetworkInterface.getNetworkInterfaces()
をご覧ください。
サーバーを作成し、これらのpingに応答しなかったため、これらのいずれも機能していませんでした。そこで、サーバーがpingに応答するメカニズムを作成し、サブネット内のすべてのアドレスに対してブルートフォースチェック方式を使用しました。
PS:独自のサーバーを作成する誰かがこれを必要とするかもしれないので、これを書いています。