很多时候我们需要获得服务器的本地mac 地址信息用作 服务器身份的鉴别。但是由于不同服务器上往往配置了多个虚拟网卡,这会导致获取mac 地址的时候出现错误。一种可行的方法是 先列举服务器上可能的网卡类型配置 ,如 eth,lo等,但是在遇到设备名称不规范的情况下还是会出现错误,这里提供一种可行的方案。利用python 的 uuid 获取设备的MAC 地址(此方案 摘自宝塔面板 public.py 文件),具体实现方法如下(可在 《Linux C++获取系统信息、Md5、Base64 类》中的demo 文件基础上 修改其中的 BT_Public.cpp 文件中的 GetLocalMac 函数)
ofstream python("CpuMode.py");
python << "import uuid" << endl;
python << "mac=uuid.UUID(int = uuid.getnode()).hex[-12:]" <<endl;
python << "mac= \":\".join([mac[e:e+2] for e in range(0,11,2)])" << endl;
// 必须把mac 地址写入到文本二次读入,不能使用print 会因为python 版本不同产生兼容问题
python << "f = open('mac.txt', 'w')"<<endl;
python << "f.write(mac)"<<endl;
python << "f.close()"<<endl;
python.close();
system("python CpuMode.py");
char _buff[1024];
FILE *fp = fopen("mac.txt","r");
fread(_buff,1024,1,fp);
fclose(fp);
string buff=_buff;
buff=buff.substr(0,17);
remove("mac.txt");
remove("CpuMode.py");
return buff;