zoukankan      html  css  js  c++  java
  • java获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下
     

    本文实例讲述了java编程实现获取服务器IP地址及MAC地址的方法。分享给大家供大家参考,具体如下:

    已测系统:
    windows linux unix

    排除127.0.0.1 和 0.0.0.0.1等非正常IP

    import java.net.InetAddress;
    import java.net.NetworkInterface;
    import java.net.SocketException;
    import java.util.ArrayList;
    import java.util.Enumeration;
    import java.util.List;
    public class IpUtil {
    private IpUtil(){}
    /**
    * 此方法描述的是:获得服务器的IP地址
    * @author: zhangyang33@sinopharm.com
    * @version: 2014年9月5日 下午4:57:15
    */
    public static String getLocalIP() {
    String sIP = "";
    InetAddress ip = null;
    try {
    boolean bFindIP = false;
    Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
    .getNetworkInterfaces();
    while (netInterfaces.hasMoreElements()) {
    if (bFindIP) {
    break;
    }
    NetworkInterface ni = (NetworkInterface) netInterfaces
    .nextElement();
    Enumeration<InetAddress> ips = ni.getInetAddresses();
    while (ips.hasMoreElements()) {
    ip = (InetAddress) ips.nextElement();
    if (!ip.isLoopbackAddress()
    && ip.getHostAddress().matches(
    "(\d{1,3}\.){3}\d{1,3}")) {
    bFindIP = true;
    break;
    }
    }
    }
    } catch (Exception e) {
    OutUtil.error(IpUtil.class, e.getMessage());
    }
    if (null != ip) {
    sIP = ip.getHostAddress();
    }
    return sIP;
    }
    /**
    * 此方法描述的是:获得服务器的IP地址(多网卡)
    * @author: zhangyang33@sinopharm.com
    * @version: 2014年9月5日 下午4:57:15
    */
    public static List<String> getLocalIPS() {
    InetAddress ip = null;
    List<String> ipList = new ArrayList<String>();
    try {
    Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
    .getNetworkInterfaces();
    while (netInterfaces.hasMoreElements()) {
    NetworkInterface ni = (NetworkInterface) netInterfaces
    .nextElement();
    Enumeration<InetAddress> ips = ni.getInetAddresses();
    while (ips.hasMoreElements()) {
    ip = (InetAddress) ips.nextElement();
    if (!ip.isLoopbackAddress()
    && ip.getHostAddress().matches(
    "(\d{1,3}\.){3}\d{1,3}")) {
    ipList.add(ip.getHostAddress());
    }
    }
    }
    } catch (Exception e) {
    OutUtil.error(IpUtil.class, e.getMessage());
    }
    return ipList;
    }
    /**
    * 此方法描述的是:获得服务器的MAC地址
    * @author: zhangyang33@sinopharm.com
    * @version: 2014年9月5日 下午1:27:25
    */
    public static String getMacId() {
    String macId = "";
    InetAddress ip = null;
    NetworkInterface ni = null;
    try {
    boolean bFindIP = false;
    Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
    .getNetworkInterfaces();
    while (netInterfaces.hasMoreElements()) {
    if (bFindIP) {
    break;
    }
    ni = (NetworkInterface) netInterfaces
    .nextElement();
    // ----------特定情况,可以考虑用ni.getName判断
    // 遍历所有ip
    Enumeration<InetAddress> ips = ni.getInetAddresses();
    while (ips.hasMoreElements()) {
    ip = (InetAddress) ips.nextElement();
    if (!ip.isLoopbackAddress() // 非127.0.0.1
    && ip.getHostAddress().matches(
    "(\d{1,3}\.){3}\d{1,3}")) {
    bFindIP = true;
    break;
    }
    }
    }
    } catch (Exception e) {
    OutUtil.error(IpUtil.class, e.getMessage());
    }
    if (null != ip) {
    try {
    macId = getMacFromBytes(ni.getHardwareAddress());
    } catch (SocketException e) {
    OutUtil.error(IpUtil.class, e.getMessage());
    }
    }
    return macId;
    }
    /**
    * 此方法描述的是:获得服务器的MAC地址(多网卡)
    * @author: zhangyang33@sinopharm.com
    * @version: 2014年9月5日 下午1:27:25
    */
    public static List<String> getMacIds() {
    InetAddress ip = null;
    NetworkInterface ni = null;
    List<String> macList = new ArrayList<String>();
    try {
    Enumeration<NetworkInterface> netInterfaces = (Enumeration<NetworkInterface>) NetworkInterface
    .getNetworkInterfaces();
    while (netInterfaces.hasMoreElements()) {
    ni = (NetworkInterface) netInterfaces
    .nextElement();
    // ----------特定情况,可以考虑用ni.getName判断
    // 遍历所有ip
    Enumeration<InetAddress> ips = ni.getInetAddresses();
    while (ips.hasMoreElements()) {
    ip = (InetAddress) ips.nextElement();
    if (!ip.isLoopbackAddress() // 非127.0.0.1
    && ip.getHostAddress().matches(
    "(\d{1,3}\.){3}\d{1,3}")) {
    macList.add(getMacFromBytes(ni.getHardwareAddress()));
    }
    }
    }
    } catch (Exception e) {
    OutUtil.error(IpUtil.class, e.getMessage());
    }
    return macList;
    }
    private static String getMacFromBytes(byte[] bytes) {
    StringBuffer mac = new StringBuffer();
    byte currentByte;
    boolean first = false;
    for (byte b : bytes) {
    if (first) {
    mac.append("-");
    }
    currentByte = (byte) ((b & 240) >> 4);
    mac.append(Integer.toHexString(currentByte));
    currentByte = (byte) (b & 15);
    mac.append(Integer.toHexString(currentByte));
    first = true;
    }
    return mac.toString().toUpperCase();
    }
  • 相关阅读:
    向MySql中插入中文时出现乱码
    MySql插入记录时判断
    SuperGridControl 使用小技巧
    Winform开发中常见界面的DevExpress处理操作
    mysql优化之索引建立的规则
    App性能优化浅谈
    AndroidManifest具体解释之Application(有图更好懂)
    算法——递归思想解决排列组合问题
    Windows App开发之集合控件与数据绑定
    table行随鼠标变色
  • 原文地址:https://www.cnblogs.com/zxci/p/6248902.html
Copyright © 2011-2022 走看看