DNS網域名稱和網路位址

2021-08-14 11:47:26 字數 2686 閱讀 6391

dns是對ip位址和網域名稱進行相互轉換的系統,其核心是dns伺服器。

dns所有計算機中都記錄著預設dns伺服器位址,就是通過這個預設dns伺服器得到相應網域名稱的ip位址資訊。在瀏覽器位址列中輸入網域名稱後,瀏覽器通過預設dns伺服器獲取該網域名稱對應的ip位址資訊,之後真正的接入**。

計算機內建的預設dns伺服器並不知道網路上所有網域名稱的ip位址資訊。若該dns伺服器無法解析,則會詢問其他dns伺服器,並提供給使用者。因為dns是層次化管理的一種分布式資料庫系統,當預設dns伺服器收到自己無法解析的請求時,向上級dns伺服器詢問。通過這種方式逐級向上傳遞資訊,達到頂級dns伺服器----根dns伺服器時,它知道向哪個dns伺服器詢問。

ip位址和網域名稱之間的轉換

1、利用網域名稱獲取ip位址

使用以下函式可以通過傳遞字串格式的網域名稱獲取ip位址

#includestruct hostent* gethostbyname(const char *hostname);

---成功時返回hostent結構體位址,失敗時返回null指標

struct hostent

h_name----該變數中存有官方網域名稱

h_aliases----可以通過多個網域名稱訪問同一主頁,同一ip可以繫結多個網域名稱。因此,除了官方網域名稱外還可指定其他網域名稱,這通過h_aliases獲得

h_addrtype----gethostbyname函式不僅支援ipv4還支援ipv6,因此可以通過此變數獲取儲存在h_addr_list的ip位址的位址族資訊。若是ipv4,則此變數存有af_inet。

h_length----儲存ip位址長度。若是ipv4,4個位元組,儲存4;ipv6時,因為16個位元組,故儲存16

h_addr_list----通過此變數以整數形式儲存網域名稱對應的ip位址。

#include#include#include#include#includevoid error_handling(char *message);

int main(int argc,char **argv)

host=gethostbyname(argv[1]);

if(!host)

error_handling("gethost error");

printf("official name:%s \n",host->h_name);

for(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");

for(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]));

return 0;

}void error_handling(char *message)

2、利用ip位址獲取網域名稱
#includestruct hostent *gethostbyaddr(const char* addr,socklen_t len,int family)

---成功時返回hostent結構體變數位址值,失敗時返回null指標

addr---含有ip位址資訊的in_addr結構體指標

len---向第乙個引數傳遞的位址資訊的位元組數,ipv4時為4,ipv6時為16

family---傳遞位址族資訊,ipv4時為af_inet,ipv6時為af_inet6

#include#include#include#include#include#includevoid error_handling(char *message);

int main()

memset(&addr,0,sizeof(addr));

addr.sin_addr.s_addr=inet_addr(argv[1]);

host=gethostbyaddr((char*)&addr.sin_addr,4,af_inet);

if(!host)

error_handling("gethost error");

printf("official name:%s \n",host->h_name);

for(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");

for(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]));

return 0;

}void error_handling(char *message)

網域名稱和網路位址

dns是對ip位址和網域名稱進行相互轉換的系統,其核心是dns伺服器。乙個ip位址可以對應多個網域名稱。通過電腦的控制套輸入如下指令 ping 網域名稱 如 www.baidu.com 就可以知到這一網域名稱的ip位址。nslookup 獲得預設的dns伺服器位址。計算機內建的預設dns伺服器並不知...

ip位址 網路位址 閘道器 網域名稱

網路位址 稱呼為網段位址更為準確,不過一般會叫網路位址 是一段ip的集合 eg192.168.3.0 閘道器 連線計算機網路的路由器的埠位址 乙個小型的計算機網路可以看成乙個蜘蛛窩 區域網 兩個蜘蛛窩之間要想有聯絡 資料交流 需要乙個手去傳遞資訊 路由器 那麼路由器對於乙個小蜘蛛窩來說就是乙個門 聯...

09 網域名稱及網路位址

測試環境 ubuntu 10.10 gcc版本 4.4.5 一 網域名稱系統 dns 1 dns是對ip位址和網域名稱進行相互轉換的系統,其核心是dns伺服器 2 網域名稱是用來替代ip位址,是賦予伺服器端的虛擬位址 3 linux下使用ping命令檢視網域名稱ip 如 ping www.baidu...