Java获取本机MAC地址/IP地址/主机名

时间:2021-10-03 03:28:46
  由于前面提到的找“qa-qd-61-151”主机名的问题,所以对Java获取主机名的东西进行了学习,顺便了解了一下Java获取MAC地址/IP地址等的方法。
根据参考资料中的两篇文章,整合了以下,实现了Java获取MAC地址/IP地址/主机名的功能。实现原理如下:
IP地址和主机名时直接调用
java.net.InetAddress 这个类中的方法来实现的;而MAC地址,区分Windows和Unix两种操作系统,分别用"ipconfig /all"和"ifconfig eth0"命令来获取输出,然后对其进行解析,找到MAC地址的位置。如果操作系统的语言不同,解析里面的内容也时有差别的;另外如果网卡不是eth0, 也需要相应的修改,需要根据自己实际应用场景进行修改的。
代码如下:
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.InetAddress;import java.net.UnknownHostException;
/** * @className: SystemTool * @description: 与系统相关的一些常用工具方法. 目前实现的有:获取MAC地址、IP地址、主机名 * @author: 笑遍世界 * @createTime: 2010-11-13 下午08:03:44 */public class SystemTool {
/*** 获取当前操作系统名称.* return 操作系统名称 例如:windows xp,linux 等.*/public static String getOSName() {return System.getProperty("os.name").toLowerCase();}/*** 获取unix网卡的mac地址.* 非windows的系统默认调用本方法获取.如果有特殊系统请继续扩充新的取mac地址方法.* @return mac地址*/public static String getUnixMACAddress() {String mac = null;BufferedReader bufferedReader = null;Process process = null;try {process = Runtime.getRuntime().exec("ifconfig eth0");// linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line = null;int index = -1;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();}bufferedReader = null;process = null;}
return mac;}
/*** 获取widnows网卡的mac地址.* @return mac地址*/public static String getWindowsMACAddress() {String mac = null;BufferedReader bufferedReader = null;Process process = null;try {process = Runtime.getRuntime().exec("ipconfig /all");// windows下的命令,显示信息中包含有mac地址信息bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line = null;int index = -1;while ((line = bufferedReader.readLine()) != null) {index = line.toLowerCase().indexOf("physical address");// 寻找标示字符串[physical address]if (index >= 0) {// 找到了index = line.indexOf(":");// 寻找":"的位置if (index>=0) {mac = line.substring(index + 1).trim();//  取出mac地址并去除2边空格}break;}}} catch (IOException e) {e.printStackTrace();} finally {try {if (bufferedReader != null) {bufferedReader.close();}} catch (IOException e1) {e1.printStackTrace();}bufferedReader = null;process = null;}
return mac;}/*** @return  本机主机名*/public static String getHostName() {InetAddress ia = null;try {ia = InetAddress.getLocalHost();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();if (ia == null ) {return "some error..";}else return ia.getHostName();}/*** @return  本机IP 地址*/public static String getIPAddress() {InetAddress ia = null;try {ia = InetAddress.getLocalHost();} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.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.startsWith("windows")){//本地是windowsString mac = getWindowsMACAddress();System.out.println("MAC Address:"+mac);}else{//本地是非windows系统 一般就是unixString 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");// 获取计算机域名