如何使用C程序获得Linux中的接口的MAC地址?

我想在Linux中使用C程序来查找MAC地址。 怎么做?

Solutions Collecting From Web of "如何使用C程序获得Linux中的接口的MAC地址?"

1分钟搜索谷歌:(我没有测试它自己,我正在一个Windows机器的时刻)

/* * gethwaddr.c * * Demonstrates retrieving hardware address of adapter using ioctl() * * Author: Ben Menking <bmenking@highstream.net> * */ #include <stdio.h> #include <sys/ioctl.h> #include <sys/types.h> #include <sys/socket.h> #include <net/if.h> int main( int argc, char *argv[] ) { int s; struct ifreq buffer; s = socket(PF_INET, SOCK_DGRAM, 0); memset(&buffer, 0x00, sizeof(buffer)); strcpy(buffer.ifr_name, "eth0"); ioctl(s, SIOCGIFHWADDR, &buffer); close(s); for( s = 0; s < 6; s++ ) { printf("%.2X ", (unsigned char)buffer.ifr_hwaddr.sa_data[s]); } printf("\n"); return 0; } 

有一个伟大的图书馆来管理以太网。 如果你想要去低级别的东西,它肯定值得学习。 学习C API非常困难。

Lib PCAP。

链接到lib pcap sourceforge

一些示例代码:

 #include <pcap.h> #include <stdlib.h> #include <netinet/ip.h> #include <netinet/if_ether.h> void find_eth_addr(struct in_addr *search_ip, const struct pcap_pkthdr* pkthdr, const u_char *packet) { struct ether_header *eth_hdr = (struct ether_header *)packet; if (ntohs(eth_hdr->ether_type) == ETHERTYPE_IP) { struct ip *ip_hdr = (struct ip *)(packet + sizeof(struct ether_header)); if (ip_hdr->ip_dst.s_addr == search_ip->s_addr) print_eth_addr(eth_hdr->ether_dhost); if (ip_hdr->ip_src.s_addr == search_ip->s_addr) print_eth_addr(eth_hdr->ether_shost); } } 

还有像DNET一样好的“内核函数包装器”

它提供了很好的功能,可以在低层网络上使用它。 (也获得MAC地址)。

DNET

这两个库都有UNIX和win端口。