获取本机局域网IP地址
生活随笔
收集整理的這篇文章主要介紹了
获取本机局域网IP地址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
java獲取本機局域網IP地址/掃描同局域網其他設備iP
1.背景
我們的設備上有很多的網絡接口(network interfaces),每個網絡接口就包含一個IP地址,并不是所有的IP地址能被外部或局域網訪問,比如說虛擬機網卡地址。 所以我們寫獲取到的IP地址可能并不是我們想要的那個,或者說會獲取不少地址,而我們想要的就在其中,那我們就必須做一些篩選,把我們要的留下。
2.小知識
這里有點知識,分享給你:
127.xxx.xxx.xxx 屬于”loopback” 地址,就是本機地址,比較常見的有127.0.0.1;
192.168.xxx.xxx 屬于私有地址,屬于本地組織內部訪問,只能在本地局域網可見。同樣10.xxx.xxx.xxx、從172.16.xxx.xxx 到 172.31.xxx.xxx都是私有地址,也是屬于組織內部訪問;
169.254.xxx.xxx 屬于連接本地地址,在單獨網段可用
從224.xxx.xxx.xxx 到 239.xxx.xxx.xxx 屬于組播地址
255.255.255.255 屬于廣播地址
除此之外的地址就是點對點的可用的公開IPv4地址
3.java實現代碼
1.獲取本機局域網IP地址
import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Enumeration;public class test {public static void main(String[] args) throws SocketException, UnknownHostException {// TODO Auto-generated method stubEnumeration<NetworkInterface> enumeration = NetworkInterface.getNetworkInterfaces();InetAddress ip = null;while(enumeration.hasMoreElements()) {NetworkInterface ni = enumeration.nextElement();//過濾掉虛擬機、未開啟、回環接口if(ni.isVirtual()||!ni.isUp()||ni.isLoopback()) {//System.out.println("虛擬機接口或接口未啟動");continue;//根據接口名稱進一步過濾:WiFi驅動一般名稱中包含“Intel”,有線連接包含"Realtek"}else if(ni.getDisplayName().contains("Intel")||ni.getDisplayName().contains("Realtek")||ni.getDisplayName().contains("Wi")){Enumeration<InetAddress> address = ni.getInetAddresses();while(address.hasMoreElements()) {ip = address.nextElement();if(ip instanceof Inet4Address) {System.out.println(ip.getHostAddress());System.out.println(ni.getDisplayName());}}}}}}2.掃描同局域網其他設備。
package test; import java.io.IOException; import java.net.InetAddress;public class OpenFileChoose {public static void main(String[] args) throws IOException {String hostIP = "192.168.43.20";//本機局域網IP地址String Segment = getNetworkSegment(hostIP);//得到本機所在局域網網段for(int i = 1;i<255;i++) {String interimIP = Segment+i;InetAddress ip =InetAddress.getByName(interimIP);boolean isOnline = ip.isReachable(1000);//判斷這個ip地址是否在線,其中1000ms指定的是超時時間if(isOnline) {System.out.println("同局域網內有設備:"+ip.getHostName()+"-----"+"IP:"+ip.getHostAddress());}}System.out.println("掃描完畢");}//得到本機所在網段private static String getNetworkSegment(String ip) {int index = ip.lastIndexOf("."); return ip.substring(0, index+1);}}代碼較少,不拆分開來說了,提醒一下,isReachable(1000)函數執行很耗時間。你也可以考慮試試用ping.
總結
以上是生活随笔為你收集整理的获取本机局域网IP地址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 元气森林海外负责人柳甄离职:是柳传志侄女
- 下一篇: Cybertec PostgreSQL透