劉琦
【摘 要】基于通過域名解析控制網(wǎng)絡(luò)訪問的原理,提出一種設(shè)計方案。首先運用網(wǎng)絡(luò)分析庫WinPcap構(gòu)建網(wǎng)閘程序,抓取TCP/IP協(xié)議數(shù)據(jù)包,并進(jìn)行分析,篩選出DNS、HTTP等OSI應(yīng)用層協(xié)議的請求數(shù)據(jù)包。在此基礎(chǔ)上由網(wǎng)閘程序根據(jù)不同協(xié)議構(gòu)建響應(yīng)數(shù)據(jù)包回復(fù)這些請求,從而將網(wǎng)絡(luò)訪問引導(dǎo)至指定IP地址,實現(xiàn)網(wǎng)絡(luò)訪問控制。該方案的設(shè)計為相關(guān)技術(shù)的進(jìn)一步研究提供了新的思路和參考。
【Abstract】Based on the principle of network access through DNS control, a design scheme is put forward. First using WinPcap network analysis library building network gateway program, grabbing the TCP/IP protocol packets, and analyzing it ,selecting the request packet of the OSI application layer protocol such as DNS, HTTP. On this basis, through the network gateway program reply to these requests according to different protocols build response packet, which will lead to specify the IP address, realize the network access control. The scheme design for relevant technology provides a new train of thought and reference for further research.
【關(guān)鍵詞】TCP/IP協(xié)議;域名解析;DNS劫持;廣告路由器
【Keywords】TCP/IP protocol; DNS; DNS hijacking; advertising router
【中圖分類號】TP393.08 【文獻(xiàn)標(biāo)志碼】A 【文章編號】1673-1069(2017)03-0073-03
1 引言
域名解析是把域名解析到一個IP地址的過程,通過域名解析用戶不再需要記住難記的IP地址,只通過好記的域名即可訪問服務(wù)器,是常見的用戶訪問網(wǎng)絡(luò)的行為。而當(dāng)今有許多場景是需要對網(wǎng)絡(luò)訪問進(jìn)行控制的,比如學(xué)校開設(shè)的上機(jī)操作課程、公共場所免費Wi-Fi信號的網(wǎng)絡(luò)接入認(rèn)證、對國內(nèi)外敏感網(wǎng)站的訪問以及特定的內(nèi)部工作網(wǎng)絡(luò)等,都需要對用戶上網(wǎng)行為進(jìn)行控制。目前,控制用戶網(wǎng)絡(luò)訪問的相關(guān)技術(shù)在國內(nèi)取得長足進(jìn)展,許多硬件、軟件類產(chǎn)品已投入商業(yè)使用。
2 目前常見的網(wǎng)絡(luò)訪問控制技術(shù)介紹
①DNS協(xié)議特征分析技術(shù)。該技術(shù)原理是在網(wǎng)絡(luò)訪問鏈路中一個節(jié)點的網(wǎng)絡(luò)設(shè)備上監(jiān)聽DNS端口,根據(jù)DNS協(xié)議特征篩選出該端口上接收到來自用戶端的DNS查詢請求類數(shù)據(jù)包,并構(gòu)造一個指向特定IP地址的DNS響應(yīng)數(shù)據(jù)包返回給用戶端,常見的DNS劫持、DNS污染等都屬于該技術(shù)應(yīng)用范疇。該方案優(yōu)點在基于DNS協(xié)議特征進(jìn)行處理,不會被安全防護(hù)軟件、防火墻等視為網(wǎng)絡(luò)安全威脅。但其局限性在于不能完全阻止用戶的網(wǎng)絡(luò)訪問行為,比如用戶可以通過IP地址直接訪問網(wǎng)絡(luò),或者使用VPN上網(wǎng),這些能繞開DNS解析。同時,用戶端可以通過修改本機(jī)Hosts文件的方法設(shè)置域名正確的IP地址,也可以通過安裝防DNS污染軟件忽視掉不正確的解析結(jié)果,因此該技術(shù)的應(yīng)用效果有限,僅僅能控制通過域名來訪問網(wǎng)絡(luò)的行為。[1]
②ARP欺騙技術(shù)。由于局域網(wǎng)的網(wǎng)絡(luò)流通不是根據(jù)IP地址進(jìn)行,而是根據(jù)MAC地址進(jìn)行傳輸。因此,在用戶端未獲得訪問許可時,可以將假網(wǎng)關(guān)設(shè)備的MAC偽裝成網(wǎng)關(guān)設(shè)備的MAC地址發(fā)給用戶端,讓用戶端的所有網(wǎng)絡(luò)訪問數(shù)據(jù)包流向假網(wǎng)關(guān)設(shè)備,從而達(dá)到限制用戶端的網(wǎng)絡(luò)訪問行為。ARP是地址解析協(xié)議,是一種將IP地址轉(zhuǎn)化成物理地址的協(xié)議,利用ARP協(xié)議就可以實現(xiàn)上述的技術(shù)方案。ARP的工作原理是:每臺主機(jī)都會在自己的ARP緩沖區(qū)中建立一個ARP列表,以表示局域網(wǎng)內(nèi)IP地址和MAC地址的對應(yīng)關(guān)系。當(dāng)源主機(jī)需要發(fā)送數(shù)據(jù)包到外網(wǎng)時,是需要將數(shù)據(jù)包發(fā)往網(wǎng)關(guān)設(shè)備IP對應(yīng)的MAC地址的,因此會首先檢查自己ARP列表中是否存在網(wǎng)關(guān)IP地址對應(yīng)的MAC地址,如果有,則直接將數(shù)據(jù)包發(fā)送到這個MAC地址;如果沒有,就向局域網(wǎng)內(nèi)發(fā)送一個ARP請求的廣播包,查詢網(wǎng)關(guān)IP對應(yīng)的MAC地址。此ARP請求數(shù)據(jù)包里包括源主機(jī)IP地址、源主機(jī)MAC地址、目標(biāo)主機(jī)IP地址,其中源主機(jī)是指發(fā)出該ARP請求數(shù)據(jù)包的用戶端設(shè)備,而目標(biāo)主機(jī)是指源主機(jī)要查詢的IP對應(yīng)的網(wǎng)絡(luò)主機(jī)。局域網(wǎng)中所有主機(jī)收到這個ARP請求后,會檢查數(shù)據(jù)包中的目的IP是否和自己的IP地址一致。如果不一致就忽略此數(shù)據(jù)包;如果相同,該主機(jī)將源主機(jī)的MAC地址和IP地址更新到自己的ARP列表后,給源主機(jī)發(fā)送一個ARP響應(yīng)數(shù)據(jù)包,里面填寫了該主機(jī)的MAC地址;源主機(jī)收到這個ARP響應(yīng)數(shù)據(jù)包后,就得到了目標(biāo)主機(jī)的MAC地址,更新ARP列表中關(guān)于目標(biāo)主機(jī)的IP地址和MAC地址后,源主機(jī)就可以利用此信息開始數(shù)據(jù)傳輸了。ARP欺騙技術(shù),就是利用ARP協(xié)議的工作原理,在源主機(jī)發(fā)送ARP請求數(shù)據(jù)包查詢網(wǎng)關(guān)IP地址對應(yīng)的MAC地址時,回復(fù)一個ARP響應(yīng)數(shù)據(jù)包,將自己的MAC地址偽裝成網(wǎng)關(guān)設(shè)備的MAC地址發(fā)送給源主機(jī),源主機(jī)一旦接收后,則數(shù)據(jù)包將流向這個偽裝的網(wǎng)關(guān)地址。該技術(shù)方案的優(yōu)點是成功后用戶端的網(wǎng)絡(luò)訪問能被完全限制。缺點是容易被針對。ARP欺騙屬于網(wǎng)絡(luò)安全威脅,因此很多硬件廠商和軟件商都推出很多產(chǎn)品用于防范ARP欺騙技術(shù),比如防ARP的工具軟件、帶ARP防護(hù)功能的路由器?;蛘咄ㄟ^靜態(tài)綁定、動態(tài)不綁定等方法都可以有效防止ARP欺騙。因此并不適合推廣使用。
③通過硬件設(shè)備控制用戶端的網(wǎng)絡(luò)訪問。這種技術(shù)也已投入到商業(yè)應(yīng)用中,比如智能Wi-Fi廣告路由器就是代表之一,用戶端需要通過該設(shè)備認(rèn)證,否則無法訪問網(wǎng)絡(luò)。但是,傳統(tǒng)的智能Wi-Fi廣告路由器價格比較昂貴,且配置復(fù)雜,需要額外增加硬件,成本的增加和上手不易成為該技術(shù)推廣的最大障礙。
3 基于TCP/IP協(xié)議的網(wǎng)絡(luò)訪問控制技術(shù)
綜合目前常見網(wǎng)絡(luò)訪問控制技術(shù)的不足之處,本文提出了一種基于TCP/IP協(xié)議控制網(wǎng)絡(luò)訪問的技術(shù)方案,能有效解決域名解析控制、繞開解析管理、配置復(fù)雜、成本過高等問題。通過本方案為相關(guān)技術(shù)發(fā)展在改進(jìn)網(wǎng)絡(luò)訪問控制實際使用效果和提高技術(shù)推廣的可行性提供方面提供新思路和參考。
3.1 相關(guān)知識介紹
①TCP/IP協(xié)議,是Internet最基本的協(xié)議,由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP定義了電子設(shè)備如何接入互聯(lián)網(wǎng),以及數(shù)據(jù)在網(wǎng)絡(luò)中的傳輸標(biāo)準(zhǔn),能將多個交換網(wǎng)絡(luò)連接起來,實現(xiàn)源地址和目的地址之間的傳送數(shù)據(jù)。
②winpcap,是windows平臺下的網(wǎng)絡(luò)分析工具,為開發(fā)人員提供了完整的網(wǎng)絡(luò)抓包和分析接口。通過該工具提供的開發(fā)庫,可以編寫出網(wǎng)閘程序監(jiān)聽流經(jīng)主機(jī)網(wǎng)卡上的數(shù)據(jù)包,并可以通過該開發(fā)庫構(gòu)建響應(yīng)數(shù)據(jù)包進(jìn)行回復(fù)。
③DNS協(xié)議,屬于應(yīng)用層協(xié)議,提供將用戶易于理解的主機(jī)名或域名轉(zhuǎn)換為計算機(jī)或網(wǎng)絡(luò)可識別的數(shù)字地址的機(jī)制。DNS端口號為53。
④HTTP協(xié)議,是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,是客戶端瀏覽器或其他程序與WEB服務(wù)器之間的應(yīng)用層通信協(xié)議。HTTP包含指令和傳輸信息,通過客戶端與服務(wù)器之間請求、應(yīng)答的交互過程,實現(xiàn)各類應(yīng)用資源、超媒體的訪問,是互聯(lián)網(wǎng)應(yīng)用最廣泛的一種網(wǎng)絡(luò)協(xié)議。
3.2 工作原理
由于用戶在訪問內(nèi)網(wǎng)資源時數(shù)據(jù)包是不會經(jīng)過網(wǎng)關(guān)設(shè)備的,因此要控制用戶的網(wǎng)絡(luò)訪問權(quán)限,只需要在網(wǎng)關(guān)設(shè)備上對源主機(jī)發(fā)來的數(shù)據(jù)進(jìn)行處理即可。
通過winpcap開發(fā)庫編寫一個網(wǎng)閘程序,并部署在局域網(wǎng)內(nèi)一臺主機(jī)上,將該主機(jī)設(shè)為網(wǎng)關(guān)。然后啟動網(wǎng)閘程序,監(jiān)聽網(wǎng)關(guān)主機(jī)上網(wǎng)卡收發(fā)到的數(shù)據(jù)包,篩選出來自局域網(wǎng)內(nèi)其他主機(jī)訪問外網(wǎng)的TCP/IP數(shù)據(jù)包,若屬于DNS查詢請求,構(gòu)建一個指向特定IP地址的DNS解析結(jié)果數(shù)據(jù)包回復(fù)給源主機(jī);若屬于HTTP請求,構(gòu)建一個內(nèi)容為跳轉(zhuǎn)至特定URL地址的HTML響應(yīng)數(shù)據(jù)包并回復(fù)給源主機(jī);若屬于其他類型的數(shù)據(jù)包,則不響應(yīng)該數(shù)據(jù)包。通過網(wǎng)閘程序的處理,訪問網(wǎng)站類的請求會被引導(dǎo)到特定的地址,可以外接驗證程序讓用戶獲得上網(wǎng)的授權(quán),而其他非授權(quán)的訪問請求則被忽略,達(dá)到限制用戶訪問網(wǎng)絡(luò)的目的,通過軟件方式實現(xiàn)Wi-Fi廣告路由器的功能。[2]
3.3 網(wǎng)閘程序關(guān)鍵功能的實現(xiàn)代碼
①監(jiān)聽網(wǎng)卡上TCP/IP數(shù)據(jù)包的實現(xiàn)。
void init()
{
//alldevs為網(wǎng)關(guān)主機(jī)上所有網(wǎng)卡設(shè)備, target為當(dāng)前監(jiān)聽網(wǎng)卡設(shè)備
pcap_if_t *alldevs, *target;
//設(shè)置監(jiān)聽條件,篩選出非網(wǎng)關(guān)主機(jī)的TCP/IP數(shù)據(jù)包
char packet_filter[] = "ip or arp and ether src not f8:bc:12:93:36:f5";
struct pcap_pkthdr *header;//抓取到的數(shù)據(jù)長度信息
const u_char *packet_data;//抓取到的數(shù)據(jù)包
//開啟監(jiān)聽,網(wǎng)閘程序?qū)⒆ト∶恳粋€符合條件的數(shù)據(jù)包
while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0 && !_stop)
{
//處理數(shù)據(jù)包的代碼…
}
}
②DNS查詢請求處理的實現(xiàn)。
void udpHandler(ip_header *ih, unsigned char *sourcePacket, pcap_pkthdr *header)
{
udp_header *uh;
uh = (udp_header *)(sourcePacket + 14 + (ih->ver_ihl & 0xf) * 4);
u_short dport;//目標(biāo)端口
dport = ntohs(uh->dport);
if (dport == 53)
{
//篩選出DNS的查詢請求
if (((dnsh->flag & 0x0080) == 0x0000) && (ntohs(dnsh->qc) > 0))
{
dns_header rdnsh;//DNS報文頭,省略構(gòu)建其過程
//開始構(gòu)建DNS響應(yīng)報文
char rdns_pkt[256];
memcpy(rdns_pkt, &rdnsh, 12);//DNS報頭設(shè)置完畢
u_char *pdns_data;//DNS報文內(nèi)容,省略其他項的填充
u_long tmp_address = _dnscapip.ip;//本機(jī)地址,這里是192.168.1.68;
memcpy(rdns_pkt + 12 + udp_data_q_len + 12, &tmp_address, 4);
_dns_pkt_len += 16;
//結(jié)束DNS響應(yīng)報文的填充
u_char destPacket[512];//UDP發(fā)送報文,忽略填充過程
//發(fā)送數(shù)據(jù)包至源主機(jī)
if (pcap_sendpacket(adhandle, destPacket, _dns_pkt_len + 14 + 20 + 8 + 12) != 0)
fprintf(stderr, "\n發(fā)送DNS報文失敗,錯誤: %s\n", pcap_geterr(adhandle));
}
}
}
③HTTPS請求處理的實現(xiàn)
void tcpHandler(ip_header* ih, unsigned int ip_len, char *szSource, char *szDest, unsigned char *pkt_data, pcap_pkthdr *header)
{
tcp_header *th;
th = (tcp_header *)((u_char *)ih + ip_len);
int tcp_packet_len = (th->len >> 4) * 4;// TCP數(shù)據(jù)包頭長度
char *tcp_data; //TCP數(shù)據(jù)包
tcp_data = (char *)th + tcp_packet_len;
//判斷HTTP,含有HTTP的內(nèi)容為HTTP協(xié)議
if (strstr(tcp_data, "HTTP/") != NULL)
{
//構(gòu)建回復(fù)源主機(jī)的包含HTML內(nèi)容的TCP數(shù)據(jù)包
char send200[300] = "HTTP/1.1 200 OK\r\nDate: %s\r\nContent-Type: text/html\r\nConnection: Close\r\nContent-Length: %d\r\n\r\n
//填充發(fā)送內(nèi)容。包括時間,http長度和本機(jī)IP
sprintf_s(fp, send200, temptimebuff, _tmp_htmlstr_len, _wpc_lip);//_wpc_lip是本機(jī)IP
//填充TCP數(shù)據(jù)包,省略內(nèi)容填充過程
u_char destpacket[1024];
//發(fā)送報文:
if (pcap_sendpacket(adhandle, destpacket, send_len) != 0)
fprintf(stderr, "\n發(fā)送HTTP報文失敗,錯誤: %s\n", pcap_geterr(adhandle));
}
}
4 結(jié)語
本技術(shù)方案相比其他技術(shù)方案,具有很多優(yōu)點?;赥CP/IP協(xié)議,合理利用DNS、HTTP、IP等協(xié)議的工作原理實現(xiàn)網(wǎng)絡(luò)訪問的控制,不會被安全軟件、防火墻等判為網(wǎng)絡(luò)安全威脅;具有良好兼容性。由于運行于網(wǎng)關(guān)主機(jī)上,并對網(wǎng)卡抓取TCP/IP數(shù)據(jù)包,因此不論用戶修改hosts文件,還是直接通過IP地址訪問網(wǎng)絡(luò),都無法成功繞開網(wǎng)閘程序;具有經(jīng)濟(jì)性。本技術(shù)方案屬于純軟件,只需要部署在一臺能訪問網(wǎng)絡(luò)的主機(jī)上即可,不需要額外的硬件設(shè)備。相比硬件技術(shù),本技術(shù)方案具有部署簡單、運營成本低、配置方便和擴(kuò)展性靈活等特點。因此,具有良好的推廣前景。
【參考文獻(xiàn)】
【1】蘭少華,楊余旺,呂建勇. TCP/IP 網(wǎng)絡(luò)與協(xié)議[M].北京:清華大學(xué)出版社,2006.
【2】尹惠實. DNS體系結(jié)構(gòu)分析[J].中國教育網(wǎng)絡(luò),2007(03):89-90.