09 網域名稱及網路位址

2021-10-02 16:59:00 字數 3035 閱讀 3226

測試環境:ubuntu 10.10

gcc版本:4.4.5

一、網域名稱系統(dns)

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

2)網域名稱是用來替代ip位址,是賦予伺服器端的虛擬位址

3)linux下使用ping命令檢視網域名稱ip

如:ping www.baidu.com

ping www.a.shifen.com (39.156.66.14) 56(84) bytes of data.

64 bytes from 39.156.66.14: icmp_req=1 ttl=128 time=7.26 ms

64 bytes from 39.156.66.14: icmp_req=2 ttl=128 time=7.52 ms

***@***-vm:~$ nslookup

> server

default server: 192.168.***.***

address: 192.168.***.***#pp

5)dns是一種分布式的資料庫管理系統(本機dns伺服器無法解析網域名稱ip位址時會逐級上傳,當到達頂級dns伺服器時,會知道向哪個dns伺服器詢問,獲取到解析結果後,會原路返回)

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

1)程式中有必要使用網域名稱嗎?

客戶端通過ip連線服務端。當伺服器端ip更換後,客戶端連線伺服器的ip也應該改變。為此,利用網域名稱獲取伺服器端ip位址後,再連線伺服器。這種方式可以減小對ip位址的依賴。

2)利用網域名稱獲取ip位址

* 介紹gethostbyname函式

函式原型:struct hostent* gethostbyname(const char* hostname);

* 介紹結構體hosten

struct hostent

;

* gethostbyname函式示例**

#include #include #include #include #include void errorhandling(const char* message);

int main(int argc, char* ar**)

host = gethostbyname(ar**[1]);

if(!host)

errorhandling("gethostbyname() error");

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

for(i = 0; host->h_aliases[i]; i++)

printf("address type: %s\n", (host->h_addrtype == af_inet) ? "af_inet" : "af_inet6");

for(i = 0; host->h_addr_list[i]; i++)

return 0;

}void errorhandling(const char *message)

操作:

1)編譯:gcc gethostbyname.c -o gethostbyname.out,執行:./gethostbyname.out www.baidu.com

ip addr 2:39.156.66.143)利用ip位址獲取網域名稱

* 介紹gethostbyaddr函式

函式原型:struct hostent* gethostbyaddr(const char* addr, socklen_t len, int family);

引數:addr——含有ip位址資訊的in_addr結構體指標

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

famlily——傳遞位址族資訊,ipv4時為af_inet,ipv6時為af_inet6

* gethostbyaddr函式示例**

#include #include #include #include #include #include void errorhandling(const char* message);

int main(int argc, char* ar**)

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

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

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

if(!host)

errorhandling("gethostbyaddr() error");

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

for(i = 0; host->h_aliases[i]; i++)

printf("address type: %s\n", (host->h_addrtype == af_inet) ? "af_inet" : "af_inet6");

for(i = 0; host->h_addr_list[i]; i++)

return 0;

}void errorhandling(const char *message)

操作:

1)編譯:gcc gethostbyaddr.c -o gethostbyaddr.out,執行:./gethostbyaddr.out 93.46.8.89

official name: 93-46-8-89.ip105.fastwebnet.it

address type: af_inet

ip addr 1: 93.46.8.89

網域名稱和網路位址

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

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

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

DNS網域名稱和網路位址

dns是對ip位址和網域名稱進行相互轉換的系統,其核心是dns伺服器。dns所有計算機中都記錄著預設dns伺服器位址,就是通過這個預設dns伺服器得到相應網域名稱的ip位址資訊。在瀏覽器位址列中輸入網域名稱後,瀏覽器通過預設dns伺服器獲取該網域名稱對應的ip位址資訊,之後真正的接入 計算機內建的預...