Android P ioctl读取mac,ioctl获取本地IP和MAC地址

这段代码展示了如何使用C语言通过socket和ioctl函数获取指定网络接口(如eth0)的IP地址和MAC地址。首先创建一个UDP套接字,然后使用ioctl函数获取接口的地址信息,分别打印出IP和MAC地址。
摘要由CSDN通过智能技术生成

参考了一些网上的方法,整理如下:

#include

#include

#include

#include

#include

#include

#define ETH_NAME"eth0"

int main()

{

intsockfd;

struct sockaddr_insin;

struct ifreqifr;

unsigned charmac[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 sockaddrifr_addr;

struct sockaddr ifr_dstaddr;

struct sockaddr ifr_broadaddr;

struct sockaddr ifr_netmask;

struct sockaddr ifr_hwaddr;

shortifr_flags;

intifr_ifindex;

intifr_metric;

intifr_mtu;

struct ifmapifr_map;

charifr_slave[IFNAMSIZ];

charifr_newname[IFNAMSIZ];

char *ifr_data;

};

};

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值