您的位置:首页 > 其它

ioctl获取本地IP和MAC地址

2013-07-11 16:18 429 查看
参考了一些网上的方法,整理如下:

#include <net/if.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define ETH_NAME	"eth0"

int main()
{
int					sockfd;
struct sockaddr_in	sin;
struct ifreq		ifr;
unsigned char		mac[6];

sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if (sockfd == -1) {
perror("socket error");
exit(1);
}

strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);		//Interface name

if (ioctl(sockfd, SIOCGIFADDR, &ifr) == 0) {	//SIOCGIFADDR 获取interface address
memcpy(&sin, &ifr.ifr_addr, sizeof(ifr.ifr_addr));
printf("ip:  %s\n", inet_ntoa(sin.sin_addr));
}

if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) == 0) {	//SIOCGIFHWADDR 获取hardware address
memcpy(mac, ifr.ifr_hwaddr.sa_data, 6);
printf("mac: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}

return 0;
}

/*
struct ifreq {
char ifr_name[IFNAMSIZ];
union {
struct sockaddr	ifr_addr;
struct sockaddr ifr_dstaddr;
struct sockaddr ifr_broadaddr;
struct sockaddr ifr_netmask;
struct sockaddr ifr_hwaddr;
short			ifr_flags;
int				ifr_ifindex;
int				ifr_metric;
int				ifr_mtu;
struct ifmap	ifr_map;
char			ifr_slave[IFNAMSIZ];
char			ifr_newname[IFNAMSIZ];
char *			ifr_data;
};
};
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: