【问题标题】:How to get local IP and MAC address C [duplicate]如何获取本地IP和MAC地址C [重复]
【发布时间】:2011-10-09 16:26:57
【问题描述】:

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

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

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

你能帮帮我吗?

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

【问题讨论】:

  • 不重复,getifaddrs() 不适用于硬件地址,只是 IP
  • 好的,可能不准确,但是我的第一个链接和this one 的组合应该可以满足您的需要。
  • 第二个我已经试过了,但是错误太多了,我已经尝试修复它,但我无法真正修复所有错误。

标签: c linux ip-address mac-address


【解决方案1】:

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

编辑:Click Here 用于 C 程序

【讨论】:

  • 使用 C 编程语言。我正在编写一个程序,这将是它的一部分
【解决方案2】:

你可以得到MAC地址using the SIOCGIFADDR ioctl

可以在here找到一个完整的例子。

【讨论】:

  • 第一个链接现在已损坏,最好将第二个链接的基本部分包含在您的答案中。
【解决方案3】:

刚刚发现这是可行的:

#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;
}

【讨论】:

  • 糟糕,我刚刚读到您也需要 IP。对于从接口获取 IP 地址的可移植方式,我建议使用 libpcap。
【解决方案4】:

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

【讨论】:

  • sys目录是否也包含接口的当前IP地址?
猜你喜欢
  • 2012-11-16
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 1970-01-01
  • 2014-06-01
  • 2013-08-19
  • 1970-01-01
相关资源
最近更新 更多