网络环境:局域网,前端路由器
系统:windows xp
要求:1.在没有登录56vpn的情况下不能联外网,局域网可用。
2.在登录56vpn后可以正常上网
3.批处理或者程序或者脚本实现
一、下载56vpn客户端,用测试账号进行登录后观察:
1.查看ip:ipconfig /all
Ethernet adapter 本地连接: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Realtek PCIe GBE Family Controller Physical Address. . . . . . . . . : 00-E0-62-0E-D4-60 Dhcp Enabled. . . . . . . . . . . : No IP Address. . . . . . . . . . . . : 192.168.1.5 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 192.168.1.1 DNS Servers . . . . . . . . . . . : 61.134.1.4 PPP adapter {89F9496A-98CC-48BD-B608-54DA0608994F}: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : WAN (PPP/SLIP) Interface Physical Address. . . . . . . . . : 00-53-45-00-00-00 Dhcp Enabled. . . . . . . . . . . : No IP Address. . . . . . . . . . . . : 172.16.11.19 Subnet Mask . . . . . . . . . . . : 255.255.255.255 Default Gateway . . . . . . . . . : 172.16.11.19 DNS Servers . . . . . . . . . . . : 202.106.0.20
2.查看网络连接情况:netstat -an
TCP 192.168.1.5:2869 192.168.1.1:1922 TIME_WAIT TCP 192.168.1.5:4224 118.180.6.35:80 CLOSE_WAIT TCP 192.168.1.5:4794 183.60.3.164:80 TIME_WAIT TCP 192.168.1.5:4799 114.112.57.208:1723 TIME_WAIT TCP 192.168.1.5:4800 106.120.151.64:80 TIME_WAIT TCP 192.168.1.5:4801 106.120.151.64:80 TIME_WAIT TCP 192.168.1.5:4931 113.31.20.67:32768 ESTABLISHED TCP 192.168.1.5:4932 113.31.20.67:32768 ESTABLISHED TCP 192.168.1.5:4933 113.31.20.67:32768 ESTABLISHED TCP 192.168.1.5:4934 113.31.20.67:32768 ESTABLISHED TCP 192.168.1.5:4939 113.31.20.67:32768 ESTABLISHED TCP 192.168.1.5:4941 113.31.20.67:32768 ESTABLISHED TCP 192.168.1.5:4945 114.112.67.75:80 TIME_WAIT TCP 192.168.1.5:4950 220.181.124.2:80 ESTABLISHED TCP 192.168.1.5:4991 125.76.224.240:80 ESTABLISHED
通过反复观察发现登录56vpn客户端后,客户端会通过56vpn服务器下载vpn服务器列表,登录vpn服务器后,会获取ip地址,dns服务器。也就是说要能登录56vpn,必须能与外网通信,既然登录vpn服务器后可以获取dns服务器,那也就是说本地dns不设置就可以达到不能浏览网站的要求,但是同时要能登录56vpn,而56vpn客户端是要登录服务器的,那肯定就需要知道服务器地址,于是对56vpn客户端登录过程用科来抓包分析。
分析发现56vpn客户端登录服务器cdn1.passvpn.com(这个是很关键的一步),基本思路就有了。
1.设置本地dns服务器为空,让其不能进行dns解析域名,这样就限制了本地不能通过域名访问网站的要求。
2.修改本地hosts文件,对cdn1.passvpn.com手工做解析,这样可以让56vpn客户端与服务器通信。
3.就是解决QQ、旺旺等通讯软件:
刚开始考虑的是用软件限制策略限制运行,但这不是想要的结果放弃。
考虑过防火墙以及TCP/ip筛选,这些因为是在本地电脑做限制,如果这样限制后同样即使登录vpn服务器,电脑还是受限制的,因此不可取。
在这个问题上纠结了很多天,主要对QQ要求不严,主要是针对旺旺来的,于是开始对旺旺进行分析,结果发现(多次分析漫长的分析),测试过旺旺的网络设置的 使用http方式登录等,都进行过测试,每次发现旺旺登录之前都会验证版本更新,由此引发去看看旺旺安装目录,安装目录发现以下几个文件:
lastlogininfo2.xml、lastlogininfo.xml、logininfo.xml
直觉告诉应该有戏,经过测试了解lastlogininfo2.xml中记录了旺旺成功登录后的服务器ip,最后,在不登陆56vpn的情况下,删除lastlogininfo2.xml后旺旺确实不能登录,基本可以实现了。
1.批处理删除lastlogininfo2.xml文件:
@echo off del "D:\Program Files\AliWangWang\profiles\system\lastlogininfo2.xml" /q del "D:\Program Files\AliWangWangmai\profiles\system\lastlogininfo2.xml" /q ipconfig /flushdns
2.用vbs来运行批处理,其目的是让运行的时候不出现cmd命令框:
Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c xz.bat",0
3.设置计划任务让其每分钟执行一次。
经过这样就可以实现:
在不登录56×××的情况下:
1.不能正常访问网站
2.旺旺不能正常登录(提示:连接服务器出现超时)
3.可以使用客户端正常登录56×××
登录56×××之后:
1.可正常连接×××服务器;
2.连接×××服务器后网站可正常访问。
3.旺旺可正常登录。(卖家版和买家版两个版本均通过测试)
但是这样存在一个问题就是:不能达到vpn掉线旺旺就立刻掉线并且再也不能登录,因为:
1.当×××掉线后:旺旺还正在登录中,这个时候还是会显示登录状态。如果旺旺没有登录,这个时候登录旺旺在一分钟内登录的话,旺旺应该还是可以登录的,一分钟后,旺旺就登录不了了。
2.如果当×××掉线的时候没有登录,同样,一分钟内旺旺登录可能能登录上去,如果一分钟后肯定是登录不上去的。
只能重新想办法了,最后就是用批处理监控网络连接,监控vpn是否登录,没有登录的话,立即杀掉旺旺进程,同时删除lastlogininfo2.xml。
批处理内容如下:
@echo off :begin for /f "delims=" %%a in ('ipconfig /all ^| find /i /c "PPP"') do set s=%%a ::echo %s% rem 版本2: set signDir=%TEMP% set signStop=%signDir%\1.stop ::del /q %signStop% if "2"=="%s%" ( goto isRunning ) else goto isStop goto begin rem 如果ipconfig /all命令结果中包含ppp说明正在拨号中,则执行这里。 :isRunning if exist %signStop% goto resume echo [%date% ] ×××正常拨号中.... goto begin rem 如果ipconfig /all命令结果中不包含ppp说明正在拨号中,则执行这里。 :isStop if not exist %signStop% goto isStopFirst echo [%date%] ×××断开拨号...... exit ::goto begin :isStopFirst echo %date% > %signStop% && echo [%date%] ×××掉线了.... taskkill /f /im aliim.exe del "D:\Program Files\AliWangWangmai\profiles\system\lastlogininfo2.xml start "" "D:\Program Files\AliWangWangmai\AliIM.exe" del /q %signStop% exit ::goto begin :resume del /q %signStop% && echo [%date%] ×××恢复正常.... goto begin