java獲取本機IP地址


轉載自:http://blog.csdn.net/thunder09/article/details/5360251

在網上找了幾個用java獲取本機IP地址的代碼,發現都少都有些不完美,自己整理了一下.突然之間很想把自己的IP地址給獲取了,雖然用系統自帶命令可以得到,但自己想寫一個程序獲取一下,到網上搜索了一下java獲取本機IP地址的方法,結果居然發現沒有一個是可以用的,氣的我老人家吐血,

這些人閉着眼睛寫程序,寫完了就往網上發,也不測試一下,害的我以為自己RP問題,老是獲取不到正確的IP地址,強烈譴責!!!
為了表示鄙視,現把網上找到的主要的兩種方法的不足給指出一下
方法一(只能在Windows上使用,Linux平台就gei屁了):

try
{ 
System.out.println("本機的IP = " + InetAddress.getLocalHost());
} catch (UnknownHostException e)
{ 
e.printStackTrace();
}

在Linux下的執行結果是:本機的IP = xxx/127.0.1.1 (其中xxx是你的計算機名,偶這里馬賽克了)

方法二(宣稱可以在Linux下執行)

Enumeration netInterfaces=NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while(netInterfaces.hasMoreElements())
{
NetworkInterface ni=(NetworkInterface)netInterfaces.nextElement();
System.out.println(ni.getName());
ip=(InetAddress) ni.getInetAddresses().nextElement();
if( !ip.isSiteLocalAddress() 
&& !ip.isLoopbackAddress() 
&& ip.getHostAddress().indexOf(":")==-1)
{
System.out.println ("本機的ip=" + ip.getHostAddress());
break;
}
else
{
ip=null;
}
}
從紅色部分的代碼可以看到,該代碼對於獲取到的第一個NetworkInterface的IP地址的獲取,沒有循環的獲取,只是對第一個IP地址進行了處理,這樣就導致了如果第一個IP地址不是一個
Inet4Address的地址而是一個< span
id="ArticleContent1_ArticleContent1_lblContent">Inet6Address,這個判斷 ip.getHostAddress().indexOf(":")==-1將永遠是false,這個if條件進不去呀,多害人,強烈鄙視!

不過方法二思路是對了,就是有些小毛病,讓偶修改了一下,最終版的可以在 Linux下正確執行的代碼如下:
Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (allNetInterfaces.hasMoreElements())
{
NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
System.out.println(netInterface.getName());
Enumeration addresses = netInterface.getInetAddresses();
while (addresses.hasMoreElements())
{
ip = (InetAddress) addresses.nextElement();
if (ip != null && ip instanceof Inet4Address)
{
System.out.println("本機的IP = " + ip.getHostAddress());
} 
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM