新版RNAS认证机制分析和替代方法【附php的协议模拟程序源代码】

1.用户点击登陆,模拟http POS行为访问 http://server/****.***,POST的数据为ClientType,UserName,UserPwd(为了保护荣瑞公司,此处保密)
2.服务器接收到消息后,检查用户名和密码,若果用户没有登陆,把用户加入等待登陆的队列,返回一个

[text]ReturnCode=0|ReturnMsg=***[/text]

的指令,客户端从***里面读取连接参数,这样以后更换服务器参数就不用重新发布客户端了。如果用户已经登陆,返回

[text]ReturnCode=2|ReturnMsg= 用户XXX已经在N.N.N.N地址登录[/text]

,客户端发现ReturnCode=2,停止登陆行为,显示ReturnMsg的值,也就是我们看到的用户已经登录的提示信息!
3.如果ReturnCode=0,客户端用***参数调用openvpn开始登录.同时监控openvpn的打印信息,判断登陆成功与否和登录状态,不详叙述
4.断线,首先是向openvpn发送消息,断线,然后,向服务器发送消息,过程同1,只不过POST到另外一个地址,此时服务器返回的信息是 ReturnCode=0|ReturnMsg=用户XXX下线成功!,然后用户被从登录用户队列中清除。同时客户端显示信息ReturnMsg值
疑问解答:
A:为什么基于openvpn,RNAS换了新版,openvpn确登录不了?
答:因为有了1和和4两步!1把用户加入等待登录队列,4把用户踢出队列,少了这两部,服务器无法识别你的用户名和密码
B:

以上协议的分析日期为2010-5-16,不排除更改的可能,仅供参考

附上php版本的协议模拟程序源代码

[php]
<?php
date_default_timezone_set(PRC);
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start('ob_gzhandler');
else ob_start();
################# CONFIG ################
$config['proxy'] = '';
$config['proxy_port'] ='';
$config['useragent'] = 'Mozilla/5.0 (iPhone,U; CPU iPhone OS 2_2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) version/3.1.1 Mobile/5H11 Safari/525.20'; /// Iphone 2.21
########################################

################# FUNCTION ################
function curl($url='',$var=''){
global $config;
$curl = curl_init();
if (isset($config['proxy'])) {
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($curl, CURLOPT_PROXY, $config['proxy']);
curl_setopt($curl, CURLOPT_PROXYPORT, $config['proxy_port']);
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,20);
curl_setopt($curl, CURLOPT_USERAGENT, $config['useragent']);
//curl_setopt($curl, CURLOPT_REFERER, "http://for-ever.us/");
if($var) {
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $var);
}
//curl_setopt($curl, CURLOPT_COOKIEFILE,$config['cookie_file']);
//curl_setopt($curl, CURLOPT_COOKIEJAR,$config['cookie_file']);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 3);
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}

function settime(){
date_default_timezone_set(PRC);
echo 'VIA ihipop.gicp.net!<br>';
echo '刷新时间: '. date('Y-m-d H:i:s') ."<br><hr />";
return;
}

function geterror($result){
list($code,$result) = explode("|", $result);
list($result,$message) = explode("=", $result);
if($code=='ReturnCode=0'){
echo 'Server Return Message:<br>'.$code.'<br>'.$message.'<br>';
settime();
}else{
echo 'FAILED!.<br>';
echo 'Server Return Message:<br>'.$code.'<br>'.$message.'<br>';
settime();
}
return;
}

function connect_or_dis($UserName,$UserPwd,$type=NULL){
global $baseurl;
if($UserName==NULL || $UserPwd==NULL){
die('用户名,密码不能为空!');
//return;
}else{
if($type==NULL){
die('操作类型不能为空!');
}else{
switch ($type) {
case '0':
$type='ClientDisconnect.cgi';
break;
case '1':
$type='ClientConnectCfg.cgi';
break;
default:
die('操作类型错误!');
break;
}
}
}
$url = $baseurl.$type;
$var = "&ClientType=%C8%D9%C8%F0VPN%B5%C7%C2%BC%B9%A4%BE%DF&UserName=$UserName&UserPwd=$UserPwd";
$result = curl($url,$var);
//echo $result;
//echo '<br>';
geterror($result);
}

##################FUNCTION END##########################
########### MAIN CODE ################################
//定义用户名和密码
$UserName = 'ihipop';
$UserPwd = '000';
//定义服务器地址
$baseurl = 'http://211.65.64.7/';
//函数用法:connect_or_dis(用户名,密码,类型)
//类型0:下线
//类型1:上线
//例子:--------------------
//向服务器发送下线消息:
connect_or_dis($UserName,$UserPwd,'0');
//向服务器发送上线消息:
connect_or_dis($UserName,$UserPwd,'1');
//看到成功消息就可以用openvpn登陆荣瑞了
?>
[/php]
具体可以这样操作
写个html,加入js弹窗,
[javascript]
<SCRIPT LANGUAGE="javascript">
window.open ('rnas.php', 'newwindow', 'height=410, width=274, top=0,left=0,toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no,status=no')
</SCRIPT>
[/javascript]
rnas.php加入自动刷新代码即可
[html]<title>RUN Before RNAS</title>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"></meta>
<meta HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"></meta>
<!--这里定义页面自动刷新时间,单位是秒,计算下时间,开着窗口,然后程序会自动向服务器发送下线和上线消息
openVPN会变黄一会,接着会变绿 -->
<meta http-equiv="refresh" content="3600" />[/html]

Author Info :
  • From:新版RNAS认证机制分析和替代方法【附php的协议模拟程序源代码】
  • URL:https://blog.ihipop.com/2010/05/1196.html
  • Please Reserve This Link,Thanks!
  • 《新版RNAS认证机制分析和替代方法【附php的协议模拟程序源代码】》上有1条评论

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注