Linux c++ 获取本地MAC 地址

很多时候我们需要获得服务器的本地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;
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注