UNIX: разработка сетевых приложений, стр. 193
2 int 3 main(int argc, char **argv) 4 { 5 struct ifi_info *ifi, *ifihead; 6 struct sockaddr *sa; 7 u_char *ptr; 8 int i, family, doaliases; 9 if (argc != 3)10 err_quit("usage: prifinfo <inet4|inet6> <doaliases>");11 if (strcmp(argv[1], "inet4") == 0)12 family = AF_INET;13 else if (strcmp(argv[1], "inet6") == 0)14 family = AF_INET6;15 else16 err_quit("invalid <address-family>");17 doaliases = atoi(argv[2]);18 for (ifihead = ifi = Get_ifi_info(family, doaliases);19 ifi ! = NULL; ifi = ifi->ifi_next) {20 printf("%s: <", ifi->ifi_name);21 if (ifi->ifi_index != 0)22 printf("%d) ", ifi->ifi_index);23 printf("<");24 if (ifi->ifi_flags & IFF_UP) printf ("UP ");25 if (ifi->ifi_flags & IFF_BROADCAST) printf("BCAST ");26 if (ifi->ifi_flags & IFF_MULTICAST) printf("MCAST ");27 if (ifi->ifi_flags & IFF_LOOPBACK) printf("LOOP ");28 if (ifi->ifi_flags & IFF_POINTOPOINT) printf("P2P ");29 printf(">\n");30 if ((i = ifi->ifi_hlen) > 0) {31 ptr = ifi->ifi_haddr;32 do {33 printf("%s%x", (i == ifi->ifi_hlen) ? " " : ":", *ptr++);34 } while (--i > 0);35 printf("\n");36 }37 if (ifi->ifi_mtu != 0)38 printf(" MTU: %d\n". ifi->ifi_mtu);39 if ((sa = ifi->ifi_addr) != NULL)40 printf(" IP addr: %s\n", Sock_ntop_host(sa, sizeof(*sa)));41 if ((sa = ifi->ifi_brdaddr) != NULL)42 printf(" broadcast addr, %s\n",43 Sock_ntop_host(sa, sizeof(*sa)));44 if ((sa = ifi->ifi_dstaddr) != NULL)45 printf(" destination addr %s\n\",46 Sock_ntop_host(sa, sizeof(*sa)));47 }48 free_ifi_info(ifihead);49 exit(0);59 }18-47forget_ifi_infoifi_info20-36get_ifi_infoifi_hlen37-46Если мы запустим эту программу на нашем узле
macosxmacosx % <b>prifinfo inet4 0</b>lo0: <UP MCAST LOOP > MTU: 16384 IP addr: 127.0.0.1en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172.24.37.78 broadcast addr: 172.24.37.95Первый аргумент командной строки
inet4Если мы добавим к интерфейсу Ethernet (
en1macosx % <b>prifinfo inet4 1</b>lo0: <UP MCAST LOOP > MTU: 16384 IP addr: 127.0.0.1en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172.24.37.78 <i>первичный IP-адрес</i> broadcast addr: 172.24.37.95en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172.24.37.79 <i>первый псевдоним</i> broadcast addr: 172.24.37.95en1: <UP BCAST MCAST > MTU: 1500 IP addr: 172 24.37.80 <i>второй псевдоним</i> broadcast addr: 172.24 37.95