基于传输层协议的网络访问控制研究

2017-03-24 10:30刘琦

刘琦

【摘 要】基于通过域名解析控制网络访问的原理,提出一种设计方案。首先运用网络分析库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\nCFailed";//發送内容

//填充发送内容。包括时间,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.