而使用域名會(huì)方便很多,注冊(cè)后的域名只要每年續(xù)費(fèi)就永遠(yuǎn)屬" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 建站知識(shí) > 【編程黑科技】gethostbyname()函數(shù):通過(guò)域名獲取IP地址!

【編程黑科技】gethostbyname()函數(shù):通過(guò)域名獲取IP地址!

時(shí)間:2023-02-22 06:12:01 | 來(lái)源:建站知識(shí)

時(shí)間:2023-02-22 06:12:01 來(lái)源:建站知識(shí)

【編程黑科技】gethostbyname()函數(shù):通過(guò)域名獲取IP地址!:客戶端中直接使用 IP 地址會(huì)有很大的弊端,一旦 IP 地址變化(IP 地址會(huì)經(jīng)常變動(dòng)),客戶端軟件就會(huì)出現(xiàn)錯(cuò)誤。

而使用域名會(huì)方便很多,注冊(cè)后的域名只要每年續(xù)費(fèi)就永遠(yuǎn)屬于自己的,更換 IP 地址時(shí)修改域名解析即可,不會(huì)影響軟件的正常使用。

關(guān)于域名注冊(cè)、域名解析、host 文件、DNS 服務(wù)器等本節(jié)并未詳細(xì)講解,請(qǐng)讀者自行腦補(bǔ)。本節(jié)重點(diǎn)講解如何使用域名。

通過(guò)域名獲取IP地址

域名僅僅是 IP 地址的一個(gè)助記符,目的是方便記憶,通過(guò)域名并不能找到目標(biāo)計(jì)算機(jī),通信之前必須要將域名轉(zhuǎn)換成 IP 地址。

gethostbyname() 函數(shù)可以完成這種轉(zhuǎn)換,它的原型為:

struct hostent*gethostbyname(constchar*hostname);
hostname 為主機(jī)名,也就是域名。使用該函數(shù)時(shí),只要傳遞域名字符串,就會(huì)返回域名對(duì)應(yīng)的 IP 地址。

返回的地址信息會(huì)裝入 hostent 結(jié)構(gòu)體,該結(jié)構(gòu)體的定義如下:

struct hostent{ char *h_name; //official name char **h_aliases; //alias list int h_addrtype; //host address type int h_length; //address lenght char **h_addr_list; //address list}從該結(jié)構(gòu)體可以看出,不只返回 IP 地址,還會(huì)附帶其他信息,各位讀者只需關(guān)注最后一個(gè)成員 h_addr_list。下面是對(duì)各成員的說(shuō)明:

? h_name:官方域名(Official domain name)。官方域名代表某一主頁(yè),但實(shí)際上一些著名公司的域名并未用官方域名注冊(cè)。

? h_aliases:別名,可以通過(guò)多個(gè)域名訪問(wèn)同一主機(jī)。同一 IP 地址可以綁定多個(gè)域名,因此除了當(dāng)前域名還可以指定其他域名。

? h_addrtype:gethostbyname() 不僅支持 IPv4,還支持 IPv6,可以通過(guò)此成員獲取IP地址的地址族(地址類型)信息,IPv4 對(duì)應(yīng) AF_INET,IPv6 對(duì)應(yīng) AF_INET6。

? h_length:保存IP地址長(zhǎng)度。IPv4 的長(zhǎng)度為 4 個(gè)字節(jié),IPv6 的長(zhǎng)度為 16 個(gè)字節(jié)。

? h_addr_list:這是最重要的成員。通過(guò)該成員以整數(shù)形式保存域名對(duì)應(yīng)的 IP 地址。對(duì)于用戶較多的服務(wù)器,可能會(huì)分配多個(gè) IP 地址給同一域名,利用多個(gè)服務(wù)器進(jìn)行均衡負(fù)載。

hostent 結(jié)構(gòu)體變量的組成如下圖所示:

下面的代碼主要演示 gethostbyname() 的應(yīng)用,并說(shuō)明 hostent 結(jié)構(gòu)體的特性:

#include <stdio.h>#include <stdlib.h>#include <WinSock2.h>#pragma comment(lib, "ws2_32.lib")int main(){ WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), &wsaData); struct hostent *host = gethostbyname("www.baidu.com"); if(!host){ puts("Get IP address error!"); system("pause"); exit(0); } //別名 for(int i=0; host->h_aliases[i]; i++){ printf("Aliases %d: %s/n", i+1, host->h_aliases[i]); } //地址類型 printf("Address type: %s/n", (host->h_addrtype==AF_INET) ? "AF_INET": "AF_INET6"); //IP地址 for(int i=0; host->h_addr_list[i]; i++){ printf("IP addr %d: %s/n", i+1, inet_ntoa( *(struct in_addr*)host->h_addr_list[i] ) ); } system("pause"); return 0;}運(yùn)行結(jié)果:

Aliases 1: http://www.baidu.com
Address type: AF_INET
IP addr 1: 61.135.169.121
IP addr 2: 61.135.169.125


如果你還想更深入的學(xué)習(xí)以及其他知識(shí),不管你是轉(zhuǎn)行也好,初學(xué)也罷,進(jìn)階也可~

【值得關(guān)注】我的編程學(xué)習(xí)交流專欄:

C語(yǔ)言入門資料:

C語(yǔ)言必讀書(shū)籍:

關(guān)鍵詞:獲取,地址,通過(guò),函數(shù),科技

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