这篇文章主要介绍了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();
- }
- }
希望本文所述对大家Java程序设计有所帮助。
新闻热点
疑难解答
图片精选