根據《UNIX環境高級編程(第二版)》(相關閱讀:http://www.linuxidc.com/Linux/2011-04/34662.htm)的相關章節的描述,編寫了這個程序,以驗證對所學知識的理解是否正確。
- /*
- * 獲取某個域名的ip地址,以列表形式打印。
- *
- * 作者: nswish
- * 2012-01-30
- *
- * 在如下環境編譯通過:
- * KUbuntu 11.1
- * gcc version 4.6.1
- */
- #include <stdio.h>
- #include <netdb.h>
- #include <stdlib.h>
-
- main(int argc, char *argv[]){
- struct addrinfo * res, *pt;
- struct sockaddr_in *sinp;
- const char *addr;
- char abuf[INET_ADDRSTRLEN];
- int succ=0,i=0;
-
- if(argc == 1)
- {
- printf("USAGE: getip <server name>\nFor example:\n getip www.google.com\n");
- exit(1);
- }
-
- succ = getaddrinfo(argv[1], NULL, NULL, &res);
- if(succ != 0)
- {
- printf("Can't get address info! error code = %d", succ);
- exit(succ);
- }
-
- for(pt=res, i=0; pt != NULL; pt=pt->ai_next, i++){
- sinp = (struct sockaddr_in *)pt->ai_addr;
- addr = (const char *)inet_ntop(AF_INET, &sinp->sin_addr, abuf, INET_ADDRSTRLEN);
- printf("%2d. IP=%s\n", i, addr);
- }
- }
將以上代碼保存在名為getip.c的文件中,然後使用命令 gcc getip.c -o getip。
如果系統中沒有gcc編譯程序,可執行sudo apt-get install gcc來安裝。