2019独角兽企业重金招聘Python工程师标准>>>

  1. 获取局域网ip和mac(如果电脑没有直接连接外网),否则获取公网ip

  2. 通过第三放获取公网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以及网卡信息相关推荐

  1. python获取mac、计算机id_python 获取本机IP、mac地址、计算机名的简单示例

    这篇文章主要为大家详细介绍了python 获取本机IP.mac地址.计算机名的简单示例,具有一定的参考价值,可以用来参考一下. 对python获取本机IP.mac地址.计算机名感兴趣的小伙伴,下面一起 ...

  2. 用java获取本机IP地址

    在网上找了几个用java获取本机IP地址的代码,发现都少都有些不完美,自己整理了一下.突然之间很想把自己的IP地址给获取了,虽然用系统自带命令可以得到,但自己想写一个程序获取一下,到网上搜索了一下ja ...

  3. java获取本机IP

    如果是在windows环境: 使用InetAddress.getLocalHost()方法即可. import java.net.InetAddress;public class Main {publ ...

  4. Qt网路与通信(获取本机IP、MAC、IPV6子网掩码等网络信息)

    Qt网路与通信(获取本机网络信息) 在网络应用中,经常需要获取本机的主机名/IP地址和硬件地址信息等网络信息.运用QHostInfo.QNetworkInterface.QNetworkAddress ...

  5. Qt获取本机IP、MAC地址、子网掩码、网卡名等函数设计

    获取本机IP函数 QString getIp() {QString myIp;QList<QHostAddress> ipList = QNetworkInterface::allAddr ...

  6. java获取本机ip地址_代码片段:获取系统所有IP

    问题 在Windows系统中,可以支持多个网卡,比如有线的以太网卡,无线网卡,虚拟网卡等.如下图所示: 每一张网卡由不同的类型,也可以分别被用户启用或禁用. 对于单独一张给定的网卡,其IP地址可以是D ...

  7. java获取本机ip和本机公网ip

    话不多少,有用请点赞 本机ip public static String getIpAddr(HttpServletRequest request) {if (request == null) {re ...

  8. java获取本机IP,系统随机分配端口号,获取当前线程ID

    ServerSocket serverSocket = null; //读取空闲的可用端口 String localIp = null; try {serverSocket = new ServerS ...

  9. 1.Java获取本机IP地址,主机名,域名

    1.如何在程序中获取本机的IP地址,主机名以及域名呢? 在java中,我们可以利用java.net.InetAddress这个类来实现. InetAddress 类提供了操作 IP 地址的各种方法.该 ...

最新文章

  1. bzoj1814 Ural 1519 Formula 1(插头dp模板题)
  2. sama5d3 xplained 系统加载后确认使用的网口
  3. QT5对话框的中文字符串【乱码】 (error: C2001: 常量中有换行符)
  4. 关闭window端口445
  5. 对话推荐系统_RSPapers | 对话推荐系统论文合集
  6. python笔记之function函数
  7. Android USB 开发详解
  8. sqlserver 创建对某个存储过程执行情况的跟踪
  9. Scripting elements ( lt;%!, lt;jsp:declaration, lt;%=, lt;jsp:expression, 错误的解决方法
  10. 铺铜过孔不要十字_谈谈商周青铜器上圈足的镂孔现象
  11. tensorflow中GPU的设置
  12. [转载] python中的bin()方法
  13. directx9又更新了。
  14. 金蝶k3服务器的操作系统,金蝶k3服务器配置工具
  15. css border实现渐变
  16. python爬虫抖音视频代码_python爬虫 抖音短视频解析下载
  17. 华为防火墙IPsec点对点配置解析
  18. 【随机过程】【研究生考试专用】备考笔记/知识点整理
  19. linux批量对文件改名,在Linux中对文件进行批量重命名文件的方法
  20. NLP实战之textCNN中文文本分类

热门文章

  1. 自定义requestAnimationFrame帧频
  2. 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少...
  3. 遗传算法在JobShop中的应用研究(part1: 绪论)
  4. 1044 拦截导弹——http://codevs.cn/problem/1044/
  5. H5开发中的问题总结
  6. 杭州线下|2019产品经理年终轰趴
  7. 做产品必须知道的:从产品助理到产品总监的职业进阶
  8. PMCAFF微课堂 | 阿里资深运营揭秘电商运营与纯互联网运营的区别与互通
  9. 活动结束|金融圈第19期分享:数据系统如何防范金融非统性风险?
  10. 《谷歌和亚马逊如何做产品》