电信联通ADSL共享上网检测的原理与实现

摘要:随着互联网带宽的发展,运营商为了保护自己的利益而不让用户几家合用路由上网,于是普遍采用IPID、时间戳、User-Agent头等技术来检测技术来判定路由器后面有多少台计算机在共享上网。本文深入剖析这些技术的基础上,提出如何防范运营商的共享检测,着重分析了IPID解决方案。
关键词:共享神盾 共享神矛 网络尖兵 IPID


一、 检测原理简析
现在电信运营商的带宽越来越大,Internet技术的发展和高昂的接入价格,使得越来越多的用户采取合租方式通过路由上网。但是有线宽带由于没有无线宽带那种SIM防复制,防止破解等技术,因此控制路由器上网一直是他们研究的重点。
原来电信运营商常用SMTP检测技术来判定是否路由,但是随着时代的发展和设备的更新,现在运营商很难从设备层来控制用户,于是更新的检测技术,采用IPID判定法、TTL判定法、时间戳判定法、User-Agent判定法等方法来检测路由后面的用户数。


(1)  IPID判定法
根据Windows协议栈的特性,一台计算机IPID值是连续的。通过分析IPID值的跳跃我们可以得出计算机的台数。Windows网络协议栈实现时,ID字段的值随着发送IP报文数的增加而增加,IPID的初始值是随机值,一般说来,不同主机的初始值有较大差距。由于Linux、Unix的IPID是随机值,故此判定方法对Linux、Unix无效。


(2)  TTL判定法
TTL指生存时间,指定数据报被路由器丢弃之前允许通过的网段数量。TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,要求路由器至少将 TTL 减小 1。不同的操作系统其TTL不同:LINUX 为64,WIN2K/NT为 128,WINDOWS9X 系列 为32,UNIX 系列为255。如果检测到有多个TTL的值则可以断定有多台主机。


(3)  时间戳判定法
由于不同主机的物理时钟一般存在偏移,且网络协议栈时钟与物理时钟存在对应关系,同时不同主机发送报文的频率与时钟存在统计关系,因此可以分析发现不同的网络时钟偏移数目来确定主机的台数。


(4)  User-Agent头判定法
HTTP头分为HTTP请求头和HTTP应答头。HTTP请求头为HTTP客户在浏览服务器上的主页时,向服务器发送请求的时候必须指明请求类型。请求类型是指HTTP-GET或HTTP-POST,每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP应答头和应答数据组成,如果请求成功则返回应答。在HTTP头中有一个User-Agent头标明了浏览器类型。不同操作系统、不同IE版本、不同补丁的User-Agent字段不同。由此可以根据user-Agent头的不同来判定主机的数量。


二、 分析Windows TCP/IP协议栈数据处理过程
在众多检测原理中,IPID判定法判定准确,用得较多,其他再作为辅助判定方法。下面我们主要分析一下Windows TCP/IP协议栈数据处理过程。
图1数据包处理的 TCP/IP 体系结构


1.WinSock的数据包形成后,Tcpip.sys会将其传递给防火墙驱动程序 (Ipnat.sys) 进行处理。防火墙检查该数据包是否属于所要阻止的Internet控制消息协议 (ICMP) 消息类型。如果ICMP消息被阻止,防火墙就将丢弃该数据包。
处理完后,防火墙会将该数据包传回给Tcpip.sys,


2.Tcpip.sys 将数据包传递给筛选器驱动程序 (Ipfltdrv.sys) 进行处理。
Ipfltdrv.sys根据下一跃点接口,将该数据包与已配置的出站IP数据包筛选器格式进行对比。
若出站数据包筛选器不允许该数据包通过,Ipfltdrv.sys就会直接下,丢弃该数据包。若出站数据包筛选器允许该数据包,Ipfltdrv.sys就会将该数据包传回给Tcpip.sys。


3.Tcpip.sys 将该数据包传递给Ipsec.sys进行处理。
Ipsec.sys根据IPsec筛选器组,决定是否允许、阻止或保护该数据包。若允许的话,Ipsec.sys 会在不修改该数据包的情况下,将其发回给Tcpip.sys。若阻止的话,Ipsec.sys会直接丢弃该数据包。若要进行保护的话,Ipsec.sys会在将数据包传回给Tcpip.sys之前,对其添加适当的IPsec保护。
Tcpip.sys随后会通过下一跃点接口,将该数据包发送到下一跃点IP地址。完成数据包的出站。


三、 解决方案


(1)对于IPID检测的破解
因为各运营商破解时是采集其前置机上的数据包通过分析IPID来判定的其主机数目。由上面我们知道只需要我们出去的数据包在发出前我们修改其所有数据包的IPID头设定为一个统一的值或者随机值即可。因此我们只需在图1第2步黑色椭圆的位置添加驱动程序修改IPID头即可。
既然破解检测的核心在于修改Windows协议栈,我们选择修改开源驱动DrvFiltIp.sys来完成IPID头的修改,因为数据包通过ipfltdrv.sys以后,IP层的数据包结构都不会拦截或者修改,这个时候我们只要在他进入TCPIP.sys之前使用一个hook驱动,加载了DrvFiltIp.sys,将IPID改为固定值或者随机值,就可以解决所谓IPID检测问题。
修改FilterPackets过滤函数


(2)对于TTL的检测,我们有多种解决办法:
1、修改注册表办法,在Windows下我们可以直接修改注册表让TTL同一为一个固定值。
在“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\ Parameters”,找到“DefaultTTL”,将该值修改为十进制的固定值,重新启动服务器系统后即可。


2、修改驱动的办法:在上面ipid改动代码中加入ipp->ipTTL=111(111为固定值)


3、Linux下修改方法:
命令行#sysctl -w net.ipv4.ip_default_ttl=n,(n=0~255),若n>255,则ttl=0,重启服务器即可生效。


(3)统一时间戳,这个可以通过服务程序在内网建立一个动态的udp时钟服务器,将每台计算机启动后时间进行同步,保证内网的计算机时间都是一致的,这样就解决了时间戳的检查问题。


(4)user-agent头判定法,同样可以通过修改注册表修改user-agent头。这个办法网上介绍了很多,就不再阐述。
四、改进和建议
上述办法虽然比较完美的解决了网络尖兵的检测问题,但是随着时间的推移,电信商又通过Windows的tcp连接数不超过255个来做文章,判断后台端口使用数量等问题,这些问题虽然可以通过路由器编程直接解决,但是也可以通过一个服务统计连接数解决,总之,未来将会有更新的检测技术产生,研究检测原理的办法也将不断的更新。


参考文献
1、赵丙秀,ADSL共享上网检测的原理与实现,《电脑学习》,2009年第2期
2、安志锋,破解网络尖兵初探,《电脑知识与技术》,2006年第22期
3、吴县植,让您的宽带继续共享,《办公自动化》2007年第6期


作者简介:
赵丙秀,女,1976年10月,副教授,武汉软件职业学院
通讯地址:武汉市武昌关风路特一号(武汉软件工程职业学院计算机与软件学院)
邮政编码:430205   办公电话:15671683670 电子邮箱:sonyxiu@163.com
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值