Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取本地IP和MAC地址C_C_Linux_Ip Address_Mac Address - Fatal编程技术网

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

如何获取本地IP和MAC地址C,c,linux,ip-address,mac-address,C,Linux,Ip Address,Mac Address,可能重复: 我正在尝试获取本地计算机的所有接口的IP和MAC地址,但我无法真正成功。我需要把它组装起来,这样我就知道哪个IP属于哪个MAC 我在谷歌上搜索了很多,甚至在这里,但我真的找不到这方面的C代码 你能帮帮我吗 提前谢谢!我真的很感激 在您的本地计算机上? 因为它是在linux下标记的,所以打开一个终端,然后键入ifconfig-a。 显示所有界面上的所有信息 在本地网络上,IP列在inet地址下。HWaddr是MAC地址。 对于外部IP,您必须使用脚本来获取它 编辑:如果要将其用于C程

可能重复:

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

我在谷歌上搜索了很多,甚至在这里,但我真的找不到这方面的C代码

你能帮帮我吗

提前谢谢!我真的很感激

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


编辑:如果要将其用于C程序,可以获取MAC地址


可以找到一个完整的示例。

刚刚发现这是可行的:

#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
void mac_eth0(未签名字符mac_str[13])
{
#定义HWADDR_len 6
int s,i;
结构ifreq-ifr;
s=插座(AF INET,SOCK DGRAM,0);
strcpy(ifr.ifr_名称,“eth0”);
ioctl(s、SIOCGIFHWADDR和ifr);

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

不重复,
getifaddrs()
不适用于硬件地址,只适用于IPOK,可能不精确,但结合了我的第一个链接,应该可以满足您的需要。我已经尝试了第二个链接,但它包含太多错误,我尝试过修复它,但我无法真正修复所有错误。使用C编程语言。我正在编写一个程序,这将是对于itOops,我刚刚了解到您也需要IP。为了便于从接口获取IP地址,我建议使用libpcap。第一个链接现在已断开,最好在您的答案中包含第二个链接的基本部分。sys目录是否也包含接口的当前IP地址?