2024年2月20日发(作者:)
#ifndef IFNAMSIZ
#define IFNAMSIZ 16
#endif char ifr_name[IFNAMSIZ];
union {
struct sockaddr ifru_addr;
struct sockaddr ifru_dstaddr;
struct sockaddr ifru_broadaddr;
__ulong32_t ifru_flags;
int ifru_metric;
caddr_t ifru_data;
u_short ifru_site6;
__ulong32_t ifru_mtu;
int ifru_baudrate;
} ifr_ifru;
Following macros are provided for convenience
#define ifr_addr ifr__addr /* address */
#define ifr_dstaddr ifr__dstaddr /* other end of p-to-p link */
#define ifr_broadaddr ifr__broadaddr /* broadcast address */
#define ifr_flags ifr__flags /* flags */
#define ifr_metric ifr__metric /* metric */
#define ifr_data ifr__data /* for use by interface */
#define ifr_site6 ifr__site6 /* IPv6 site index */
#define ifr_mtu ifr__mtu /* mtu of interface */
#define ifr_isno ifr__data /* pointer to if_netopts */
#define ifr_baudrate ifr__baudrate /* baudrate of interface */
};/*
* Structure used in SIOCGIFCONF request.
* Used to retrieve interface configuration
* for machine (useful for programs which
* must know all networks accessible). */
struct ifconf {
int ifc_len; /* size of associated buffer */
union {
caddr_t ifcu_buf;
struct ifreq *ifcu_req;
} ifc_ifcu; Following macros are provided for convenience
#define ifc_buf ifc__buf /* buffer address */#define ifc_req ifc__req /* array of structures returned */
};
void print_ips(struct ifconf *ifc){
char *cp,*cplim,addr[INET6_ADDRSTRLEN];
struct ifreq *ifr=ifc->ifc_req;
cp=(char *)ifc->ifc_req;
cplim=cp+ifc->ifc_len;
for(;cp
/* NOTE: You cannot just increment cp with sizeof(struct ifreq)
* as structures returned are of different length. */
ifr=(struct ifreq *)cp;
printf("%s :",ifr->ifr_name);
getip(ifr,addr);
printf("%s/n",addr);
}
return ;
}
main {
struct ifconf ifc;
int sd;
sd=socket(AF_INET6,SOCK_DGRAM,0);
alloc_buffer_size(sd,&ifc);
print_ips(&ifc);
}


发布评论