精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

編程實戰(zhàn):如何在程序中解析域名

網(wǎng)絡(luò) 通信技術(shù)
網(wǎng)絡(luò)應(yīng)用客戶端想要跟服務(wù)端通信,必須先向 DNS 服務(wù)器查詢域名對應(yīng)的 IP 地址。舉個例子,讀者訪問我的網(wǎng)站 fasionchan.com 時,瀏覽器需要先根據(jù)域名查詢網(wǎng)站的 IP 地址,再和網(wǎng)站的 Web 服務(wù)器進行通信。

[[403061]]

本文轉(zhuǎn)載自微信公眾號「小菜學編程」,作者fasionchan。轉(zhuǎn)載本文請聯(lián)系小菜學編程公眾號。

由于域名比 IP 地址更便于記憶,我們通常使用它來訪問網(wǎng)絡(luò)服務(wù)。

網(wǎng)絡(luò)應(yīng)用客戶端想要跟服務(wù)端通信,必須先向 DNS 服務(wù)器查詢域名對應(yīng)的 IP 地址。舉個例子,讀者訪問我的網(wǎng)站 fasionchan.com 時,瀏覽器需要先根據(jù)域名查詢網(wǎng)站的 IP 地址,再和網(wǎng)站的 Web 服務(wù)器進行通信。

那么,如何通過編程實現(xiàn)域名查詢呢?這是開發(fā)網(wǎng)絡(luò)應(yīng)用無法回避的問題。

我們知道,DNS 服務(wù)器和客戶端之間使用 DNS 協(xié)議進行通信:客戶端先向服務(wù)器發(fā)送 請求報文 ,服務(wù)器將查詢結(jié)果封裝成 應(yīng)答報文 ,回復客戶端。DNS 可以使用 UDP 或 TCP 作為傳輸層協(xié)議,通信端口號為 53 。

假設(shè)客戶端使用 UDP 協(xié)議,一次域名查詢的步驟大致如下:

  1. 創(chuàng)建一個 UDP 套接字;
  2. 封裝 DNS 請求報文,待查詢域名位于問題節(jié);
  3. 通過 UDP 套接字,將請求報文發(fā)給 DNS 服務(wù)器(服務(wù)端端口一般是 53 );
  4. 等待服務(wù)端響應(yīng),并從 UDP 套接字讀取應(yīng)答報文;
  5. 解析應(yīng)答報文,獲得查詢結(jié)果;
  6. 關(guān)閉 UDP 套接字;

如果每個網(wǎng)絡(luò)應(yīng)用都需要自行封裝 DNS 報文實現(xiàn)域名查詢,未免太麻煩了!為此,C庫提供了一系列工具函數(shù)。應(yīng)用程序只需調(diào)用這些工具函數(shù),即可完成域名查詢,不用自己操作套接字,或者封裝 DNS 報文。

示例程序

