測試環境: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位址資訊,之後真正的接入 計算機內建的預...