有很多网友问我怎么架设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
膜拜一下 @VoVz
回复删除