這個程序調(diào)用 C 庫函數(shù) gethostbyname ,將用戶在命令行參數(shù)中指定的域名查詢出來:

  1. #include <arpa/inet.h> 
  2. #include <netdb.h> 
  3. #include <stdio.h> 
  4.  
  5. int main(int argc, char *argv[]) { 
  6.     if (argc != 2) { 
  7.         fprintf(stderr, "bad arguments"); 
  8.         return -1; 
  9.     } 
  10.  
  11.     char *name = argv[1]; 
  12.     printf("resolve domain name: %s\n"name); 
  13.  
  14.     struct hostent *result = gethostbyname(name); 
  15.     if (result == NULL) { 
  16.         if (h_errno == HOST_NOT_FOUND) { 
  17.             fprintf(stderr, "Hostname not found!\n"); 
  18.         } 
  19.  
  20.         if (h_errno == NO_DATA) { 
  21.             fprintf(stderr, "No such record\n"); 
  22.         } 
  23.  
  24.         if (h_errno == NO_RECOVERY) { 
  25.             fprintf(stderr, "\n"); 
  26.         } 
  27.  
  28.         if (h_errno == TRY_AGAIN) { 
  29.             fprintf(stderr, "Temporary error occurred, please try again!\n"); 
  30.         } 
  31.  
  32.         return -1; 
  33.     } 
  34.  
  35.     int i = 0; 
  36.     while (result->h_addr_list[i] != NULL) { 
  37.         printf("IP: %s\n", inet_ntoa(*(struct in_addr *)result->h_addr_list[i])); 
  38.         i++; 
  39.     } 
  40.  
  41.     return 0; 

顧名思義,gethostbyname 根據(jù)域名查詢主機的地址,結(jié)果一般是 IP 地址或者 IPv6 地址。

請看程序第 14 行,以待查詢域名為參數(shù)調(diào)用 gethostbyname 函數(shù);它返回一個 hostent 結(jié)構(gòu)體指針,結(jié)構(gòu)體中保存著域名查詢結(jié)果。

第 15-33 行,檢查域名解析結(jié)果,空表示出錯;出錯時根據(jù) h_errno 的值,分情況處理(詳情請見后文)。

第 35-39 行,從 hostent 結(jié)構(gòu)體中取出查詢結(jié)果,并打印到屏幕上。

那么, gethostbyname 庫函數(shù)內(nèi)部都做了些什么呢?答案其實不難猜到。它會幫我們創(chuàng)建 UDP 套接字、發(fā)送 DNS 請求報文、接收并解析應(yīng)答報文。以這個程序為例,它的執(zhí)行流(藍線)大致如下:

域名查詢庫函數(shù)

實際上,C 庫提供了一系列工具函數(shù),用于域名查詢:

  • gethostbyname ,查詢指定域名,查詢結(jié)果保存在 hostent 結(jié)構(gòu)體中,指針被返回給調(diào)用者;
  • gethostbyname_r ,同上,為線程安全版本,可在多線程環(huán)境中使用;
  • gethostbyname2 ,同一,但支持通過 af 參數(shù)指定查詢地址類型;
  • gethostbyname2_r ,同三,為線程安全版本,可在多線程環(huán)境中使用;

以 gethostbyname 為例,如果查詢成功,它將返回一個 hostent 結(jié)構(gòu)體指針,結(jié)構(gòu)體保存著查詢結(jié)果。如果查詢出錯,它將返回 NULL ,并將錯誤保存 h_errno 全局變量。一般而言,域名查詢出錯,可以分為這幾種情況:

HOST_NOT_FOUND ,表示指定主機不存在,即域名不存在;

NO_DATA ,表示域名存在其他記錄,但沒有地址相關(guān)記錄( A 或者 AAAA );

NO_RECOVERY ,域名服務(wù)器出現(xiàn)不可恢復錯誤;

TRY_AGAIN ,臨時出錯,可通過重試恢復;

當域名查詢失敗時,調(diào)用者必須檢查 h_errno 變量,分情況進行處理。

局限性

在網(wǎng)絡(luò)爬蟲、Socks5 代理等應(yīng)用場景,域名查詢非常頻繁。這時直接使用 gethostbyname 系列庫函數(shù),很有可能會面臨性能瓶頸。

一方面,gethostbyname 庫函數(shù)每次查詢域名時,都要創(chuàng)建一個 UDP 套接字來跟 DNS 服務(wù)器通信。這意味著,頻繁的域名查詢背后,必然伴隨著大量套接字的創(chuàng)建和銷毀,開銷可想而知!

另一方面,gethostbyname 庫函數(shù)將一直阻塞,直到 DNS 服務(wù)器返回結(jié)果或者查詢超時。這將嚴重制約系統(tǒng)的并發(fā)處理能力。

因此,在高頻查詢場景,不能直接使用 gethostbyname 等庫函數(shù),必須采用一些經(jīng)過優(yōu)化的異步域名解析庫。

擴展閱讀

 

gethostbyname

 

責任編輯:武曉燕 來源: 小菜學編程
相關(guān)推薦

2023-12-28 10:30:56

類型系統(tǒng)Rust

2009-06-08 21:35:02

Java啟動程序

2021-09-16 17:38:49

UbuntuLinuxJava

2016-07-29 11:21:16

Ubuntulinux程序

2018-12-29 09:45:28

Linux編程語言命令

2021-09-13 09:01:02

Vue 技巧 開發(fā)工具

2014-05-28 09:45:55

CentOS域名服務(wù)器

2023-09-27 23:24:50

C++鏈表

2018-10-29 10:13:29

Windows 10應(yīng)用程序卸載

2019-03-27 13:20:31

Windows 10更新驅(qū)動程序

2018-08-27 14:50:46

LinuxShellBash

2022-04-01 07:35:45

IDEAJavaWeb 項目

2010-05-20 17:52:02

2015-08-31 13:42:06

IDEDockerdoclipser

2018-06-05 08:51:04

Linux結(jié)束進程中止程序

2021-09-14 12:34:33

LinuxLinux終端

2021-08-30 07:50:42

腳本語言命令行

2020-08-28 07:00:00

WSLLinuxWindows 10

2024-01-15 07:15:05

函數(shù)式編程代碼
點贊
收藏

51CTO技術(shù)棧公眾號

日韩av自拍| 欧美理论片在线播放| 日本中文字幕一区二区视频| 一本一本久久a久久精品综合小说| 国产精品99久久免费黑人人妻| 国产精品一级黄片| gogo亚洲高清大胆美女人体| 欧美国产日产图区| 成人免费视频观看视频| 狠狠人妻久久久久久综合| 天天操夜夜操国产精品| 亚洲国产精品久久久久久| 亚洲中文字幕无码不卡电影| 国产在线高清理伦片a| 国产精品毛片在线看| 中文字幕av日韩| www.啪啪.com| 日本电影久久久| 午夜激情综合网| 亚洲精品无人区| 黄色片视频免费| 欧美 日韩 国产 一区| 亚洲欧美日韩久久久久久 | 另类小说欧美激情| 97国产精品视频人人做人人爱| 欧美人妻一区二区三区 | 久久久一本精品99久久精品66| 亚洲天堂手机版| 91久久中文| 久久中文字幕在线| 久久久久久国产免费a片| 精品久久ai| 制服丝袜中文字幕亚洲| 能看的毛片网站| 国产污视频在线播放| 亚洲精品视频在线观看网站| 欧美性xxxx69| 四虎在线免费观看| 99视频一区二区三区| 91色p视频在线| 中国老头性行为xxxx| 久久婷婷一区| 69久久夜色精品国产69| 青青草偷拍视频| 久久精品影视| 俺去亚洲欧洲欧美日韩| 四虎影视1304t| av永久不卡| 国产一区二区三区丝袜| 爱爱免费小视频| 日本成人7777| 日韩电影在线观看中文字幕 | 91蜜桃视频在线| 国产一区自拍视频| 乱色精品无码一区二区国产盗| 国产精品一区不卡| 91九色偷拍| www.四虎在线观看| 丁香婷婷综合网| 国产另类第一区| 色婷婷av一区二区三区之红樱桃 | 国产精品手机在线观看| 国产精品一线| 亚洲精品成a人在线观看| 久久人妻少妇嫩草av无码专区| 九九热播视频在线精品6| 欧美videofree性高清杂交| 亚洲成人精品在线播放| 国产乱人伦精品一区| 日韩一级大片在线观看| 无码av免费精品一区二区三区| 1204国产成人精品视频| 亚洲激情在线观看视频免费| 久久久久麻豆v国产精华液好用吗| 欧美久久香蕉| 亚洲性日韩精品一区二区| 精品国产成人亚洲午夜福利| 日韩夫妻性生活xx| 久久亚洲精品一区二区| 免费在线观看日韩| 老鸭窝毛片一区二区三区| 日韩免费av片在线观看| 久久精品国产亚洲av麻豆蜜芽| 美女任你摸久久| 91在线|亚洲| 人妻一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整 | 每日在线观看av| 黑人巨大亚洲一区二区久| 欧美日韩在线三区| 91福利视频免费观看| 欧美成a人免费观看久久| 国产亚洲精品久久久久久| 亚洲天堂网av在线| 亚洲巨乳在线| 国产精品午夜视频| 亚洲乱码在线观看| 久久嫩草精品久久久精品一| 一区精品在线| 成人国产电影在线观看| 欧美日韩国产精品成人| 亚洲欧美日本一区二区三区| 精品女人视频| 中文字幕亚洲在线| 日本熟妇乱子伦xxxx| 奇米精品一区二区三区在线观看 | 一色屋精品亚洲香蕉网站| 国产亚洲黄色片| 嫩草伊人久久精品少妇av杨幂| 日韩视频一区二区三区在线播放| 懂色av粉嫩av蜜乳av| 国产精品成人a在线观看| 7m第一福利500精品视频| 国产理论视频在线观看| 97se亚洲国产综合自在线| 中文字幕中文字幕在线中心一区 | 污片在线观看一区二区| 黄大色黄女片18第一次| 香蕉久久夜色精品国产使用方法 | 精品国产伦一区二区三区观看体验| 在线观看福利片| 亚洲手机在线| 91久久久在线| 都市激情一区| 日韩欧亚中文在线| 亚洲精品成人无码毛片| 久久综合电影| 国产精品777| 日本人妻丰满熟妇久久久久久| 色婷婷综合久久久中字幕精品久久 | 91精品国产一区二区三区香蕉 | 老牛精品亚洲成av人片| 久久天天躁夜夜躁狠狠躁2022| 国产性生活视频| 99国产一区二区三精品乱码| 国产 国语对白 露脸| 黄色成人在线观看网站| 亚洲天堂av女优| 日韩伦理在线视频| 国产69精品一区二区亚洲孕妇| 在线视频福利一区| 国产亚洲人成a在线v网站| 亚洲欧美www| 亚洲一区欧美在线| 成人av午夜电影| 国产欧美久久久久| 日本一区精品视频| 超碰97人人做人人爱少妇| 一级欧美一级日韩| 国产精品初高中害羞小美女文| 九一精品在线观看| 韩日一区二区三区| 国产成人精品999| 成人精品一区二区三区校园激情| 日韩欧美在线第一页| 中国黄色片视频| 亚洲美女91| 精品网站在线看| 中文在线免费二区三区| 国产视频在线观看一区二区| 99久久精品国产亚洲| 久久夜色精品一区| 日本成人中文字幕在线| 日韩电影免费网址| 亚洲在线观看视频| 久久不射影院| 国产丝袜精品视频| 欧美高清69hd| 亚洲色图视频网站| 久久av一区二区三| 欧美中文日韩| 亚洲成人av动漫| 91麻豆精品| 欧美精品videos| 日韩精品福利| 欧美探花视频资源| 日韩一区二区三区四区在线| 国产91富婆露脸刺激对白| 国产精品后入内射日本在线观看| 国产免费av一区二区三区| 国产美女高潮久久白浆| 麻豆传媒在线免费| 精品国产免费人成在线观看| 国产一区二区视频免费| 综合精品久久久| 国产精品久久久免费观看| 日韩激情视频在线观看| 99re6这里有精品热视频| 六月丁香久久丫| 国产剧情久久久久久| 久久亚洲资源| 在线视频国产日韩| 亚洲乱码精品久久久久..| 在线视频你懂得一区| 欧洲第一无人区观看| 91亚洲精品一区二区乱码| jizz18女人| 亚洲欧洲一区| 在线观看欧美激情| 美女视频免费精品| 国产中文字幕日韩| 日本不卡免费高清视频在线| 日韩在线播放视频| 亚洲三区在线播放| 日韩一二三区视频| 人妻丰满熟妇av无码区| 亚洲欧美日韩在线播放| 亚洲区自拍偷拍| 成人性视频免费网站| 国产又大又黄又粗又爽| 日韩午夜高潮| 奇米777四色影视在线看| 精品freesex老太交| 丁香婷婷久久久综合精品国产| 日韩av电影资源网| 欧美亚洲激情在线| 丝袜美女在线观看| 视频直播国产精品| 国产人成在线视频| 亚洲精品xxxx| 成人乱码一区二区三区| 7777精品伊人久久久大香线蕉完整版 | 91高清在线免费观看| 国产黄色在线免费观看| 国产亚洲精品美女| 四虎影视精品成人| 日韩精品在线一区| 国产又粗又猛又黄又爽| 欧美中文一区二区三区| 成年人视频在线免费看| 亚洲国产成人av| 精品99久久久久成人网站免费| 中文字幕一区二区三区在线不卡| 五月天精品视频| 91网站黄www| www.四虎在线| 国产91丝袜在线观看| 色婷婷一区二区三区在线观看| 日韩极品在线观看| 久久久精品三级| 久久国产99| 色欲av无码一区二区人妻| 亚洲激情在线| 性欧美大战久久久久久久| 欧美视频福利| 先锋影音男人资源| 国产精品成人a在线观看| 亚洲视频在线二区| 日本欧美国产| 在线视频91| 亚洲最新色图| 日本a级片在线播放| 午夜日韩激情| 久久av综合网| 国产精品久久国产愉拍| 男人添女人下面高潮视频| 99成人免费视频| 久久网站免费视频| 美女91精品| 我看黄色一级片| 麻豆一区二区在线| 91插插插影院| 成人午夜激情视频| 喷水视频在线观看| 久久久精品影视| 国产一二三四区在线| 国产精品欧美一区喷水| 成人18视频免费69| 一区二区三区**美女毛片| 精品无码久久久久久久| 精品国产精品自拍| 无码人妻精品一区二区三区不卡 | 亚洲小说图片视频| 日本一区精品| 婷婷综合伊人| 国产一线二线三线女| 免费在线成人| 亚洲美女爱爱视频| 成人av网站在线观看| www.黄色在线| 亚洲免费av高清| 丰满少妇乱子伦精品看片| 欧美在线观看视频一区二区三区| 国产一区二区在线视频观看| 欧美成人艳星乳罩| 欧美一区二区少妇| 久久亚洲成人精品| www.综合网.com| 国产99视频精品免视看7| 只有精品亚洲| 精品一区二区日本| 97精品国产一区二区三区| 欧美一级视频在线播放| 日本午夜一本久久久综合| 日本黄色一级网站| 2022国产精品视频| 男人晚上看的视频| 精品久久久久久久久国产字幕 | 久久亚洲综合网| 色综合蜜月久久综合网| 18禁网站免费无遮挡无码中文| 蜜臀a∨国产成人精品| 无码成人精品区在线观看| 中文字幕免费不卡在线| 国产一级理论片| 欧美视频第二页| 熟妇人妻一区二区三区四区| 日韩在线观看视频免费| 在线视频cao| 97人人模人人爽视频一区二区| 精品香蕉视频| www.av中文字幕| 国内外成人在线| japanese中文字幕| 午夜精品国产更新| 国产av一区二区三区精品| 国产亚洲精品久久久| 免费毛片b在线观看| 99久久99久久| 首页国产精品| mm1313亚洲国产精品无码试看| www.亚洲激情.com| 久久97人妻无码一区二区三区| 欧美日韩dvd在线观看| 久久精品国产亚洲a∨麻豆| 国内免费精品永久在线视频| 国产电影一区二区| 亚洲精品在线观看免费| 日韩精品国产欧美| 老司机福利av| 欧美日韩国内自拍| 人妻少妇一区二区三区| 久久久久久香蕉网| 国产 日韩 欧美| 色爽爽爽爽爽爽爽爽| 麻豆精品国产91久久久久久| 久久久久无码精品国产sm果冻| 日韩欧美在线视频日韩欧美在线视频| 成人免费公开视频| 欧美激情在线观看视频| 日韩av综合| 国产成人生活片| 国产一区二区三区日韩| 国产乱子轮xxx农村| 欧美日韩国产免费| 日韩精品毛片| 成人写真视频福利网| 亚洲蜜桃视频| 91香蕉视频免费看| 亚洲精品国产一区二区精华液| 亚洲区自拍偷拍| 一本色道久久综合亚洲91| 免费在线观看污视频| 日韩av免费在线播放| 国产一区二区三区日韩精品| 一级黄色香蕉视频| 国产精品乱子久久久久| 91精品国产色综合久久不8| 深夜福利亚洲导航| 欧美第一在线视频| 成人精品视频在线播放| 99精品久久只有精品| 免费视频网站在线观看入口| 中文字幕国产亚洲2019| 玖玖精品在线| 黄色网络在线观看| 成人av中文字幕| 日韩中文字幕在线观看视频| 在线观看久久久久久| 欧美成人毛片| 免费看日本黄色| 99久久婷婷国产综合精品电影| 秋霞精品一区二区三区| 日韩一级黄色av| 视频精品一区| 欧美视频第一区| 国产精品欧美一级免费| 国产成人精品一区二三区四区五区 | 毛片在线看片| 亚洲精品日韩av| 99精品视频免费| 无码人中文字幕| 欧美成人精品福利| xx欧美视频| 中文字幕综合在线观看| 成人精品亚洲人成在线| 亚洲精品成人在线视频| 日韩中文字幕av| 超碰地址久久| 亚欧在线免费观看| 亚洲综合久久av| 国产精品天堂| 超碰97人人人人人蜜桃| 视频在线在亚洲| 国产波霸爆乳一区二区| 亚洲欧美精品一区| 久久久久毛片免费观看| 日韩久久一级片| 亚洲老妇xxxxxx| 免费av在线电影|