我正在尝试获取本地计算机所有接口的 IP和MAC 地址,但我无法成功。我需要把它放在一起,所以我知道哪个IP属于哪个MAC。
我在google上进行了很多搜索,甚至在这里,但我真的找不到 C代码。
你能帮我吗?
提前致谢!我真的很感激!
答案 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程序