主要的头文件:
#include <sys/ioctl.h>
#include <net/if.h>
主要的数据结构:struct ifreq 和 struct
struct ifreq {
char ifr_name[IFNAMSIZ]; /* Interface name */
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;
};
};
struct ifconf {
int ifc_len; /* size of buffer */
union {
char *ifc_buf; /* buffer address */
struct ifreq *ifc_req; /* array of structures */
};
};
方法:利用ioctl 向网卡设备发送控制配置命令
ioctl(socket_fd, SIOCGIFADDR, &ifr) //获取ip地址,存放在ifr.ifr_addr里面,不过貌似其他地址成员可以
ioctl(socket_fd, SIOCGIFHWADDR, &ifr) //获取mac地址,存放在ifr.ifr_hwaddr里面