<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>一阁Blog</title>
	<atom:link href="http://yegle.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://yegle.net</link>
	<description>Linux、Android、Networks、PHP，所有我感兴趣的技术……</description>
	<lastBuildDate>Sat, 28 Aug 2010 17:01:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=abc</generator>
		<item>
		<title>廉价OTP解决方案：yubikey</title>
		<link>http://yegle.net/2010/08/29/yubikey-the-cheap-otp-resolution/</link>
		<comments>http://yegle.net/2010/08/29/yubikey-the-cheap-otp-resolution/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 17:01:08 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[杂七杂八]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=468</guid>
		<description><![CDATA[本人组织团购的第一批yubikey正在发货路上，所以下文全文都是纸上谈兵的分析。期待入手后的详细评测XD 从@ohsc那里了解到yubikey这个东西。作为信息安全的学生，我的第一反应是：两眼发亮。为什么两眼发亮呢？慢慢解释。 首先要从什么是OTP说起。 OTP是One-Time Password的简称，中文对应的准确翻译应该叫“一次一密”。根据香农（这个人…信息论、现代密码学，以及其他乱七八糟东西的发明者，牛逼至极的人物啊！）创立的现代密码学理论，一次一密是不可能被破解的，除此之外所有的其他加密方案都至少能被暴力破解，虽然破解的难度是指数级的。（当然，香农说的一次一密不可破解是有前提条件的，具体参考维基百科上的&#8221;一次性密码本&#8220;词条）。具体来说，一次一密就是在每次加密会话过程中，对传送的明文使用不同的密钥进行加密，每次使用的密钥是随机、不可预测、不重复使用的，从而保证了加密是绝对不可破解的。 当然，我说的是简单化的一次一密的实现，实际操作过程中，密钥的长度必须大于等于明文长度，而且密钥必须是可验证的（所以也可以看成是可预测的）。真正的一次一密，等于需要一个安全信道来传送不少于明文长度的密钥，几乎是没有意义的。 其实生活中已经有很多一次一密的例子，例如中国银行的E-TOKEN、魔兽世界安全令牌、中国建设银行的动态口令卡（纸制），这些都是一次一密的。 国内的一次一密电子令牌基本上使用的是SecurID，EMC公司下属的RSA公司出品的。这种一次一密解决方案使用一个预先定义的time-based的函数计算密码，称为Time-synchronized one-time password。每个token出厂前与服务器同步时间，在出厂后，token和服务器以相同的时钟计算，每分钟变化一次。在验证token上读取的数字时，服务端可以设置允许的误差值，例如允许前后5分钟内产生的密钥输入都认为是有效的，这样可以最大限度避免token的时钟漂移。这样的方案安全性很高，很多公司内部的vpn系统、线上服务器登陆系统等等都使用了SecurID进行认证。缺点很明显：价格高，据说每个的成本在￥200（网易出的那个山寨版我就不评论了…售价居然才60左右…只能说不太靠谱了…），而且需要配套RSA的服务端方案；需要电池保证时钟运作，因此存在更换token的情况。 另一种完全不同的一次一密方案是使用数学方法生成密钥序列，称为Mathematical-algorithm-based one-time password。这种算法使用数学函数生成密钥序列，然后依次使用密钥序列，从而不需要考虑时间因素。由于密钥序列生成过程中没有时间因素，实际生产的硬件token可以不包含电池供电，免去服务端与token的对时，成本可以下降，同时也没有电池耗尽更换token的担忧（更换token=安全隐患，因为需要人的参与，人永远是任何安全体系的最大漏洞…）。维基百科上举例了一个使用hash chain方法产生此类OTP的方案：找到一个单向函数f（例如任意一个hash函数），给定一个初始种子s。根据f和s产生序列：f(s), f(f(s)), f(f(f(s)))&#8230;。然后将该序列倒置，依次作为密钥使用。第三方如果偶然获取到序列中某个密钥，他就必须要通过f的反函数来计算下一个密钥，而f的单向性保证了这样的计算是不可行的。 yubikey使用的是第二种方案。它是一个廉价的OTP解决方案，10枚yubikey的平均价格是$28，由yubico提供验证服务器并提供API供开发者调用。它不需要电池供电，也没有液晶屏显示密钥。在插入电脑之后，它会被识别为一个USB键盘，在任意输入框聚焦并按一下yubikey上的硬件按钮，yubikey将自动模拟键盘输入一串一次性密钥。由于yubikey在电脑上被识别为USB键盘，它可以做到最好的免驱动支持（现在没有操作系统不支持USB键盘了吧？），可以在Windows/MacOSX/Linux上使用。关于yubikey使用的OTP生成方案，强烈建议阅读一下官方提供的文档来了解：http://yubico.com/files/Security_Evaluation_2009-09-09.pdf 要注意的是，yubikey每次插拔都会在内置的非易失性存储器上的Session Counter增加1，该Session Counter总长度为16bit，在每天插拔20次的频率下，该Counter在9年左右到达满值。这个寿命还是很让人满意的。 yubikey是一个非常开放的硬件设备，它本身的硬件实现原理、服务端架设代码、服务端API代码，都是完全开放的。从而在它之上衍生了很多开源项目与之搭配使用。从yubico的wiki页面可以看到一个简单的列表。稍微列举一下： YubiRADIUS：使用yubikey产生的OTP验证用户的RADIUS服务器。该服务器由yubico提供，任何拥有yubikey的用户都可以在上面开通管理员帐号进行使用。详细使用指南：http://wiki.yubico.com/wiki/index.php/Applications:YubiRADIUS_RADIUS_Service RADIUS on Premise：使用LDAP维护yubikey ID与用户的联系，自行搭建使用yubikey做验证的RADIUS服务器。OTP+VPN+RADIUS，这几乎是最安全的上网方案了。 YubiKey WordPress Plugin：wordpress登录过程中可使用yubikey配合原密码进行加强安全的登录 LastPass Login：使用yubikey作为lastpass的master password，详见@ohsc的日志。该功能需lastpass的高级会员权限，每月$1。 Google Apps：使用yubikey登录Google Apps。要是Gmail也能用yubikey登录，那就nb了… © yegle for 一阁Blog, 2010. &#124; 本文短链：http://ye.gl/e/7y &#124; 14个评论 &#124; Post tags:]]></description>
			<content:encoded><![CDATA[<p>本人组织团购的第一批yubikey正在发货路上，所以下文全文都是纸上谈兵的分析。期待入手后的详细评测XD</p>
<p>从<a href="http://www.imchao.net/life/start-yubikey.html">@ohsc</a>那里了解到yubikey这个东西。作为信息安全的学生，我的第一反应是：两眼发亮。为什么两眼发亮呢？慢慢解释。</p>
<p>首先要从什么是OTP说起。<br />
OTP是One-Time Password的简称，中文对应的准确翻译应该叫“一次一密”。根据香农（这个人…信息论、现代密码学，以及其他乱七八糟东西的发明者，牛逼至极的人物啊！）创立的现代密码学理论，一次一密是不可能被破解的，除此之外所有的其他加密方案都至少能被暴力破解，虽然破解的难度是指数级的。（当然，香农说的一次一密不可破解是有前提条件的，具体参考维基百科上的&#8221;<a href="http://zh.wikipedia.org/zh-cn/一次性密碼本">一次性密码本</a>&#8220;词条）。具体来说，一次一密就是在每次加密会话过程中，对传送的明文使用不同的密钥进行加密，每次使用的密钥是随机、不可预测、不重复使用的，从而保证了加密是绝对不可破解的。<br />
当然，我说的是简单化的一次一密的实现，实际操作过程中，密钥的长度必须大于等于明文长度，而且密钥必须是可验证的（所以也可以看成是可预测的）。真正的一次一密，等于需要一个安全信道来传送不少于明文长度的密钥，几乎是没有意义的。</p>
<p>其实生活中已经有很多一次一密的例子，例如中国银行的E-TOKEN、<a href="http://www.warcraftchina.com/services/wow-token/">魔兽世界安全令牌</a>、中国建设银行的动态口令卡（纸制），这些都是一次一密的。</p>
<p>国内的一次一密电子令牌基本上使用的是<a href="http://en.wikipedia.org/wiki/SecurID">SecurID</a>，EMC公司下属的RSA公司出品的。这种一次一密解决方案使用一个预先定义的time-based的函数计算密码，称为Time-synchronized one-time password。每个token出厂前与服务器同步时间，在出厂后，token和服务器以相同的时钟计算，每分钟变化一次。在验证token上读取的数字时，服务端可以设置允许的误差值，例如允许前后5分钟内产生的密钥输入都认为是有效的，这样可以最大限度避免token的时钟漂移。这样的方案安全性很高，很多公司内部的vpn系统、线上服务器登陆系统等等都使用了SecurID进行认证。缺点很明显：价格高，据说每个的成本在￥200（网易出的那个山寨版我就不评论了…售价居然才60左右…只能说不太靠谱了…），而且需要配套RSA的服务端方案；需要电池保证时钟运作，因此存在更换token的情况。</p>
<p>另一种完全不同的一次一密方案是使用数学方法生成密钥序列，称为Mathematical-algorithm-based one-time password。这种算法使用数学函数生成密钥序列，然后依次使用密钥序列，从而不需要考虑时间因素。由于密钥序列生成过程中没有时间因素，实际生产的硬件token可以不包含电池供电，免去服务端与token的对时，成本可以下降，同时也没有电池耗尽更换token的担忧（更换token=安全隐患，因为需要人的参与，人永远是任何安全体系的最大漏洞…）。维基百科上举例了一个使用hash chain方法产生此类OTP的方案：找到一个单向函数f（例如任意一个hash函数），给定一个初始种子s。根据f和s产生序列：f(s), f(f(s)), f(f(f(s)))&#8230;。然后将该序列倒置，依次作为密钥使用。第三方如果偶然获取到序列中某个密钥，他就必须要通过f的反函数来计算下一个密钥，而f的单向性保证了这样的计算是不可行的。</p>
<p>yubikey使用的是第二种方案。它是一个廉价的OTP解决方案，10枚yubikey的平均价格是$28，由yubico提供验证服务器并提供API供开发者调用。它不需要电池供电，也没有液晶屏显示密钥。在插入电脑之后，它会被识别为一个USB键盘，在任意输入框聚焦并按一下yubikey上的硬件按钮，yubikey将自动模拟键盘输入一串一次性密钥。由于yubikey在电脑上被识别为USB键盘，它可以做到最好的免驱动支持（现在没有操作系统不支持USB键盘了吧？），可以在Windows/MacOSX/Linux上使用。关于yubikey使用的OTP生成方案，强烈建议阅读一下官方提供的文档来了解：<a href="http://yubico.com/files/Security_Evaluation_2009-09-09.pdf">http://yubico.com/files/Security_Evaluation_2009-09-09.pdf</a></p>
<p>要注意的是，yubikey每次插拔都会在内置的非易失性存储器上的Session Counter增加1，该Session Counter总长度为16bit，在每天插拔20次的频率下，该Counter在9年左右到达满值。这个寿命还是很让人满意的。</p>
<p>yubikey是一个非常开放的硬件设备，它本身的硬件实现原理、服务端架设代码、服务端API代码，都是完全开放的。从而在它之上衍生了很多开源项目与之搭配使用。从<a href="http://wiki.yubico.com/wiki/index.php/Main_Page">yubico的wiki页面</a>可以看到一个简单的列表。稍微列举一下：</p>
<ul>
<li>YubiRADIUS：使用yubikey产生的OTP验证用户的RADIUS服务器。该服务器由yubico提供，任何拥有yubikey的用户都可以在上面开通管理员帐号进行使用。详细使用指南：<a href="http://wiki.yubico.com/wiki/index.php/Applications:YubiRADIUS_RADIUS_Service">http://wiki.yubico.com/wiki/index.php/Applications:YubiRADIUS_RADIUS_Service</a></li>
<li>RADIUS on Premise：使用LDAP维护yubikey ID与用户的联系，自行搭建使用yubikey做验证的RADIUS服务器。OTP+VPN+RADIUS，这几乎是最安全的上网方案了。</li>
<li>YubiKey WordPress Plugin：wordpress登录过程中可使用yubikey配合原密码进行加强安全的登录</li>
<li>LastPass Login：使用yubikey作为lastpass的master password，详见<a href="http://www.imchao.net/life/start-yubikey.html">@ohsc的日志</a>。该功能需lastpass的高级会员权限，每月$1。</li>
<li>Google Apps：使用yubikey登录Google Apps。要是Gmail也能用yubikey登录，那就nb了…</li>
</ul>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7y">http://ye.gl/e/7y</a> |
<a href="http://ye.gl/e/7y#comments">14个评论</a> |
Post tags: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/08/29/yubikey-the-cheap-otp-resolution/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Twitter2Renren PHP同步脚本（20100828更新）</title>
		<link>http://yegle.net/2010/08/28/twitter2renren-php/</link>
		<comments>http://yegle.net/2010/08/28/twitter2renren-php/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 06:27:52 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[脚本]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[renren]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=467</guid>
		<description><![CDATA[又更新了一下，使用m.renren.com进行状态发布 脚本名称正式定为twitter2renren.php 使用方法详见这篇日志 代码： &#60; ?php &#160; // //twitter2renren.php //By @yegle, yegle.net //Licensed under CC by-nc-sa //Version:20100828 // &#160; $file = '/home/yegle/.twitter2renren'; $cookie_file = '/home/yegle/.twitter2renren.cookie'; $twitter_username = ''; $twitter_pwd = ''; $hashtag = ''; $renren_username = ''; $renren_password = ''; &#160; //配置完毕，请停止编辑文件！ if&#40;file_exists&#40;$file&#41;&#41;&#123; $lastid = intval&#40;file_get_contents&#40;$file&#41;&#41;; &#125; else&#123; touch&#40;$file&#41;; $lastid = 0; &#125; &#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>又更新了一下，使用m.renren.com进行状态发布</p>
<p>脚本名称正式定为twitter2renren.php</p>
<p>使用方法详见<a href="http://yegle.net/2009/10/31/php-script-synchronizing-twitter-to-renren/">这篇日志</a></p>
<p>代码：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
&nbsp;
<span style="color: #666666; font-style: italic;">//</span>
<span style="color: #666666; font-style: italic;">//twitter2renren.php</span>
<span style="color: #666666; font-style: italic;">//By @yegle, yegle.net</span>
<span style="color: #666666; font-style: italic;">//Licensed under CC by-nc-sa</span>
<span style="color: #666666; font-style: italic;">//Version:20100828</span>
<span style="color: #666666; font-style: italic;">//</span>
&nbsp;
<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/home/yegle/.twitter2renren'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$cookie_file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/home/yegle/.twitter2renren.cookie'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$twitter_username</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$twitter_pwd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hashtag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$renren_username</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$renren_password</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//配置完毕，请停止编辑文件！</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$lastid</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">touch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$lastid</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #000088;">$timeline_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://'</span><span style="color: #339933;">.</span><span style="color: #000088;">$twitter_username</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':'</span><span style="color: #339933;">.</span><span style="color: #000088;">$twitter_pwd</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'@twitter.com/statuses/user_timeline.rss?count=200'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lastid</span><span style="color: #339933;">!==</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$timeline_url</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'&amp;since_id='</span><span style="color: #339933;">.</span><span style="color: #000088;">$lastid</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #000088;">$timeline</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$timeline_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #990000;">simplexml_load_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$timeline</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$items</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">channel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;no newer tweet<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$new_id</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/.*\/([0-9]*)$/'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'$1'</span><span style="color: #339933;">,</span><span style="color: #990000;">strval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$new_id</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/.*\/([0-9]*)$/'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'$1'</span><span style="color: #339933;">,</span><span style="color: #990000;">strval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_id</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;error<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span><span style="color: #000088;">$new_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_arr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$tweet</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tweet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #339933;">,</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$twitter_username</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'@'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!==</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hashtag</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #339933;">,</span><span style="color: #000088;">$hashtag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!==</span><span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;RT: @&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;转自&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #000088;">$post_arr</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$text</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' [twitter]'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_arr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;no need.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$post_arr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_reverse</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_arr</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_arr</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$post</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'sour=home&amp;status='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;update=发布'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$renren_login</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://3g.renren.com/login.do?fx=0&amp;autoLogin=true&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_COOKIEJAR<span style="color: #339933;">,</span><span style="color: #000088;">$cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_URL<span style="color: #339933;">,</span><span style="color: #000088;">$renren_login</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POST<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_FOLLOWLOCATION<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POSTFIELDS<span style="color: #339933;">,</span><span style="color: #0000ff;">'email='</span><span style="color: #339933;">.</span><span style="color: #000088;">$renren_username</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;password='</span><span style="color: #339933;">.</span><span style="color: #000088;">$renren_password</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;login=登录'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">#curl_setopt($ch,CURLOPT_VERBOSE,TRUE);
</span>    <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$pattern</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/action=&quot;([^&quot;]*)&quot;/'</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pattern</span><span style="color: #339933;">,</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POST<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POSTFIELDS<span style="color: #339933;">,</span><span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_COOKIEFILE<span style="color: #339933;">,</span><span style="color: #000088;">$cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);</span>
    <span style="color: #666666; font-style: italic;">//curl_setopt($ch,CURLOPT_REFERER,'http://status.renren.com/ajaxproxy.htm');</span>
    <span style="color: #000088;">$ret</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7x">http://ye.gl/e/7x</a> |
<a href="http://ye.gl/e/7x#comments">4个评论</a> |
Post tags: <a href="http://yegle.net/tag/php/" rel="tag">php</a>, <a href="http://yegle.net/tag/renren/" rel="tag">renren</a>, <a href="http://yegle.net/tag/twitter/" rel="tag">twitter</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/08/28/twitter2renren-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>使用PHP进行HTTP重定向</title>
		<link>http://yegle.net/2010/07/16/http-redirect-using-php/</link>
		<comments>http://yegle.net/2010/07/16/http-redirect-using-php/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 11:49:03 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[网络相关]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=466</guid>
		<description><![CDATA[在Google里搜“PHP 重定向”，这篇日志的排名在第四。但是这篇写得实在太烂了…重写一篇… 什么是HTTP重定向？ 当你访问www.yegle.net时，地址栏的地址会自动变成yegle.net。当你访问ye.gl的时候，地址栏的地址会变成yegle.net。这就是HTTP重定向 一个HTTP请求，返回的HTTP Response Header里，第一行是HTTP的状态码。正常情况下，HTTP请求返回的状态码是200 OK。 正常的HTTP请求，返回200 OK： < HTTP/1.1 200 OK < Date: Fri, 16 Jul 2010 11:21:10 GMT < Server: Apache < X-Powered-By: PHP/5.2.4-2ubuntu5.10 < Set-Cookie: PHPSESSID=7f86ed2e5a4750275e98971773ac88ab; path=/ < Expires: Thu, 19 Nov 1981 08:52:00 GMT < Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 < Pragma: no-cache < Set-Cookie: wassup=ZjVjMWExMjZjNmIxNzU1NDBhZjU0MmM5MzhmYjllZDQ6OjEyNzkyODE5NzE6Ojo6MjAwMTozODg6ZjAwMDo6ZTZmOjoyMDAxOjM4ODpmMDAwOjplNmY%253D; expires=Fri, 16-Jul-2010 [...]]]></description>
			<content:encoded><![CDATA[<p>在Google里搜“<a href="http://www.google.com/search?q=php+重定向">PHP 重定向</a>”，<a href="http://yegle.net/2008/03/30/php-redirection/">这篇日志</a>的排名在第四。但是这篇写得实在太烂了…重写一篇…</p>
<p>什么是HTTP重定向？</p>
<p>当你访问www.yegle.net时，地址栏的地址会自动变成yegle.net。当你访问ye.gl的时候，地址栏的地址会变成yegle.net。这就是HTTP重定向</p>
<p>一个HTTP请求，返回的HTTP Response Header里，第一行是HTTP的状态码。正常情况下，HTTP请求返回的状态码是200 OK。<br />
正常的HTTP请求，返回200 OK：</p>
<blockquote><p>< HTTP/1.1 200 OK<br />
< Date: Fri, 16 Jul 2010 11:21:10 GMT<br />
< Server: Apache<br />
< X-Powered-By: PHP/5.2.4-2ubuntu5.10<br />
< Set-Cookie: PHPSESSID=7f86ed2e5a4750275e98971773ac88ab; path=/<br />
< Expires: Thu, 19 Nov 1981 08:52:00 GMT<br />
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0<br />
< Pragma: no-cache<br />
< Set-Cookie: wassup=ZjVjMWExMjZjNmIxNzU1NDBhZjU0MmM5MzhmYjllZDQ6OjEyNzkyODE5NzE6Ojo6MjAwMTozODg6ZjAwMDo6ZTZmOjoyMDAxOjM4ODpmMDAwOjplNmY%253D; expires=Fri, 16-Jul-2010 12:11:11 GMT; path=/<br />
< X-Pingback: http://yegle.net/xmlrpc.php<br />
< Vary: Accept-Encoding<br />
< Transfer-Encoding: chunked<br />
< Content-Type: text/html; charset=UTF-8<br />
<</p></blockquote>
<p>其他的比较知名的还有例如：</p>
<ul>
<li>404 Not Found</li>
<li>301 Moved Permanently</li>
<li>302 Found</li>
<li>500 Internal Server Error</li>
</ul>
<p>HTTP重定向就是通过301和302两种状态码来实现的。</p>
<p>302是临时重定向的意思。表示被访问页面因为各种需要被临时跳转到其他页面。具体的例子是访问 http://yegle.net/recursion.php</p>
<blockquote><p>< HTTP/1.1 302 Found<br />
< Date: Fri, 16 Jul 2010 11:26:48 GMT<br />
< Server: Apache<br />
< X-Powered-By: PHP/5.2.4-2ubuntu5.10<br />
< Location: http://yegle.net/recursion.php<br />
< Cache-Control: max-age=600<br />
< Expires: Fri, 16 Jul 2010 11:36:48 GMT<br />
< Vary: Accept-Encoding<br />
< Content-Length: 0<br />
< Content-Type: text/html<br />
<
</p></blockquote>
<p>浏览器在收到302 Found的状态码之后会在返回的HTTP Response Header中查找Location字段，然后访问对应地址。在这个例子中，浏览器就会访问 http://yegle.net/recursion.php (嗯这是一个递归，你懂的…)</p>
<p>301是永久重定向。这样的例子很好找。例如 http://google.com</p>
<blockquote><p>< HTTP/1.1 301 Moved Permanently<br />
< Location: http://www.google.com/<br />
< Content-Type: text/html; charset=UTF-8<br />
< Date: Fri, 16 Jul 2010 11:29:07 GMT<br />
< Expires: Sun, 15 Aug 2010 11:29:07 GMT<br />
< Cache-Control: public, max-age=2592000<br />
< Server: gws<br />
< Content-Length: 219<br />
< X-XSS-Protection: 1; mode=block<br />
<
</p></blockquote>
<p>同样，浏览器在发现301的状态码之后会查找Location字段，然后访问那个地址。</p>
<p>Location字段的格式很随意，既可以是绝对地址，也可以是相对地址，还可以是相对根目录的地址。以下Location字段都是合法的：</p>
<blockquote><p>Location: http://yegle.net/<br />
Location: /test/index.php<br />
Location: index.php<br />
Location: ../index.php
</p></blockquote>
<p>301重定向和302重定向在SEO以及缓存上是有非常大区别的。</p>
<p>对于SEO也就是搜索引擎优化，一个页面302重定向到另一个页面，新页面的PageRank不会受原页面影响。而一个页面301重定向到另一个页面，原页面的PageRank会被传递到新页面。所以对于一个网站进行域名转换，最好的方法就是使用301重定向，在经过一段时间之后可以不损失PR地将全站转移到新域名下。</p>
<p>对于HTTP代理服务器例如squid来说，如果一个页面是302重定向到新页面并且没有指定Expire HTTP头，squid将不缓存这个信息，也就是说每次用户通过代理请求时都会重新获取一遍。而对于301重定向，squid可以将结果缓存以便快速响应下一个请求相同页面的用户。</p>
<p>PHP里的302重定向非常简单，只要在返回的HTTP Response Header里添加Location字段，PHP将自动返回302状态码。例如：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Location: http://yegle.net/recursion.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>这段代码将自动重定向到http://yegle.net/recursion.php</p>
<p>而301重定向则稍微有点复杂，需要直接将301状态码用header函数返回给用户。例如：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
    <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;HTTP/1.1 301 Moved Permanently&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;Location: http://yegle.net/&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>注意的是，跳转不是在收到response header的时候马上进行，也就是说页面的剩余内容会被下载来之后浏览器才会跳转。新手常犯的一个错误是，在逻辑判断时对符合条件的情况进行header跳转之后，忘了在之后加上exit()，导致错误。例如，用user_login()判断用户是否进行了登录，如果未登录则跳转到登录页面。代码如下：</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>user_login<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Location:login.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">//display contents for login users.</span></pre></div></div>

<p>这里，容易以为header之后这段代码就结束了，没有在header之后使用exit()。后面的代码继续被执行，导致未登录用户看到了已登录用户才能看到的内容。</p></blockquote>
</blockquote>
</blockquote>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7w">http://ye.gl/e/7w</a> |
<a href="http://ye.gl/e/7w#comments">6个评论</a> |
Post tags: <a href="http://yegle.net/tag/php/" rel="tag">php</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/07/16/http-redirect-using-php/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Windows下编译OpenVPN 2.1.1</title>
		<link>http://yegle.net/2010/05/19/compile-openvpn-2-1-1-in-windows/</link>
		<comments>http://yegle.net/2010/05/19/compile-openvpn-2-1-1-in-windows/#comments</comments>
		<pubDate>Wed, 19 May 2010 10:26:17 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[网络相关]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[msys]]></category>
		<category><![CDATA[openvpn]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=464</guid>
		<description><![CDATA[为什么要编译OpenVPN OpenVPN官方提供的Windows二进制文件默认是不包含从文件读取用户名密码功能的。 作为OpenVPN卖家，可以在自己编译的OpenVPN安装包里提供自己的logo等信息 安装步骤 注意：以下提到的安装路径皆为示例，如无特殊说明，皆可根据实际情况作更改。 安装NSIS 下载链接：http://sourceforge.net/projects/nsis/files/NSIS 2/2.46/nsis-2.46-setup.exe/download 正常安装即可。如无必要，请选择完整安装。 安装MinGW 下载链接：http://sourceforge.net/projects/mingw/files/Automated MinGW Installer 页面正上方，那个绿色大按钮就是下载链接…不要像我一样在下面的文件列表找半天… 呃…选择文件列表里的MinGW-5.1.6.exe下载… 选择完整安装，安装到D:\MinGW下。 安装MSYS 下载链接：http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe 选择安装到D:\msys\1.0\目录下。 安装msysDTK 下载链接：http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe 和MSYS选择安装在相同位置，D:\msys\1.0\目录下。 配置环境变量 我的电脑，右键->属性->高级->环境变量，观察窗口上部“XXX的用户环境变量”，看是否有PATH这个环境变量。 如果有，双击修改，在最后加上&#8217;;d:\MinGW\bin;d:\msys\1.0\bin&#8216;(单引号内内容，注意最前面的分号)。 如果没有，新建一个，变量名PATH，变量值&#8217;d:\MinGW\bin;d:\msys\1.0\bin&#8216;(单引号内内容，注意最前面没有分号) 完成操作后，开始->运行，打开cmd窗口，输入bash。如果出现“bash-3.1$”字样，说明环境变量修改成功。输入exit退出bash。 下载OpenVPN预编译文件 这里的预编译文件不是openvpn本身的预编译文件，而是例如openssl，tap驱动等等openvpn编译过程中需要的二进制文件 下载链接：http://openvpn.net/prebuilt/2.1_rc22-prebuilt.tbz 版本不是2.1.1没有关系，因为2.1_rc22到2.1.0的代码变化不多，而2.1.0到2.1.1只是修正了一下内置的rpm打包用的spec文件而已… 解压，获得以下目录： gen-prebuilt lzo-2.02 openssl-0.9.8l pkcs11-helper 将以上4个目录中都复制到D:\下 下载OpenVPN GUI二进制文件 下载链接：http://openvpn.se/files/binary/openvpn-gui-1.0.3.exe 如果想深度定制自己的OpenVPN安装程序，可以自行编译安装OpenVPN GUI，修改源码中的rc文件得到自定义效果。具体就不在这里介绍了 下载后在D盘下建立openvpn-gui目录，将openvpn-gui-1.0.3.exe放到这个目录下 下载OpenVPN 2.1.1源码 下载链接：http://openvpn.net/release/openvpn-2.1.1.tar.gz 下载解压，获得openvpn-2.1.1目录，放到D盘下 至此，D盘目录下有如下文件夹： openvpn-2.1.1 openvpn-gui gen-prebuilt lzo-2.02 openssl-0.9.8l pkcs11-helper 如果有缺少目录，请返回前面步骤检查:-) [...]]]></description>
			<content:encoded><![CDATA[<p><strong>为什么要编译OpenVPN</strong></p>
<ol>
<li>OpenVPN官方提供的Windows二进制文件默认是不包含从文件读取用户名密码功能的。</li>
<li>作为OpenVPN卖家，可以在自己编译的OpenVPN安装包里提供自己的logo等信息</li>
</ol>
<p> <a href="http://yegle.net/2010/05/19/compile-openvpn-2-1-1-in-windows/#more-464" class="more-link">(全文 &#8230;)</a></p>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7u">http://ye.gl/e/7u</a> |
<a href="http://ye.gl/e/7u#comments">19个评论</a> |
Post tags: <a href="http://yegle.net/tag/mingw/" rel="tag">mingw</a>, <a href="http://yegle.net/tag/msys/" rel="tag">msys</a>, <a href="http://yegle.net/tag/openvpn/" rel="tag">openvpn</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/05/19/compile-openvpn-2-1-1-in-windows/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>购买yegle的OpenVPN,你能获得什么?</title>
		<link>http://yegle.net/2010/04/14/what-will-you-get-from-my-openvpn/</link>
		<comments>http://yegle.net/2010/04/14/what-will-you-get-from-my-openvpn/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 06:41:40 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[杂七杂八]]></category>
		<category><![CDATA[openvpn]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=462</guid>
		<description><![CDATA[像这样自夸的文章我是会脸红的,嘿嘿~单纯炫耀~ 购买我的OpenVPN,你可以进行正常的网络访问.这是当然的~ 除此之外: 如果你使用的是CMWAP的无限流量的卡,你可以通过TCP方式连接我的VPN,实现CMNET效果~ 如果你的公司网络必须要代理才能访问外网,你可以通过TCP+HTTP PROXY方式连接到我的VPN,实现无障碍访问网络 如果你是教育网用户,你可以通过ipv6方式连接我的VPN,实现翻出教育网+翻出GFW双重效果 如果你能在你周围搜到CMCC,ChinaNet的wifi网络,你可以使用53端口连接我的VPN,免费蹭网~ 如果你不喜欢VPN的全局性,你可以选择不修改默认路由的方式连接到我的VPN,用VPN网关+FoxyProxy自由翻墙 嗯,就是这样的,娃哈哈~~~~~ © yegle for 一阁Blog, 2010. &#124; 本文短链：http://ye.gl/e/7s &#124; 61个评论 &#124; Post tags: openvpn]]></description>
			<content:encoded><![CDATA[<p>像这样自夸的文章我是会脸红的,嘿嘿~单纯炫耀~</p>
<p>购买我的OpenVPN,你可以进行正常的网络访问.这是当然的~</p>
<p>除此之外:</p>
<p>如果你使用的是CMWAP的无限流量的卡,你可以通过TCP方式连接我的VPN,实现CMNET效果~<br />
如果你的公司网络必须要代理才能访问外网,你可以通过TCP+HTTP PROXY方式连接到我的VPN,实现无障碍访问网络<br />
如果你是教育网用户,你可以通过ipv6方式连接我的VPN,实现翻出教育网+翻出GFW双重效果<br />
如果你能在你周围搜到CMCC,ChinaNet的wifi网络,你可以使用53端口连接我的VPN,免费蹭网~<br />
如果你不喜欢VPN的全局性,你可以选择不修改默认路由的方式连接到我的VPN,用VPN网关+FoxyProxy自由翻墙</p>
<p>嗯,就是这样的,娃哈哈~~~~~</p>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7s">http://ye.gl/e/7s</a> |
<a href="http://ye.gl/e/7s#comments">61个评论</a> |
Post tags: <a href="http://yegle.net/tag/openvpn/" rel="tag">openvpn</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/04/14/what-will-you-get-from-my-openvpn/feed/</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
		<item>
		<title>Twitter同步人人脚本(Updated at 2010-04-12)</title>
		<link>http://yegle.net/2010/04/12/php-script-synchronizing-twitter-to-renren-updated-version/</link>
		<comments>http://yegle.net/2010/04/12/php-script-synchronizing-twitter-to-renren-updated-version/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 15:30:24 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[网络相关]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[renren]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=460</guid>
		<description><![CDATA[使用方法详见这篇日志 人人很贱地加了个参数,以前的脚本就失效了.没啥,在强大的正则面前,任何企图让自动化脚本失效的图谋都会被粉碎! 其实这个升级版里的正则还可以更漂亮一点…懒得优化了… 另外这个版本会把你的官方RT也转发到renren上去 Update at 2010-04-14,修改几个小bug Update at 2010-05-27,修改几个小bug &#60; ?php &#160; // //twitter2renren.php //By @yegle, yegle.net //Licensed under CC by-nc-sa // &#160; $file = '用于记录你最后一次同步tweet id的文件路径。注意不要删除并让脚本能读取！'; $cookie_file = '保留curl模拟登陆renren.com的cookie文件路径。'; $twitter_username = '你的twitter用户名,注意是用户名,不是邮箱名'; $twitter_pwd = '你的twitter密码'; $hashtag = '如果你希望在你的推里包含特殊字符串时才转过去，请设置该变量，否则只转发不是以@开头的推'; $renren_username = 'renren.com登录用户名'; $renren_password = 'renren.com登录密码'; &#160; //配置完毕，请停止编辑文件！ if&#40;file_exists&#40;$file&#41;&#41;&#123; $lastid = intval&#40;file_get_contents&#40;$file&#41;&#41;; &#125; else&#123; touch&#40;$file&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>使用方法详见<a href="http://yegle.net/2009/10/31/php-script-synchronizing-twitter-to-renren/">这篇日志</a><br />
人人很贱地加了个参数,以前的脚本就失效了.没啥,在强大的正则面前,任何企图让自动化脚本失效的图谋都会被粉碎!</p>
<p>其实这个升级版里的正则还可以更漂亮一点…懒得优化了…</p>
<p>另外这个版本会把你的官方RT也转发到renren上去</p>
<p>Update at 2010-04-14,修改几个小bug<br />
Update at 2010-05-27,修改几个小bug</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
&nbsp;
<span style="color: #666666; font-style: italic;">//</span>
<span style="color: #666666; font-style: italic;">//twitter2renren.php</span>
<span style="color: #666666; font-style: italic;">//By @yegle, yegle.net</span>
<span style="color: #666666; font-style: italic;">//Licensed under CC by-nc-sa</span>
<span style="color: #666666; font-style: italic;">//</span>
&nbsp;
<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'用于记录你最后一次同步tweet id的文件路径。注意不要删除并让脚本能读取！'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$cookie_file</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'保留curl模拟登陆renren.com的cookie文件路径。'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$twitter_username</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'你的twitter用户名,注意是用户名,不是邮箱名'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$twitter_pwd</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'你的twitter密码'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hashtag</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'如果你希望在你的推里包含特殊字符串时才转过去，请设置该变量，否则只转发不是以@开头的推'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$renren_username</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'renren.com登录用户名'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$renren_password</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'renren.com登录密码'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//配置完毕，请停止编辑文件！</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$lastid</span> <span style="color: #339933;">=</span> <span style="color: #990000;">intval</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">touch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$lastid</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #000088;">$timeline_url</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://'</span><span style="color: #339933;">.</span><span style="color: #000088;">$twitter_username</span><span style="color: #339933;">.</span><span style="color: #0000ff;">':'</span><span style="color: #339933;">.</span><span style="color: #000088;">$twitter_pwd</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'@twitter.com/statuses/user_timeline.rss?count=200'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$lastid</span><span style="color: #339933;">!==</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$timeline_url</span><span style="color: #339933;">.=</span><span style="color: #0000ff;">'&amp;since_id='</span><span style="color: #339933;">.</span><span style="color: #000088;">$lastid</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
<span style="color: #000088;">$timeline</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$timeline_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$obj</span> <span style="color: #339933;">=</span> <span style="color: #990000;">simplexml_load_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$timeline</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$items</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$obj</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">channel</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;no newer tweet<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$new_id</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/.*\/([0-9]*)$/'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'$1'</span><span style="color: #339933;">,</span><span style="color: #990000;">strval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$new_id</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/.*\/([0-9]*)$/'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'$1'</span><span style="color: #339933;">,</span><span style="color: #990000;">strval</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$new_id</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;error<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">file_put_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #339933;">,</span><span style="color: #000088;">$new_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$post_arr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$items</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$tweet</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tweet</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #339933;">,</span><span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$twitter_username</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'@'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!==</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #009900;">&#40;</span> <span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$hashtag</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$text</span><span style="color: #339933;">,</span><span style="color: #000088;">$hashtag</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">!==</span><span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$text</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;RT: @&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;转自&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$text</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
         <span style="color: #000088;">$post_arr</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$text</span><span style="color: #339933;">.</span><span style="color: #0000ff;">' [twitter]'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_arr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;no need.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//$post_arr = array_reverse($post_arr);</span>
&nbsp;
<span style="color: #000088;">$renren_login</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;http://passport.renren.com/PLogin.do&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_COOKIEJAR<span style="color: #339933;">,</span><span style="color: #000088;">$cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_URL<span style="color: #339933;">,</span><span style="color: #000088;">$renren_login</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POST<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_FOLLOWLOCATION<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POSTFIELDS<span style="color: #339933;">,</span><span style="color: #0000ff;">'email='</span><span style="color: #339933;">.</span><span style="color: #000088;">$renren_username</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;password='</span><span style="color: #339933;">.</span><span style="color: #000088;">$renren_password</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;autoLogin=true&amp;origURL=http://www.renren.com/Home.do&amp;domain=renren.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#curl_setopt($ch,CURLOPT_VERBOSE,TRUE);
</span><span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$pattern</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;/get_check:'([^']*)'/&quot;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pattern</span><span style="color: #339933;">,</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$get_check</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$renren_status</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://status.renren.com/doing/update.do'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_arr</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$post</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'c='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;raw='</span><span style="color: #339933;">.</span><span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&amp;isAtHome=0&amp;publisher_form_ticket='</span><span style="color: #339933;">.</span><span style="color: #000088;">$get_check</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$renren_status</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POST<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_POSTFIELDS<span style="color: #339933;">,</span><span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_COOKIEFILE<span style="color: #339933;">,</span><span style="color: #000088;">$cookie_file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_FOLLOWLOCATION<span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span>CURLOPT_REFERER<span style="color: #339933;">,</span><span style="color: #0000ff;">'http://status.renren.com/ajaxproxy.htm'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$ret</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$ret</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ret</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$ret</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'msg'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7q">http://ye.gl/e/7q</a> |
<a href="http://ye.gl/e/7q#comments">11个评论</a> |
Post tags: <a href="http://yegle.net/tag/renren/" rel="tag">renren</a>, <a href="http://yegle.net/tag/twitter/" rel="tag">twitter</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/04/12/php-script-synchronizing-twitter-to-renren-updated-version/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>简单脚本检查portage安装的包是否有文件丢失</title>
		<link>http://yegle.net/2010/04/02/script-to-find-missing-files/</link>
		<comments>http://yegle.net/2010/04/02/script-to-find-missing-files/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 03:38:57 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[脚本]]></category>
		<category><![CDATA[bash]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=458</guid>
		<description><![CDATA[昨天开机fsck报错,正常fsck修复后丢了好多文件,导致现在系统各种不正常,ssh登录不上 写了个脚本检查丢失的文件: #!/bin/bash for package in `eix -cI --only-names` do for file in `equery f $package` do FILE=`basename $file` if &#91; ! -e $file &#93; &#38;&#38; &#91; &#34;x${FILE:0:6}&#34; != &#34;x.keep_&#34; &#93; then echo $package; break; fi done done 嗯,希望能帮助到其他人. © yegle for 一阁Blog, 2010. &#124; 本文短链：http://ye.gl/e/7o &#124; 5个评论 &#124; Post tags: bash]]></description>
			<content:encoded><![CDATA[<p>昨天开机fsck报错,正常fsck修复后丢了好多文件,导致现在系统各种不正常,ssh登录不上</p>
<p>写了个脚本检查丢失的文件:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #000000; font-weight: bold;">for</span> package <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span>eix <span style="color: #660033;">-cI</span> --only-names<span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span>equery f <span style="color: #007800;">$package</span><span style="color: #000000; font-weight: bold;">`</span>
    <span style="color: #000000; font-weight: bold;">do</span>
        <span style="color: #007800;">FILE</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">basename</span> <span style="color: #007800;">$file</span><span style="color: #000000; font-weight: bold;">`</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-e</span> <span style="color: #007800;">$file</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;x<span style="color: #007800;">${FILE:0:6}</span>&quot;</span> <span style="color: #000000; font-weight: bold;">!</span>= <span style="color: #ff0000;">&quot;x.keep_&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
        <span style="color: #000000; font-weight: bold;">then</span>
            <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$package</span>;
            <span style="color: #7a0874; font-weight: bold;">break</span>;
        <span style="color: #000000; font-weight: bold;">fi</span>
    <span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>嗯,希望能帮助到其他人.</p>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7o">http://ye.gl/e/7o</a> |
<a href="http://ye.gl/e/7o#comments">5个评论</a> |
Post tags: <a href="http://yegle.net/tag/bash/" rel="tag">bash</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/04/02/script-to-find-missing-files/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>2010年3月26日</title>
		<link>http://yegle.net/2010/04/01/2010-3-26/</link>
		<comments>http://yegle.net/2010/04/01/2010-3-26/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 06:04:17 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=456</guid>
		<description><![CDATA[Just to remember a special day for me. © yegle for 一阁Blog, 2010. &#124; 本文短链：http://ye.gl/e/7m &#124; 4个评论 &#124; Post tags:]]></description>
			<content:encoded><![CDATA[<p>Just to remember a special day for me.</p>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7m">http://ye.gl/e/7m</a> |
<a href="http://ye.gl/e/7m#comments">4个评论</a> |
Post tags: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/04/01/2010-3-26/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>OpenVPN连接问题排查</title>
		<link>http://yegle.net/2010/03/05/debug-openvpn-log/</link>
		<comments>http://yegle.net/2010/03/05/debug-openvpn-log/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 04:52:32 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[网络相关]]></category>
		<category><![CDATA[openvpn]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=455</guid>
		<description><![CDATA[OpenVPN相对于PPTP的一大优势，就是有完整的log，可以根据客户端的log来发现无法连接的问题所在。以下为本人的VPN用户经常遇到的问题，希望对其他搭建OpenVPN服务的人有所帮助。 注意：本日志主要用于本人的OpenVPN服务（https://yegle.net/openvpn/）的用户用于自行排查问题用，转载请保留此信息，谢谢:-) 各个平台下OpenVPN连接log所在的位置： Windows下：如果使用OpenVPN GUI进行连接，默认的log会存放在OpenVPN安装目录下log文件夹。 Linux下：在OpenVPN配置文件中添加一行：log-append /path/to/logfile，连接后/path/to/logfile即为连接log。 Mac OS下：tunnelblick里，Details菜单（感谢@tianyi提供信息:-)） Android下：tunneldroid里，按menu查看log。 OpenVPN的log文件为普通文本文件，可以用各种文本编辑器，例如记事本、写字板、VIM等工具打开。一般情况下为了方便查看问题所在，建议在OpenVPN的配置文件中添加verb 5，可以在log里输出更多有效信息。 正常连接时，log的最后一行是： Fri Mar 5 09:58:04 2010 Initialization Sequence Completed 这表明OpenVPN成功建立了连接并成功修改了路由表，已经可以正常使用VPN。 问题1： Mon Mar 01 21:42:13 2010 us=78000 CreateFile failed on TAP device: \\.\Global\{3D3B7076-EC34-48DE-82A4-B34956532951}.tap Mon Mar 01 21:42:13 2010 us=78000 All TAP-Win32 adapters on this system are currently in use. Mon Mar 01 21:42:13 [...]]]></description>
			<content:encoded><![CDATA[<p>OpenVPN相对于PPTP的一大优势，就是有完整的log，可以根据客户端的log来发现无法连接的问题所在。以下为本人的VPN用户经常遇到的问题，希望对其他搭建OpenVPN服务的人有所帮助。</p>
<p>注意：本日志主要用于本人的OpenVPN服务（<a href="https://yegle.net/openvpn/">https://yegle.net/openvpn/</a>）的用户用于自行排查问题用，转载请保留此信息，谢谢:-)</p>
<p>各个平台下OpenVPN连接log所在的位置：</p>
<blockquote><p>Windows下：如果使用OpenVPN GUI进行连接，默认的log会存放在OpenVPN安装目录下log文件夹。<br />
Linux下：在OpenVPN配置文件中添加一行：log-append /path/to/logfile，连接后/path/to/logfile即为连接log。<br />
Mac OS下：tunnelblick里，Details菜单（感谢<a href="http://cuitianyi.com/">@tianyi</a>提供信息:-)）<br />
Android下：tunneldroid里，按menu查看log。</p></blockquote>
<p>OpenVPN的log文件为普通文本文件，可以用各种文本编辑器，例如记事本、写字板、VIM等工具打开。一般情况下为了方便查看问题所在，建议在OpenVPN的配置文件中添加verb 5，可以在log里输出更多有效信息。</p>
<p>正常连接时，log的最后一行是：</p>
<blockquote><p>Fri Mar  5 09:58:04 2010 Initialization Sequence Completed</p></blockquote>
<p>这表明OpenVPN成功建立了连接并成功修改了路由表，已经可以正常使用VPN。</p>
<p>问题1：</p>
<blockquote><p>Mon Mar 01 21:42:13 2010 us=78000 CreateFile failed on TAP device: \\.\Global\{3D3B7076-EC34-48DE-82A4-B34956532951}.tap<br />
Mon Mar 01 21:42:13 2010 us=78000 All TAP-Win32 adapters on this system are currently in use.<br />
Mon Mar 01 21:42:13 2010 us=78000 Exiting</p></blockquote>
<p>解答：这个问题仅在Windows上出现。原因未知，怀疑与防火墙软件有关。通常情况下可以通过重启系统解决。如果没有解决的话，可以到OpenVPN安装目录下bin文件夹，依次执行delalltap.bat和addtap.bat，即可解决。注意，如果使用的是Vista/Win7/<del datetime="2010-03-05T04:57:26+00:00">Win2003</del>Win2008这样的带UAC的Windows系统，需要用管理员权限执行这两个脚本。</p>
<p>问题2：</p>
<blockquote><p>Thu Dec 03 22:46:07 2009 us=651000 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 10.7.0.1<br />
Thu Dec 03 22:46:07 2009 us=667000 ROUTE: route addition failed using CreateIpForwardEntry: 拒绝访问。   [status=5 if_index=14]<br />
Thu Dec 03 22:46:07 2009 us=667000 Route addition via IPAPI failed [adaptive]<br />
Thu Dec 03 22:46:07 2009 us=667000 Route addition fallback to route.exe<br />
Thu Dec 03 22:46:07 2009 us=667000 ERROR: Windows route add command failed [adaptive]: returned error code 1 </p></blockquote>
<p>解答：这是在Vista/Win7/<del datetime="2010-03-05T04:57:26+00:00">Win2003</del>Win2008等系统中没有用管理员权限安装及启动OpenVPN GUI造成的，OpenVPN进程没有相应权限修改系统路由表。解决方法是重新用管理员权限安装OpenVPN，并在启动OpenVPN GUI时右键选择使用管理员权限打开。</p>
<p>问题3：</p>
<blockquote><p>Mon Feb  1 18:44:52 2010 us=241882 /system/xbin/bb/route add -net 128.0.0.0 netmask 128.0.0.0 gw 10.7.0.1<br />
Mon Feb  1 18:44:52 2010 us=244293 ERROR: Linux route add command failed: could not execute external program<br />
Mon Feb  1 18:44:52 2010 us=244628 Initialization Sequence Completed</p></blockquote>
<p>解答：这是Android下，Cyanogen Mod和OpenEclair两个ROM，曾经有段时间使用了错误的OpenVPN二进制文件，导致的无法调用busybox添加ip和路由。具体请参考<a href="http://yegle.net/2010/02/25/android-openvpn/">Android上OpenVPN的设置与使用</a>这篇日志，重新安装OpenVPN二进制文件，相应地修复busybox</p>
<p>问题4：</p>
<blockquote><p>Sat Mar 06 16:31:42 2010 us=107000 There are no TAP-Win32 adapters on this system.  You should be able to create a TAP-Win32 adapter by going to Start -> All Programs -> OpenVPN -> Add a new TAP-Win32 virtual ethernet adapter.</p></blockquote>
<p>解答：这个问题在Windows上发生，原因未知。解决方案如log所述：开始->所有程序->OpenVPN->Add a new TAP-Win32 virtual ethernet adapter。如果是Vista/Win7，用管理员权限执行<br />
（待续）</p>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7l">http://ye.gl/e/7l</a> |
<a href="http://ye.gl/e/7l#comments">6个评论</a> |
Post tags: <a href="http://yegle.net/tag/openvpn/" rel="tag">openvpn</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/03/05/debug-openvpn-log/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Android上OpenVPN的设置与使用</title>
		<link>http://yegle.net/2010/02/25/android-openvpn/</link>
		<comments>http://yegle.net/2010/02/25/android-openvpn/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 15:49:39 +0000</pubDate>
		<dc:creator>yegle</dc:creator>
				<category><![CDATA[手机软件]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[openvpn]]></category>

		<guid isPermaLink="false">http://yegle.net/?p=454</guid>
		<description><![CDATA[这个问题被问过很多次，加上我自己的VPN用户也有询问这个问题，很多人参考的又是网上古老的文档，所以我这里写一篇讲解一下。 想要阅读下文，请确保你知道什么是adb及如何使用adb 首先明确一下，只有Android 1.6及更高版本才默认自带了TUN驱动。没有TUN驱动，Android是无法支持任何VPN的。但是我听说过有人把tun.ko（TUN驱动文件）移植到了G3 Hero里，从而让Android 1.5也可以使用OpenVPN。这个我没有证实过，稍后补充:-) 100228 UPDATE:确实有，Modaco ROM就是基于官方Android1.5内核的ROM，自带了tun驱动。HTC Hero用户可以参考这里安装 http://blog.devep.net/virushuo/2010/02/28/androidhtc_herovpn.html 其次确认一下你的系统里有没有busybox命令。目前基本上所有自定义rom都会有busybox这个东西。busybox是在嵌入式linux系统提供基本Linux命令集的工具，官网上的介绍是busybox-The Swiss Army Knife of Embedded Linux。从它的功能上来说也确实是个瑞士军刀~ 呃跑题了…然后确认一下你的rom里是否已经预包含了OpenVPN。方法是：在adb shell中输入which openvpn，如果有输出类似/system/xbin/openvpn这样的字样，就说明你的rom已经预装了OpenVPN，你可以跳过安装OpenVPN的步骤了。 如果你的ROM里没有自带OpenVPN，通过以下方式安装。注意网上流传的一堆.so文件的安装方法仍然有效，但是完全没必要这么安装了。这里提供的openvpn for android二进制文件已经静态编译，不需要动态链接库的支持了： 1、下载http://github.com/downloads/fries/android-external-openvpn/openvpn-static-2.1.1.bz2 2、解压缩获得openvpn-static-2.1.1，执行adb push openvpn-static-2.1.1 /system/xbin/openvpn 3、adb shell，执行chmod 775 /system/xbin/openvpn 以上是安装OpenVPN二进制文件的过程。 OpenVPN的使用： OpenVPN通常用数字证书进行验证，用一个.ovpn文件进行配置。将.ovpn文件、.key文件、.crt文件及ca.crt一共4个连接所需的文件放在/sdcard/openvpn/文件夹下，然后从market安装tunneldroid进行连接即可。 注意tunneldroid提供了修改DNS的选项。由于国内各个DNS基本都存在DNS污染，所以建议在tunneldroid的设置页面填一个国外的DNS，例如google的8.8.8.8。 以上如有疑问请回复提出。写twitter多了不会写长文了=。= © yegle for 一阁Blog, 2010. &#124; 本文短链：http://ye.gl/e/7k &#124; 24个评论 &#124; Post tags: android, openvpn]]></description>
			<content:encoded><![CDATA[<p>这个问题被问过很多次，加上我自己的VPN用户也有询问这个问题，很多人参考的又是网上古老的文档，所以我这里写一篇讲解一下。</p>
<p>想要阅读下文，请确保你知道什么是adb及如何使用adb <img src='http://yegle.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
 <a href="http://yegle.net/2010/02/25/android-openvpn/#more-454" class="more-link">(全文 &#8230;)</a></p>
<hr />
<p><small>© yegle for <a href="http://yegle.net">一阁Blog</a>, 2010. |
本文短链：<a href="http://ye.gl/e/7k">http://ye.gl/e/7k</a> |
<a href="http://ye.gl/e/7k#comments">24个评论</a> |
Post tags: <a href="http://yegle.net/tag/android/" rel="tag">android</a>, <a href="http://yegle.net/tag/openvpn/" rel="tag">openvpn</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://yegle.net/2010/02/25/android-openvpn/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>
