生活随笔
收集整理的這篇文章主要介紹了
Java 获取本机IP和Mac以及网卡信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
獲取局域網ip和mac(如果電腦沒有直接連接外網),否則獲取公網ip
通過第三放獲取公網ip
public?class?NetworkUtils?{/***?獲取本地IP列表(針對多網卡情況)*?@return*/public?static?Map<String,?Object>?getLocalInetMac()?{Map<String,?Object>?ipMacInfo?=?null;try?{Enumeration<NetworkInterface>?networkInterfaces?=?NetworkInterface.getNetworkInterfaces();while?(networkInterfaces.hasMoreElements())?{NetworkInterface?networkInterface?=?networkInterfaces.nextElement();Enumeration<InetAddress>?inetAddresses?=?networkInterface.getInetAddresses();while?(inetAddresses.hasMoreElements())?{InetAddress?inetAddress?=?inetAddresses.nextElement();ipMacInfo?=?pickInetAddress(inetAddress,?networkInterface);if?(ipMacInfo?!=?null)?{Log.e("IP-MAC-1",ipMacInfo?);return?ipMacInfo;}}}}?catch?(SocketException?e)?{e.printStackTrace();}return?null;}private?static?Map<String,?Object>?pickInetAddress(InetAddress?inetAddress,NetworkInterface?ni)?{try?{String?name?=?ni.getDisplayName();if?(name.contains("Adapter")||?name.contains("Virtual")?||?name.contains("VMnet")?||?name.contains("#"))?{return?null;}if?(ni.isVirtual()?||?!ni.isUp()?||?!ni.supportsMulticast())?{return?null;}if?(inetAddress.isSiteLocalAddress())?{Formatter?formatter?=?new?Formatter();String?sMAC?=?null;byte[]?macBuf?=?ni.getHardwareAddress();for?(int?i?=?0;?i?<?macBuf.length;?i++)?{sMAC?=?formatter.format(Locale.getDefault(),?"%02X%s",macBuf[i],?(i?<?macBuf.length?-?1)???"-"?:?"").toString();}formatter.close();Map<String,?Object>?ipMacInfo?=?new?HashMap<String,?Object>();ipMacInfo.put("hostname",?inetAddress.getHostName());?//系統當前hostnameipMacInfo.put("ip",?inetAddress.getHostAddress());?//ip地址ipMacInfo.put("ipnet",?inetAddressTypeName(inetAddress));?//網絡類型ipMacInfo.put("os",?System.getProperty("os.name"));?//系統名稱ipMacInfo.put("mac",?sMAC);?//mac?地址ipMacInfo.put("cpu-arch",?System.getProperty("os.arch"));?//cpu架構ipMacInfo.put("network-arch",?ni.getDisplayName());?//網卡名稱return?ipMacInfo;}}?catch?(SocketException?e)?{e.printStackTrace();}?return?null;}private?static?String?inetAddressTypeName(InetAddress?inetAddress)?{return?(inetAddress?instanceof?Inet4Address)???"ipv4"?:?"ipv6";}//通過第三方網站http://1111.ip138.com/ic.asp獲取ippublic?static?Map<String,?String>?getOpenNetworkIp()?{try?{URLConnection?openConnection?=?new?URL("http://1111.ip138.com/ic.asp").openConnection();openConnection.setDoInput(true);openConnection.connect();InputStream?is?=??(InputStream)?openConnection.getContent();BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(is,Charset.forName("GBK")));StringBuilder?sb?=?new?StringBuilder();String?str?=?null;while((str=br.readLine())!=null){sb.append(str);}String?htmlSrc?=?sb.toString().toLowerCase(Locale.getDefault());String?startTag?=?"<center>";String?endTag?=?"</center>";htmlSrc?=?htmlSrc.substring(htmlSrc.indexOf(startTag)+startTag.length(),?htmlSrc.lastIndexOf(endTag));String?openIp?=?htmlSrc.substring(htmlSrc.indexOf("[")+1,?htmlSrc.lastIndexOf("]"));String?provider?=?htmlSrc.substring(htmlSrc.lastIndexOf(":")+1);Map<String,?String>?resultMap?=?new?HashMap<String,?String>();resultMap.put("openIp",?openIp);resultMap.put("provider",?provider);br.close();Log.wtf("IP-Mac-3",resultMap);return?resultMap;}?catch?(MalformedURLException?e)?{e.printStackTrace();}?catch?(IOException?e)?{e.printStackTrace();}return?null;}public?static?String?getDNSIp(String?url)?throws?UnknownHostException{InetAddress?bupt=null;try{?bupt?=?InetAddress.getByName(url);return?bupt.getHostAddress();}catch(UnknownException?e)?{e.printStackTrace();}return?null;}/***?檢測http網絡連接是否正常*?@param?urlStr*?@return*/private?static?boolean?httpIsAvaliable(String?urlStr)?{URL?url?=?null;InputStream?in?=?null;try?{url?=?new?URL(urlStr);URLConnection?conn?=?url.openConnection();conn.connect();in?=?conn.getInputStream();if?(in?!=?null?&&?in.read()?>=?0)?{return?true;}}?catch?(Exception?e)?{return?false;}?finally?{if?(in?!=?null)?{try?{in.close();}?catch?(IOException?e)?{}}}return?false;}/***?檢測任意ip:port網絡訪問是否正常*?@param?hostname*?@param?port*?@return*/private?static?boolean?socketIsAvaiable(String?hostname,int?port){Socket?socket?=?null;try?{socket?=?new?Socket();socket.setKeepAlive(true);socket.setTcpNoDelay(true);socket.setTrafficClass(0x08);socket.connect(new?InetSocketAddress(hostname,?port));if(!socket.isClosed()?&&?socket.isConnected()?&&?!socket.isInputShutdown()?&&?!socket.isOutputShutdown()){return?true;}}?catch?(SocketException?e)?{e.printStackTrace();return?false;}?catch?(IOException?e)?{e.printStackTrace();return?false;}finally{if(socket!=null?&&?!socket.isClosed()){try?{socket.close();}?catch?(IOException?e)?{e.printStackTrace();}}}return?false;}public?static?void?main(String[]?args)?{Map<String,?Object>?localInetMac?=?getLocalInetMac();System.out.println(localInetMac);Map<String,?String>?openNetworkIp?=?getOpenNetworkIp();System.out.println(openNetworkIp);}
}
如上方案在Android,Windows,linux都成功了,可能有些地方考慮不太周全,但應該覆蓋了90-95%的PC和Android系統,對了,貌似不支持Android 2.2,
不過Android本身就可獲取mac和IP,代碼如下
?public?Map<String,?Object>??getLocalNetworkinfo(?){??Map<String,?Object>?ipNetInfo?=?new?HashMap<String,?Object>();WifiManager?wifiManager?=?(WifiManager)?mContext.getSystemService(Context.WIFI_SERVICE);WifiInfo?connInfo?=?wifiManager.getConnectionInfo();String?macAddress?=?connInfo.getMacAddress();//mac地址String?ssid?=?connInfo.getSSID();?//ssidString?bssid?=?connInfo.getBSSID();?int?rssi?=?connInfo.getRssi();//信號強度String?speed?=?connInfo.getLinkSpeed()+WifiInfo.LINK_SPEED_UNITS;//網速int?networkId?=?connInfo.getNetworkId();?//網絡號String?ip?=?Formatter.formatIpAddress(connInfo.getIpAddress());DhcpInfo?dhcpInfo?=?wifiManager.getDhcpInfo();??String?gateway?=?Formatter.formatIpAddress(dhcpInfo.gateway);//網關String?netmask?=?Formatter.formatIpAddress(dhcpInfo.netmask);//子網掩碼ipNetInfo.put("mac",?macAddress);ipNetInfo.put("ip",?ip);ipNetInfo.put("gateway",?gateway);ipNetInfo.put("netmask",?netmask);ipNetInfo.put("ssid",?ssid);ipNetInfo.put("rssi",?rssi);ipNetInfo.put("bssid",?bssid);ipNetInfo.put("speed",?speed);ipNetInfo.put("networkId",?networkId);Log.e("IP-MAC-2",ipNetInfo);return?ipNetInfo;?}//信道獲取
public?static?int?getCurrentChannel(Context?context)?
{WifiManager?wifiManager?=?(WifiManager)?context.getSystemService(Context.WIFI_SERVICE);WifiInfo?wifiInfo?=?wifiManager.getConnectionInfo();//?當前wifi連接信息ListscanResults?=?wifiManager.getScanResults();for?(ScanResult?result?:?scanResults)?{if?(result.BSSID.equalsIgnoreCase(wifiInfo.getBSSID())&&?result.SSID.equalsIgnoreCase(wifiInfo.getSSID().substring(1,?wifiInfo.getSSID().length()?-?1)))?{return?getChannelByFrequency(result.frequency);}}return?-1;}/***?根據頻率獲得信道*?*?@param?frequency*?@return*/public?static?int?getChannelByFrequency(int?frequency)?{int?channel?=?-1;switch?(frequency)?{case?2412:channel?=?1;break;case?2417:channel?=?2;break;case?2422:channel?=?3;break;case?2427:channel?=?4;break;case?2432:channel?=?5;break;case?2437:channel?=?6;break;case?2442:channel?=?7;break;case?2447:channel?=?8;break;case?2452:channel?=?9;break;case?2457:channel?=?10;break;case?2462:channel?=?11;break;case?2467:channel?=?12;break;case?2472:channel?=?13;break;case?2484:channel?=?14;break;case?5745:channel?=?149;break;case?5765:channel?=?153;break;case?5785:channel?=?157;break;case?5805:channel?=?161;break;case?5825:channel?=?165;break;}return?channel;}
下面是運行在Android上的效果
轉載于:https://my.oschina.net/ososchina/blog/501447
總結
以上是生活随笔為你收集整理的Java 获取本机IP和Mac以及网卡信息的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。