获取系统mac地址,及地址


package com.btlh.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


/**
* 类功能说明 TODO:获取物理地址
* 类修改者
* 修改日期
* 修改说明
* <p>Title: GetMacAddressUtil.java</p>
* <p>Description:XXXXX</p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company:XXXXX有限公司</p>
* @author lsy xxxxxxx
* @date 2013-5-2 下午1:48:52
* @version V1.0
*/

public class GetMacAddressUtil
{
/**
* 获取当前操作系统名称.
* return 操作系统名称 例如:windows,Linux,Unix等.
*/
public static String getOSName()
{
return System.getProperty("os.name").toLowerCase();
}

/**
* 获取Unix网卡的mac地址.
* @return mac地址
*/
public static String getUnixMACAddress()
{
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try
{
/**
* Unix下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ifconfig eth0");
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null)
{
/**
* 寻找标示字符串[hwaddr]
*/
index = line.toLowerCase().indexOf("hwaddr");
/**
* 找到了
*/
if (index != -1)
{
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index + "hwaddr".length() + 1).trim();
break;
}
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (bufferedReader != null)
{
bufferedReader.close();
}
} catch (IOException e1)
{
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}

return mac;
}

/**
* 获取Linux网卡的mac地址.
*
* @return mac地址
*/
public static String getLinuxMACAddress()
{
String mac = null;
BufferedReader bufferedReader = null;
Process process = null;
try
{
/**
* linux下的命令,一般取eth0作为本地主网卡 显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ifconfig eth0");
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null)
{
index = line.toLowerCase().indexOf("硬件地址");
/**
* 找到了
*/
if (index != -1)
{
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index + 4).trim();
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
{
/**
* windows下的命令,显示信息中包含有mac地址信息
*/
process = Runtime.getRuntime().exec("ipconfig /all");
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
int index = -1;
while ((line = bufferedReader.readLine()) != null)
{
/**
* 寻找标示字符串[physical address]
*/
index = line.toLowerCase().indexOf("physical address");
if (index != -1)
{
index = line.indexOf(":");
if (index != -1)
{
/**
* 取出mac地址并去除2边空格
*/
mac = line.substring(index + 1).trim();
}
break;
}
}
} catch (IOException e)
{
e.printStackTrace();
} finally
{
try
{
if (bufferedReader != null)
{
bufferedReader.close();
}
} catch (IOException e1)
{
e1.printStackTrace();
}
bufferedReader = null;
process = null;
}

return mac;
}


//WindowsCmd ="cmd.exe /c echo %NUMBER_OF_PROCESSORS%";//windows的特殊
//SolarisCmd = {"/bin/sh", "-c", "/usr/sbin/psrinfo | wc -l"};
//AIXCmd = {"/bin/sh", "-c", "/usr/sbin/lsdev -Cc processor | wc -l"};
//HPUXCmd = {"/bin/sh", "-c", "echo \"map\" | /usr/sbin/cstm | grep CPU | wc -l "};
//LinuxCmd = {"/bin/sh", "-c", "cat /proc/cpuinfo | grep ^process | wc -l"};

/**
* 测试用的main方法.
*
* @param argc
* 运行参数.
*/
public static void main(String[] argc )
{
String os = getOSName();
System.out.println(os);
if (os.startsWith("windows"))
{
String mac = getWindowsMACAddress();
System.out.println("本地是windows:" + mac);
} else if (os.startsWith("linux"))
{
String mac = getLinuxMACAddress();
System.out.println("本地是Linux系统,MAC地址是:" + mac);
} else
{
String mac = getUnixMACAddress();
System.out.println("本地是Unix系统 MAC地址是:" + mac);
}
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言可以通过使用WindowsLinux操作系统提供的相关 API 来获取本机的 CPUID 和 MAC 地址。 首先,我们可以通过Windows API函数`GetSystemInfo()`获取CPUID。示例代码如下: ```c #include <stdio.h> #include <windows.h> void main() { SYSTEM_INFO sys_info; GetSystemInfo(&sys_info); printf("CPU ID: %x %x %x %x\n", sys_info.dwProcessorType, sys_info.dwPageSize, sys_info.dwActiveProcessorMask, sys_info.dwNumberOfProcessors); } ``` 然后,我们可以通过使用Windows API函数`GetAdaptersInfo()`来获取本机的 MAC 地址。示例代码如下: ```c #include <stdio.h> #include <windows.h> #include <iphlpapi.h> #pragma comment(lib, "iphlpapi.lib") void main() { IP_ADAPTER_INFO adapter_info[16]; DWORD buf_len = sizeof(adapter_info); if (GetAdaptersInfo(adapter_info, &buf_len) == ERROR_SUCCESS) { PIP_ADAPTER_INFO curr_adapter = adapter_info; while (curr_adapter != NULL) { printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", curr_adapter->Address[0], curr_adapter->Address[1], curr_adapter->Address[2], curr_adapter->Address[3], curr_adapter->Address[4], curr_adapter->Address[5]); curr_adapter = curr_adapter->Next; } } } ``` 对于Linux操作系统,我们可以使用`sys/sysinfo.h`和`ifaddrs.h`头文件来获取 CPUID 和 MAC 地址。示例代码如下: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/sysinfo.h> #include <ifaddrs.h> #include <netinet/in.h> #include <arpa/inet.h> #include <net/if.h> #include <string.h> void main() { struct sysinfo sys_info; if (sysinfo(&sys_info) == 0) { printf("CPU ID: %08x\n", (unsigned int)sys_info.processor_id[0]); } struct ifaddrs* ifaddr, *ifa; if (getifaddrs(&ifaddr) == 0) { for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) { if (ifa->ifa_addr == NULL || ifa->ifa_addr->sa_family != AF_PACKET) continue; struct sockaddr_ll* s = (struct sockaddr_ll*)ifa->ifa_addr; unsigned char mac[6]; memcpy(mac, s->sll_addr, 6); printf("MAC Address: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } freeifaddrs(ifaddr); } } ``` 需要注意的是,在使用这些API函数时,可能需要添加某些特定的库文件或在编译选项中指定相关的库文件,具体需要根据不同的操作系统和编译环境来进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值