2015-06-19 64 views
2

我知道這個問題已經被問這裏,但沒有得到回答的設備的名稱和IP。獲取Wi-Fi網絡

我寫在我要顯示的名稱和每個IP地址和每一個連接到我的無線網絡設備,一個簡單的Java Swing應用程序。

我想表明這個名單中JFrame。我在網上搜索了很多,但無法找到實現此目的的方法。請幫我拿出Java大師!

在此先感謝!

+2

*「我知道這個問題已經被要求在這裏,但它沒有得到答案。「*有什麼問題?提供一個鏈接。它可能沒有被回答,只是因爲沒有答案,再次詢問不會改變這一點。 –

回答

1

我發現找一點點這個代碼後。它可以工作,但速度很慢,可能不是最好的方式,但它起作用。

import java.io.IOException; 
import java.net.InetAddress; 

public class NetworkPing { 

    /** 
    * JavaProgrammingForums.com 
    */ 
    public static void main(String[] args) throws IOException { 

     InetAddress localhost = InetAddress.getLocalHost(); 
     // this code assumes IPv4 is used 
     byte[] ip = localhost.getAddress(); 

     for (int i = 1; i <= 254; i++) 
     { 
      ip[3] = (byte)i; 
      InetAddress address = InetAddress.getByAddress(ip); 
     if (address.isReachable(1000)) 
     { 
      System.out.println(address + " machine is turned on and can be pinged"); 
     } 
     else if (!address.getHostAddress().equals(address.getHostName())) 
     { 
      System.out.println(address + " machine is known in a DNS lookup"); 
     } 
     else 
     { 
      System.out.println(address + " the host address and host name are equal, meaning the host name could not be resolved"); 
     } 
     } 

    } 
} 

幾件事情要注意,address.getHostAddress()返回192.168.0.xxx 和address.getHostName()返回該設備的名稱,比如 「Kevins-PC」

這是一個相當簡單的一段代碼,但我會快速瀏覽它。

它通過獲取本地主機IP地址(在普通家庭網絡上的IP地址爲192.168.0.xxx)開始,並將其存儲在byte []中,使其看起來像{192,168,0,xxx }。 然後創建一個循環從1開始要254(因爲這個代碼假定一個/ 24子網掩碼(255.255.255.0),但如果它的運行不同的子網掩碼,那麼它可能不是1-254)。 然後在for循環中,它將ip的第三個索引設置爲i。 然後它從該地址創建一個InetAddress。 ,然後嘗試在1000毫秒(1秒),以達到它,並且如果成功則它打印地址和表示其到達。 否則,如果機主機地址(192.168.0.xxx)不等於主機名(比如你的電腦像Kevins-PC的名稱),然後它說,機器在DNS查找這意味着它稱爲被發現在DNS查找中,但它不可訪問(所以它可能關閉或沒有連接,但它已經在以前),DNS是域名服務。 DNS基本上存儲信息(您的路由器可能會這樣做)。 最後,否則它只是說,它無法得到解決,這意味着它不是可達也不是發現看在DNS。

我發現這個代碼herehere

UPDATE

所以,如果你運行這個,你只是不斷收到類似「192.168.0.5/192.168.0.5主機地址和主機名是平等的,這意味着該主機名稱無法解析」 這意味着你的路由器(您的本地DNS)只是不存儲信息,或者這些設備只是選擇不提交他們的主機名到路由器上,這就是爲什麼你會不斷得到那個消息。據我所知,沒有辦法解決,因爲這些設備名稱字面上沒有存儲

+0

謝謝你的幫助!我檢查了它。它顯示IP地址,但它不顯示連接設備的名稱。 'address.getHostName()'再次向我顯示IP地址。我如何獲取連接設備的名稱? –

+0

嘗試再次運行它,我無法給出它爲什麼會起作用的原因,但它通常第二次運行 – MrWayFarOut

0

試試這個:)

import java.io.IOException; 
import java.net.*; 
import java.util.Vector; 

public class search { 
    public static void main(String args[]) throws UnknownHostException{ 

     Vector<String> Available_Devices=new Vector<>(); 
     String myip=InetAddress.getLocalHost().getHostAddress(); 
     String mynetworkips=new String(); 

     for(int i=myip.length();i>0;--i) { 
      if(myip.charAt(i-1)=='.'){ mynetworkips=myip.substring(0,i); break; } 
     } 

     System.out.println("My Device IP: " + myip+"\n"); 

     System.out.println("Search log:"); 
     for(int i=1;i<=254;++i){ 
      try { 
       InetAddress addr=InetAddress.getByName(mynetworkips + new Integer(i).toString()); 
       if (addr.isReachable(1000)){ 
        System.out.println("Available: " + addr.getHostAddress()); 
        Available_Devices.add(addr.getHostAddress()); 
       } 
       else System.out.println("Not available: "+ addr.getHostAddress()); 

      }catch (IOException ioex){} 
     } 

     System.out.println("\nAll Connected devices(" + Available_Devices.size() +"):"); 
     for(int i=0;i<Available_Devices.size();++i) System.out.println(Available_Devices.get(i)); 
    } 
}