UDP struct ifreq和struct ifconf获取IP地址
(一)获得本地ip地址时要用到两个结构体ifconf和ifreq(#include net/if.h),和一个函数ioctl,ifconf是用来保存所有接口信息的,ifreq用来保存某个接口的信息,具体结构如下:
/*
* Interface request structure used for socket
* ioctl's.All interface ioctl's must have parameter ifconf通常是用来保存所有接口信息的
* definitions which begin with ifr_name. The
* remainder may be interface specific.
*/
struct ifreq {
#define IFHWADDRLEN 6
union
{
char ifrn_name[IFNAMSIZ]; /* 网络接口名称 如eth0 */
} ifr_ifrn;
union {
struct sockaddr ifru_addr; /* 本地ip地址 */
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr; /* 广播ip地址 */
struct sockaddr ifru_netmask; /* 本地子网掩码 */
struct sockaddr ifru_hwaddr; /* 本地MAC地址 */
short ifru_flags; /* 网络接口标记 */
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
void __user * ifru_data; /* 用户数据 */
struct if_settings ifru_settings;
} ifr_ifru;
};
#define ifr_name ifr_ifrn.ifrn_name /* interface name */
#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
#define ifr_addr ifr_ifru.ifru_addr /* address */
#<