如何获取本地IP和MAC地址C.

时间:2011-07-20 19:20:52

标签: c linux ip-address mac-address

  

可能重复:
  Linux / C++: Get the IP Address of local computer

我正在尝试获取本地计算机所有接口 IP和MAC 地址,但我无法成功。我需要把它放在一起,所以我知道哪个IP属于哪个MAC。

我在google上进行了很多搜索,甚至在这里,但我真的找不到 C代码

你能帮我吗?

提前致谢!我真的很感激!

4 个答案:

答案 0 :(得分:9)

在相对较新版本的Linux上,您只需读取/sys/class/net/eth0/address的内容(替换eth0的任何网络接口名称)即可获取接口的硬件地址。

答案 1 :(得分:7)

刚刚发现这个有效:

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <stdio.h>
#include <string.h>

void mac_eth0(unsigned char MAC_str[13])
{
    #define HWADDR_len 6
    int s,i;
    struct ifreq ifr;
    s = socket(AF_INET, SOCK_DGRAM, 0);
    strcpy(ifr.ifr_name, "eth0");
    ioctl(s, SIOCGIFHWADDR, &ifr);
    for (i=0; i<HWADDR_len; i++)
        sprintf(&MAC_str[i*2],"%02X",((unsigned char*)ifr.ifr_hwaddr.sa_data)[i]);
    MAC_str[12]='\0';
    close(s);
}

int main(int argc, char *argv[])
{
    unsigned char mac[13];

    mac_eth0(mac);
    puts(mac);

    return 0;
}

答案 2 :(得分:2)

您可以获取MAC地址using the SIOCGIFADDR ioctl

可以找到完整的示例here

答案 3 :(得分:1)

在您的本地计算机上? 因为它是在linux下标记的,所以打开一个终端,输入ifconfig -a。 这将显示所有接口上的所有信息 在本地网络上,您的IP列在inet地址下.HWaddr是MAC地址。 对于外部IP,您必须使用脚本来获取它。

编辑:Click Here将其用于C程序