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...