劉琦
【摘 要】基于通過域名解析控制網絡訪問的原理,提出一種設計方案。首先運用網絡分析庫WinPcap構建網閘程序,抓取TCP/IP協議數據包,并進行分析,篩選出DNS、HTTP等OSI應用層協議的請求數據包。在此基礎上由網閘程序根據不同協議構建響應數據包回復這些請求,從而將網絡訪問引導至指定IP地址,實現網絡訪問控制。該方案的設計為相關技術的進一步研究提供了新的思路和參考。
【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.
【關鍵詞】TCP/IP協議;域名解析;DNS劫持;廣告路由器
【Keywords】TCP/IP protocol; DNS; DNS hijacking; advertising router
【中圖分類號】TP393.08 【文獻標志碼】A 【文章編號】1673-1069(2017)03-0073-03
1 引言
域名解析是把域名解析到一個IP地址的過程,通過域名解析用戶不再需要記住難記的IP地址,只通過好記的域名即可訪問服務器,是常見的用戶訪問網絡的行為。而當今有許多場景是需要對網絡訪問進行控制的,比如學校開設的上機操作課程、公共場所免費Wi-Fi信號的網絡接入認證、對國內外敏感網站的訪問以及特定的內部工作網絡等,都需要對用戶上網行為進行控制。目前,控制用戶網絡訪問的相關技術在國內取得長足進展,許多硬件、軟件類產品已投入商業使用。
2 目前常見的網絡訪問控制技術介紹
①DNS協議特征分析技術。該技術原理是在網絡訪問鏈路中一個節點的網絡設備上監聽DNS端口,根據DNS協議特征篩選出該端口上接收到來自用戶端的DNS查詢請求類數據包,并構造一個指向特定IP地址的DNS響應數據包返回給用戶端,常見的DNS劫持、DNS污染等都屬于該技術應用范疇。該方案優點在基于DNS協議特征進行處理,不會被安全防護軟件、防火墻等視為網絡安全威脅。但其局限性在于不能完全阻止用戶的網絡訪問行為,比如用戶可以通過IP地址直接訪問網絡,或者使用VPN上網,這些能繞開DNS解析。同時,用戶端可以通過修改本機Hosts文件的方法設置域名正確的IP地址,也可以通過安裝防DNS污染軟件忽視掉不正確的解析結果,因此該技術的應用效果有限,僅僅能控制通過域名來訪問網絡的行為。[1]
②ARP欺騙技術。由于局域網的網絡流通不是根據IP地址進行,而是根據MAC地址進行傳輸。因此,在用戶端未獲得訪問許可時,可以將假網關設備的MAC偽裝成網關設備的MAC地址發給用戶端,讓用戶端的所有網絡訪問數據包流向假網關設備,從而達到限制用戶端的網絡訪問行為。ARP是地址解析協議,是一種將IP地址轉化成物理地址的協議,利用ARP協議就可以實現上述的技術方案。ARP的工作原理是:每臺主機都會在自己的ARP緩沖區中建立一個ARP列表,以表示局域網內IP地址和MAC地址的對應關系。當源主機需要發送數據包到外網時,是需要將數據包發往網關設備IP對應的MAC地址的,因此會首先檢查自己ARP列表中是否存在網關IP地址對應的MAC地址,如果有,則直接將數據包發送到這個MAC地址;如果沒有,就向局域網內發送一個ARP請求的廣播包,查詢網關IP對應的MAC地址。此ARP請求數據包里包括源主機IP地址、源主機MAC地址、目標主機IP地址,其中源主機是指發出該ARP請求數據包的用戶端設備,而目標主機是指源主機要查詢的IP對應的網絡主機。局域網中所有主機收到這個ARP請求后,會檢查數據包中的目的IP是否和自己的IP地址一致。如果不一致就忽略此數據包;如果相同,該主機將源主機的MAC地址和IP地址更新到自己的ARP列表后,給源主機發送一個ARP響應數據包,里面填寫了該主機的MAC地址;源主機收到這個ARP響應數據包后,就得到了目標主機的MAC地址,更新ARP列表中關于目標主機的IP地址和MAC地址后,源主機就可以利用此信息開始數據傳輸了。ARP欺騙技術,就是利用ARP協議的工作原理,在源主機發送ARP請求數據包查詢網關IP地址對應的MAC地址時,回復一個ARP響應數據包,將自己的MAC地址偽裝成網關設備的MAC地址發送給源主機,源主機一旦接收后,則數據包將流向這個偽裝的網關地址。該技術方案的優點是成功后用戶端的網絡訪問能被完全限制。缺點是容易被針對。ARP欺騙屬于網絡安全威脅,因此很多硬件廠商和軟件商都推出很多產品用于防范ARP欺騙技術,比如防ARP的工具軟件、帶ARP防護功能的路由器。或者通過靜態綁定、動態不綁定等方法都可以有效防止ARP欺騙。因此并不適合推廣使用。
③通過硬件設備控制用戶端的網絡訪問。這種技術也已投入到商業應用中,比如智能Wi-Fi廣告路由器就是代表之一,用戶端需要通過該設備認證,否則無法訪問網絡。但是,傳統的智能Wi-Fi廣告路由器價格比較昂貴,且配置復雜,需要額外增加硬件,成本的增加和上手不易成為該技術推廣的最大障礙。
3 基于TCP/IP協議的網絡訪問控制技術
綜合目前常見網絡訪問控制技術的不足之處,本文提出了一種基于TCP/IP協議控制網絡訪問的技術方案,能有效解決域名解析控制、繞開解析管理、配置復雜、成本過高等問題。通過本方案為相關技術發展在改進網絡訪問控制實際使用效果和提高技術推廣的可行性提供方面提供新思路和參考。
3.1 相關知識介紹
①TCP/IP協議,是Internet最基本的協議,由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP定義了電子設備如何接入互聯網,以及數據在網絡中的傳輸標準,能將多個交換網絡連接起來,實現源地址和目的地址之間的傳送數據。
②winpcap,是windows平臺下的網絡分析工具,為開發人員提供了完整的網絡抓包和分析接口。通過該工具提供的開發庫,可以編寫出網閘程序監聽流經主機網卡上的數據包,并可以通過該開發庫構建響應數據包進行回復。
③DNS協議,屬于應用層協議,提供將用戶易于理解的主機名或域名轉換為計算機或網絡可識別的數字地址的機制。DNS端口號為53。
④HTTP協議,是一個屬于應用層的面向對象的協議,是客戶端瀏覽器或其他程序與WEB服務器之間的應用層通信協議。HTTP包含指令和傳輸信息,通過客戶端與服務器之間請求、應答的交互過程,實現各類應用資源、超媒體的訪問,是互聯網應用最廣泛的一種網絡協議。
3.2 工作原理
由于用戶在訪問內網資源時數據包是不會經過網關設備的,因此要控制用戶的網絡訪問權限,只需要在網關設備上對源主機發來的數據進行處理即可。
通過winpcap開發庫編寫一個網閘程序,并部署在局域網內一臺主機上,將該主機設為網關。然后啟動網閘程序,監聽網關主機上網卡收發到的數據包,篩選出來自局域網內其他主機訪問外網的TCP/IP數據包,若屬于DNS查詢請求,構建一個指向特定IP地址的DNS解析結果數據包回復給源主機;若屬于HTTP請求,構建一個內容為跳轉至特定URL地址的HTML響應數據包并回復給源主機;若屬于其他類型的數據包,則不響應該數據包。通過網閘程序的處理,訪問網站類的請求會被引導到特定的地址,可以外接驗證程序讓用戶獲得上網的授權,而其他非授權的訪問請求則被忽略,達到限制用戶訪問網絡的目的,通過軟件方式實現Wi-Fi廣告路由器的功能。[2]
3.3 網閘程序關鍵功能的實現代碼
①監聽網卡上TCP/IP數據包的實現。
void init()
{
//alldevs為網關主機上所有網卡設備, target為當前監聽網卡設備
pcap_if_t *alldevs, *target;
//設置監聽條件,篩選出非網關主機的TCP/IP數據包
char packet_filter[] = "ip or arp and ether src not f8:bc:12:93:36:f5";
struct pcap_pkthdr *header;//抓取到的數據長度信息
const u_char *packet_data;//抓取到的數據包
//開啟監聽,網閘程序將抓取每一個符合條件的數據包
while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0 && !_stop)
{
//處理數據包的代碼…
}
}
②DNS查詢請求處理的實現。
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;//目標端口
dport = ntohs(uh->dport);
if (dport == 53)
{
//篩選出DNS的查詢請求
if (((dnsh->flag & 0x0080) == 0x0000) && (ntohs(dnsh->qc) > 0))
{
dns_header rdnsh;//DNS報文頭,省略構建其過程
//開始構建DNS響應報文
char rdns_pkt[256];
memcpy(rdns_pkt, &rdnsh, 12);//DNS報頭設置完畢
u_char *pdns_data;//DNS報文內容,省略其他項的填充
u_long tmp_address = _dnscapip.ip;//本機地址,這里是192.168.1.68;
memcpy(rdns_pkt + 12 + udp_data_q_len + 12, &tmp_address, 4);
_dns_pkt_len += 16;
//結束DNS響應報文的填充
u_char destPacket[512];//UDP發送報文,忽略填充過程
//發送數據包至源主機
if (pcap_sendpacket(adhandle, destPacket, _dns_pkt_len + 14 + 20 + 8 + 12) != 0)
fprintf(stderr, "\n發送DNS報文失敗,錯誤: %s\n", pcap_geterr(adhandle));
}
}
}
③HTTPS請求處理的實現
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數據包頭長度
char *tcp_data; //TCP數據包
tcp_data = (char *)th + tcp_packet_len;
//判斷HTTP,含有HTTP的內容為HTTP協議
if (strstr(tcp_data, "HTTP/") != NULL)
{
//構建回復源主機的包含HTML內容的TCP數據包
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
//填充發送內容。包括時間,http長度和本機IP
sprintf_s(fp, send200, temptimebuff, _tmp_htmlstr_len, _wpc_lip);//_wpc_lip是本機IP
//填充TCP數據包,省略內容填充過程
u_char destpacket[1024];
//發送報文:
if (pcap_sendpacket(adhandle, destpacket, send_len) != 0)
fprintf(stderr, "\n發送HTTP報文失敗,錯誤: %s\n", pcap_geterr(adhandle));
}
}
4 結語
本技術方案相比其他技術方案,具有很多優點。基于TCP/IP協議,合理利用DNS、HTTP、IP等協議的工作原理實現網絡訪問的控制,不會被安全軟件、防火墻等判為網絡安全威脅;具有良好兼容性。由于運行于網關主機上,并對網卡抓取TCP/IP數據包,因此不論用戶修改hosts文件,還是直接通過IP地址訪問網絡,都無法成功繞開網閘程序;具有經濟性。本技術方案屬于純軟件,只需要部署在一臺能訪問網絡的主機上即可,不需要額外的硬件設備。相比硬件技術,本技術方案具有部署簡單、運營成本低、配置方便和擴展性靈活等特點。因此,具有良好的推廣前景。
【參考文獻】
【1】蘭少華,楊余旺,呂建勇. TCP/IP 網絡與協議[M].北京:清華大學出版社,2006.
【2】尹惠實. DNS體系結構分析[J].中國教育網絡,2007(03):89-90.