網路程式設計遇到的小函式之inet_ntop 01
阿新 • • 發佈:2019-01-02
寫的一個小專案裡遇到的inet_ntop函式
通過一個域名獲得IP地址
查資料知道在網路地址資訊儲存在一個結構體叫做hostent
hostent成員 struct hostent { char *h_name; //主機名也就是所知的域名如www.baidu.com char **h_aliases; //主機所有別名構成的字串陣列,同一IP可繫結多個域名 int h_addrtype; //主要是IPV4 int h_length; //主機IP地址長度,IPV4地址為4,IPV6地址則為16 char **h_addr_list; // 主機的ip地址,以網路位元組序儲存,大端模式。要打印出這個IP,需要處理一下,inet_ntop函式就可以。 }
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
這個函式作用轉換網路二進位制結構到ASCII型別的地址也就是:將ip網路地址轉換成常用的點分十進位制ip地址
af:對應hostent結構體變數h_addrtype src:對應需要轉換的二進位制IP dst:IP對應是十進位制結果 cnt:dst長度限制Demo:
#include<stdio.h> #include <arpa/inet.h> #include <netdb.h> int main() { struct hostent *host; char str[32]={0}; char **pptr; host = gethostbyname("www.baidu.com"); printf("%s\n",inet_ntop(host->h_addrtype,host->h_addr,str,sizeof(str))); //host->h_addr對應一個IP可能是h_addr_list[0]
return 0;
}結果[email protected]:~$ ./p
61.135.169.121
一開始沒有新增標頭檔案#include<arpa/inet.h>
出現段錯誤現象,新增後就正常了。
估計是C語言裡有同名函式