有很多网友问我怎么架设uc的代理 我想说的是你们理解错了 我做的代理只是一个UC的mod 为了方便自己 如果想要穿墙直接下载 我改好的专用穿墙版好了 HTTP://WWW.COSHIM.COM 签名 安装就能用了 我可以服务到今年6月
ps 是共存版的 用英文版修改而成
如果你只想穿墙不想知道原理那么你直接忽略下面的文字好了~
内容仅供开发mod使用。。。。。
由于本人的s60手机n82进水了,干了以后不能用了。s60系列的uc就打算研究到这里了,下面给出实时切换uc服务器的源代码,以及如何修改uc的方法。
在讲解一下uc的原理好了。
下次的题目应该是Android平台的uc了。正在查找入手n1的方法。 canada能在google网店买到刻字无锁版的n1吗?
好了先上一张uc的流程图
分析
ps 流程图忘画cookie了 懒得重新画了 还有服务器地址写错了应该是ucs5.tj.ucweb.com 少了个s
先说前3步吧 就是截止到uc返回服务器的那步。
抓包获得:
===================code begin==================
POST / HTTP/1.1
Host: uc.ucweb.com
User-Agent: UCWEB7.0.2.37/28/999
Accept: application/xml;text/vnd.wap.wml;text/*,image/jpeg;q=0.5,image/png;q=0.5,image/gif;q=0.5,image/*;q=0.6,video/*,audio/*,*/*;q=0.6
Accept-Charset: windows-1252;q=1.0,utf-8;q=1.0,utf-16;q=1.0,iso-8859-1;q=0.6,*;q=0.1
Connection: close
Content-Length: 272
<assign sn="37-959266***-480f5***" version="7.0.2.37" platform="sis" m_bid="999" m_pfid="28" m_bseq="09113011" m_ss="240x320" m_imei="3589840*****642" m_dn="95926****-37d***ca" useragent="UCWEB7.0.2.37/28/999" newserver="1" last_server="" reassign="false" netname="wifi"/>
==================code end=================================
一点点介绍提交数据包的信息吧。
post模式
user-agent 不同的uc版本是不同的 某些版本的uc user-agent是手机型号+uc版本 而有的干脆就是空。
assign这段是重点 uc靠这个来返回服务器的。
sn 不知道如何获得的,好像是开uc随机生成的。 查询sn 的方法 地址栏输入http://command/command=echo.sn 或者打开 !/privete/2001f848/ucalwaysuseuserdata.dat
m_imei就是手机的串码 *#06#
m_dn 就是dn了 一个非常重要的信息,获取cookie全靠他 ,具体如何重要后面会说 查看方法 打开 !/privete/2001f848/ucalwaysuseuserdata.dat
newserver="1" last_server="" reassign="false" 都不清楚。。。。
netname="wifi"只有用wifi的时候会提交。 这个键值也会导致国外ip访问uc服务器不返回国外服务器。
下面直接copy以前写的文章的了 是关于后面几步的。
在地址栏输入一个链接=>请求代理服务器去载入这个链接=>代理服务器接到消息去查询数据库查找这个链接是否对应cookie=>合并 cookie后请求该链接=>得到该链接的页面 如果需要的话修改数据库中的cookie=> 对得到的页面做一些处理 like 出去javascript什么的=>压缩页面=>返回给uc页面=>我们就看到这个页面了。
但是有2点需要注意就是关于wap页面。
wap页面最近我没抓包 以前抓过 我就按以前的写吧 大概是我高三的时候11个月前。
如果请求的页面是wap(wml),uc是不会知道的除非有EXT:A:链接 (EXT:A:这个的意思是直接连不经过uc代理)uc服务器依然回去请求这个页面,按照上面的流程,不过服务器会多返回一个信息,大概就是告诉uc 这个页面是wml的 你需要自己链接不用请求我了。
如果没猜错的话uc可以处理wml页面 对xhtml 我觉得不能完全处理
,因为校内是xhtml的他前面没EXT:A:。我曾经自己写过一个xhtml的手机blog页面 发现返回的ip是代理的。 这个也是1年前的事情了 不知道uc改了没有。
uc的联网过程 和 请求服务器模式大体是就是这样 我觉得跟官方的出入不超过20%。
下面开始说明我对于uc服务器的mod (注意这个只是介绍mod 的原理 如果你仅仅要穿墙请看本文开头。这里面会穿插的讲一下如何把uc修改成穿墙的uc)
开始只为了wifi翻墙,毕竟用3g太费流量,我在国外用wifi居然不能翻墙。所以我就弄了一个uc的翻墙版。
但是国外服务器的优化效果大家也是知道的,我也懒 懒得切换中英文uc,就写了个uc实时切换服务器的mod。但是一些bug+资源占用很。。。 没有推广 只是小范围测试了一下,我服务器还将将能受得了。毕竟我的内存才128m。wp。。。。。fuk的东西 还是sa好呀。
如果仅仅想翻墙 永久使用英文服务器 这么做就可以了。 目 前让uc的到国外服务器的方法只有一个 就是建立一个自己的代理服务器提供服务器来替换uc的代理服务器提供服务器。
首先更改uc的代理服务器提供服务器的地址,打开uc的源文件把uc.ucweb.com改成自己架设的服务器ucweb.v70.us 还是短域名好 ^_^
然后做一个php程序返回代理服务器
先看看我们提交服务器请求后uc代理服务器提供服务器如何返回信息
HTTP/1.1 200 OK
Content-length: 184
Upd_interval: 7
Upd_misc: 0
Connection: close
Server: TwistedWeb/2.2.0
Upd_svr_url: http://wap.uc.cn/ucpack/dlmobile/control/client_upgrade.php
Us_srv_url: http://ucus.tj.ucweb.com/usquery.php
Date: Mon, 25 Jan 2010 03:21:40 GMT
Content-type: text/html
Assign: ucs5.tj.ucweb.com:80
assignucs5.tj.ucweb.com:80UPD_SVR_URL;http://wap.uc.cn/ucpack/dlmobile/control/client_upgrade.phpUPD_INTERVAL7
us_srv_url$http://ucus.tj.ucweb.com/usquery.phpUPD_MISC0
其中包括大量不可见字符。应该是做分割用的。
Assign: ucs5.tj.ucweb.com:80 就是服务器地址了。光这一个uc是不认的 还得在内容中返回assignucs5.tj.ucweb.com:80 (丢失了n个不可见字符 )
一个简单的uc代理服务器提供服务器的php源码可以这么写
header("Assign: ucs5.tj.ucweb.com:80");
print "\000\006assign\000\024ucs5.tj.ucweb.com:80";
这样我们就能控制uc链接哪个服务器了。 把ucs5.tj.ucweb.com:80给成e问服务器的ip和端口就好了。
这样一个简单的翻墙代理就出来了。 只要把这个php 扔到空间上然后把 uc原文件中的代理服务器提供服务器地址改成自己的就成了。(也就是上面那个2行php文件的地址 注意塞班uc网址最多12个字符。)
下面内容为mod的 如果您只想翻墙 永久用英文服务器 请忽略
下面介绍一下我的mod的工作原理 看图:
主要就是返回自己的php代理,然后根据自己的需求选择uc的哪个代理服务器。
在做一个代理切换页面就一切搞定了。这个mod可以多加服务器 也可以学autoproxy根据url自动选择uc的代理。
我也懒得研究了,源码放上吧。
=========================切换服务器用php程序===============
- <?php
- header("Content-type: text/html; charset=utf-8");
- $serverlist = array(
- '1' => array(
- 'id' => '1',
- 'name' => '国内服务器',
- 'address' => 'ucs5.tj.ucweb.com:80',
- ),
- '2' => array(
- 'id' => '2',
- 'name' => '国外服务器',
- 'address' => '67.228.166.109:8086',
- ),
- );
- $dn = (preg_match ("/.*dn\/(\d+-.{8}),text.*/i",$_SERVER["HTTP_ACCEPT"])) ? preg_replace("/.*dn\/(\d+-.{8}),text.*/i", "\$1",$_SERVER["HTTP_ACCEPT"]) : "" ;
- //echo $dn;
- if($_GET['action']=='test')
- {
- $dn = "959266293-00000000";
- }
- if(emptyempty($dn))
- {
- echo "NOT ALLOWED!PLEASE USE UCWEB TO BROWSE THIS PAGE.";
- }else{
- $link=mysql_connect("localhost","fuk","**************");
- mysql_select_db("uc", $link);
- if($_POST['post']=="fuk"&&$_POST['dn']=="$dn"){
- if(emptyempty($_POST['server'])){
- echo "请选择一个服务器<br>";
- printhtml();
- }else{
- $serv = $_POST['server'];
- $q = ($_POST['new']=='en') ? "INSERT INTO `uc` (`server` ,`dn` )VALUES ( '$serv' , '$dn' )" : "update `uc` set `server` = '$serv' WHERE `dn` = '$dn'";
- $rs = mysql_query($q, $link);
- if(!$rs){die("Valid result!".mysql_errno() . ": " . mysql_error() .$q);}
- echo "修改成功!<br>";
- unset ($q);
- }
- }
- printhtml();
- }
- function printhtml(){
- global $dn,$link,$serverlist;
- $q = "SELECT * FROM `uc` WHERE `dn`='$dn'";
- $rs = mysql_query($q, $link);
- if(!$rs){die("Valid result!1".mysql_errno() . ": " . mysql_error() .$q );}
- $row = mysql_fetch_row($rs);
- if(emptyempty($row)){
- $other = '<input type="hidden" name="new" value="en" />';
- }else{
- $server = $row[1];
- }
- print <<<EOT
- <form action="$_SERVER[PHP_SELF]" method="post" >
- <input type="hidden" name="dn" value="$dn" />
- <input type="hidden" name="post" value="fuk" />
- $other
- 请选择服务器:<select name="server" >
- <option value="">== 请选择服务器 ==</option>
- <option value="">--------------</option>
- <!--
- EOT;
- foreach ($serverlist as $key => $cate)
- {
- $selected = ($cate['id'] == $server) ? "selected" : "";
- print <<< EOT
- -->
- <option value="$cate[id]" $selected>$cate[name]</option>
- <!--
- EOT;
- }
- print <<< EOT
- -->
- </select></p>
- <p>
- <button name="submit" id="submit" type="submit" class="formbutton">确定</button>
- </p>
- </form>
- EOT;
- mysql_free_result($rs);
- exit();
- }
- ?>
==============================================================
php代理 用了curl库
==============================begin==========================
- <?php
- $serverlist = array(
- '1' => array(
- 'id' => '1',
- 'name' => '国内服务器',
- 'address' => 'ucs5.tj.ucweb.com:80',
- ),
- '2' => array(
- 'id' => '2',
- 'name' => '国外服务器',
- 'address' => '67.228.166.109:8086',
- ),
- );
- if ($_SERVER['REQUEST_METHOD'] == 'GET') {
- exit("fuck");
- }else{
- $dn = (preg_match ("/ucid=(\d+-.{8})/i",$_SERVER['QUERY_STRING'])) ? preg_replace("/ucid=(\d+-.{8})/i", "\$1",$_SERVER['QUERY_STRING']) : "" ;
- $link=mysql_connect("localhost","fuk","**************");
- mysql_select_db("uc", $link);
- $q = "SELECT * FROM `uc` WHERE `dn`='$dn'";
- $rs = mysql_query($q, $link);
- if(!$rs){die("Valid result!".mysql_errno() . ": " . mysql_error() .$q );}
- $row = mysql_fetch_row($rs);
- if(emptyempty($row)){
- $ip = "67.228.166.109:8086";
- }else{
- $w = $row[1];
- $ip = $serverlist[$w][address];
- }
- $curlInterface = curl_init();
- $headers[] = "Content-Type: {$_SERVER[CONTENT_TYPE]}";
- $headers[] = "Accept: {$_SERVER[HTTP_ACCEPT]}";
- $headers[] = "User-Agent : {$_SERVER[HTTP_USER_AGENT]}";
- $headers[] = 'Connection : keep-alive';
- $headers[] = 'Host: ucs5.tj.ucweb.com';
- curl_setopt_array($curlInterface, array(
- //ucs5.tj.ucweb.com
- CURLOPT_URL => "http://$ip$_SERVER[REQUEST_URI]",
- CURLOPT_HTTPHEADER => $headers,
- CURLOPT_POST => 1,
- CURLOPT_POSTFIELDS => file_get_contents('php://input'))
- );
- $result = curl_exec($curlInterface);
- $info = curl_getinfo($curlInterface);
- curl_close($curlInterface);
- }
- // file_put_contents ('postf.txt', file_get_contents('php://input'));
- // file_put_contents ('serv.txt',var_export ($_SERVER,TRUE));
- // file_put_contents ('info.txt',var_export ($info,TRUE));
- ?>
==========================end================================
uc的代理服务器返回服务器我没有现成的 只用了一个if语句写了下自己手机的串号 所以就不发了。
各位高人们自己研究吧。
uc的一些数据包
不懂的话欢迎各位留言。
请大家遵守cc协议。
本站所有作品若无单独指明均采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
--
Posted By GFW Blog to GFW BLOG at 2/08/2010 04:36:00 PM --
1、请点击www.chinagfw.org访问我们,订阅地址:http://feeds2.feedburner.com/chinagfwblog。2、需要Psiphon2注册邀请的朋友,请向english@sesawe.net发送电子邮件请求,说明 "can I have psiphon2 access" 并告诉您所在的国家。也可以使用Twitter Direct Messages或登陆Psiphon网站直接向Psiphon索取使用邀请。3、GFW Blog现提供最新翻墙工具下载(地址一、二、三),翻墙(突破网络封锁)方法介绍请见本站anti-censorship部分。4、本站热烈欢迎各位朋友投稿或推荐文章,请发邮件至chinagfwblog[at]gmail.com。5、敬请关注、支持、参与Sesawe和黑箱监管集体诉讼。
To unsubscribe from this group, send email to
gfw-blog+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/gfw-blog?hl=zh-CN
没有评论:
发表评论