主要参考:Java获取本机MAC地址/IP地址/主机名

做的更改:

1.我的windows是中文版,程序中获取mac时是按照physical address 获取的,添加上"物理地址";

2.获取到第一个mac之后继续循环buffer,获取其他网卡的mac(无线网卡、以太网卡、虚拟网卡...),但我的机器获取到5个mac地址,不知道为什么,我知道的有一个虚拟网卡,一个以太,一个无限,另外两个不知道哪里来的。

3.中文系统获取bufferedReader 后的编码不正确,添加编码“GBK"

 package cn.com.sinosoft.monitor.vo;

         import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map; /**
* @className: SystemTool
* @description: 与系统相关的一些常用工具方法. 目前实现的有:获取MAC地址、IP地址、主机名
* @author: 笑遍世界
* @createTime: 2010-11-13 下午08:03:44
*/
public class Tool { /**
* 获取当前操作系统名称.
* return 操作系统名称 例如:windows xp,linux 等.
*/
private static String getOSName() {
return System.getProperty("os.name").toLowerCase();
} /**
* 获取unix网卡的mac地址.
* 非windows的系统默认调用本方法获取.如果有特殊系统请继续扩充新的取mac地址方法.
*
* @return mac地址
*/
private static String getUnixMACAddress() {
String mac = null;
BufferedReader bufferedReader = null;
Process process;
try {
process = Runtime.getRuntime().exec("ifconfig eth0");// linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream()));
String line;
int index;
while ((line = bufferedReader.readLine()) != null) {
index = line.toLowerCase().indexOf("hwaddr");// 寻找标示字符串[hwaddr]
if (index >= 0) {// 找到了
mac = line.substring(index + "hwaddr".length() + 1).trim();// 取出mac地址并去除2边空格
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
} return mac;
} /**
* 获取widnows网卡的mac地址.
*
* @return mac地址
*/
private static List<String> getWindowsMACAddress() {
List<String> macList = new ArrayList<String>();
String mac = null;
BufferedReader bufferedReader = null;
Process process;
try {
// windows下的命令,显示信息中包含有mac地址信息
process = Runtime.getRuntime().exec("ipconfig /all");
bufferedReader = new BufferedReader(new InputStreamReader(process
.getInputStream(),"GBK"));
String line;
int index;
while ((line = bufferedReader.readLine()) != null) {
index = line.toLowerCase().indexOf("physical address");// 寻找标示字符串[physical address] if (index == -1) {
index = line.indexOf("物理地址");
}
if (index >= 0) {// 找到了
index = line.indexOf(":");// 寻找":"的位置
if (index >= 0) {
mac = line.substring(index + 1).trim();// 取出mac地址并去除2边空格
}
macList.add(mac);
}
} } catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e1) {
e1.printStackTrace();
}
} return macList;
} /**
* @return 本机主机名
*/
private static String getHostName() {
InetAddress ia = null;
try {
ia = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
if (ia == null) {
return "some error..";
} else
return ia.getHostName();
} /**
* @return 本机IP 地址
*/
private static String getIPAddress() {
InetAddress ia = null;
try {
ia = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
if (ia == null) {
return "some error..";
} else
return ia.getHostAddress();
} /**
* 测试用的main方法.
*
* @param argc 运行参数.
*/
public static void main(String[] argc) {
String os = getOSName();
System.out.println("OS Type:" + os);
if (os.contains("windows")) {
//本地是windows
List<String> mac = getWindowsMACAddress();
System.out.println("MAC Address:" + mac);
} else {
//本地是非windows系统 一般就是unix
String mac = getUnixMACAddress();
System.out.println(mac);
}
System.out.println("HostName:" + getHostName());
System.out.println("IPAddress:" + getIPAddress()); //这个更简单
Map<String, String> map = System.getenv();
String userName = map.get("USERNAME");// 获取用户名
String computerName = map.get("COMPUTERNAME");// 获取计算机名
String userDomain = map.get("USERDOMAIN");// 获取计算机域名 System.out.println(userName);
System.out.println(computerName);
System.out.println(userDomain); System.out.println(GetMac());
} static String GetMac(String... ip)
{
List<String> macList = new ArrayList<String>();
InetAddress ia;
byte[] mac = null;
try {
//获取本地IP对象
ia = InetAddress.getLocalHost();
//获得网络接口对象(即网卡),并得到mac地址,mac地址存在于一个byte数组中。
mac = NetworkInterface.getByInetAddress(ia).getHardwareAddress();
} catch (Exception e) {
e.printStackTrace();
}
//下面代码是把mac地址拼装成String
StringBuffer sb = new StringBuffer();
for(int i=0;i<mac.length;i++){
if(i!=0){
sb.append("-");
}
//mac[i] & 0xFF 是为了把byte转化为正整数
String s = Integer.toHexString(mac[i] & 0xFF);
sb.append(s.length()==1?0+s:s);
} //把字符串所有小写字母改为大写成为正规的mac地址并返回
return sb.toString().toUpperCase();
} }

ps:最后的GetMac参考 java获取Mac地址

java 获取本地 mac 地址的更多相关文章

  1. 纯Java获得本地MAC地址

    import java.net.*; public class Ipconfig{      public static void main(String[] arguments) throws Ex ...

  2. java获取操作系统的MAC地址和硬盘序列号

    1.判断操作系统是Windows还是Linux private static Boolean isLinux() { String os = System.getProperty("os.n ...

  3. Java获取本地IP地址

    import java.net.InetAddress; import java.net.UnknownHostException; public class IpTest { public stat ...

  4. Java获取本地IP地址和主机名

    方式一:通过java.net.InetAddress类获取 public void test1() { try { InetAddress addr = InetAddress.getLocalHos ...

  5. Java 获取本地IP地址

    private static String getIpAddress( ){ String ip = ""; Collection<InetAddress> colIn ...

  6. java获取本地IP地址集合包括虚拟机的ip

    public static ArrayList<String> getLocalIpAddr() { ArrayList<String> ipList = new ArrayL ...

  7. java获取本地计算机MAC地址

    java获取本地计算机MAC地址代码如下: public class SocketMac { //将读取的计算机MAC地址字节转化为字符串 public static String transByte ...

  8. JAVA获取客户端IP地址和MAC地址

    1.获取客户端IP地址 public String getIp(HttpServletRequest request) throws Exception { String ip = request.g ...

  9. Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip

    获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...

随机推荐

  1. c3p0似有属性配置

    c3p0私有属性配置: 始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值.默认为3 initialPoolSize=20 接池中保留的最大连接数.默认为15 maxPoo ...

  2. docker 安装php

    nginx :docker pull nginx docker run -p 80:80 --name nginx -v /usr/local/nginx/www:/www -v /usr/local ...

  3. 网络基础篇之NAT(原理)

    一.NAT的产生 由于网络的飞速发展和网络应用的极速增多,致使IPv4可用地址空间逐渐枯竭.尽管IPv6可以在根本上解决地址枯竭问题,但IPv4发展到IPv6还需要一个过渡,而这便产生了NAT. 二. ...

  4. MySQL 数据类型简介 创建数据表及其字段约束

    数据类型介绍 MySQL 数据类型分类 整型 浮点型 字符类型(char与varchar) 日期类型 枚举与集合 具体数据类型见这篇博客 MySQL表操作中的约束 primary key 主键约束 非 ...

  5. NB-IOT无线帧结构和下行物理信道

    NB-IOT Downlink OFDM参数 1.下行基于OFDMA, FF点数=128,基带采样速率1.92MHz,子载波间距15kHz,有效带宽180kHz=1PRB OFDMA: 正交频分多址, ...

  6. systemd自启动tomcat

    tomcat自启动service [Unit] Description=Tomcat After=network.target [Service] Type=forking PIDFile=/usr/ ...

  7. DP tricks and experiences

    [LeetCode] 关于动态规划的经验与技巧. 很多时候多分配一位空间是为了递推的方便,例如前推两位. 辅助数组的索引,用到的可能是 1 — N,或者是 0 — N-1. 具体要看清 f[i] 每一 ...

  8. Python中的操作符及优先级

    附注: 1.  Python中的按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 按位与   ( bitwise and of x and y ) &  举例: 5 ...

  9. 广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B

    广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B注:域名B为afish.cnblogs.com 域名A页面代码:<!DOCTYPE html PUBLIC & ...

  10. hadoop/hbase/hive单机扩增slave

    原来只有一台机器,hadoop,hbase,hive都安装在一台机器上,现在又申请到一台机器,领导说做成主备, 要重新配置吗?还是原来的不动,把新增的机器做成slave,原来的当作master?网上找 ...