<?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>apt-blog.net   无证程序员的PT桑 &#187; http</title>
	<atom:link href="http://apt-blog.net/tag/http/feed" rel="self" type="application/rss+xml" />
	<link>http://apt-blog.net</link>
	<description>潜逃中。</description>
	<lastBuildDate>Fri, 18 May 2012 11:25:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>OpenVPN over HTTP 突破Layer 7 QoS的宽带网速限制</title>
		<link>http://apt-blog.net/break-through-l7qos-with-openvpn-over-http</link>
		<comments>http://apt-blog.net/break-through-l7qos-with-openvpn-over-http#comments</comments>
		<pubDate>Sun, 04 Mar 2012 11:26:28 +0000</pubDate>
		<dc:creator>BOYPT</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[openvpn]]></category>
		<category><![CDATA[polipo]]></category>
		<category><![CDATA[proxy]]></category>
		<guid isPermaLink="false">https://apt-blog.net/?p=1156</guid>
		<description><![CDATA[Why 我家里用的是一家三线的便宜小区宽带，标称有几个M的带宽，虽说有些资源确实能达到这个速度，但发现直连VPN的速度从来都没上去过，大概30k/s，不难猜测到，ISP在链路上做了手脚，即所谓的Layer 7 Priority QoS。因为入线是100M进宅然后PPPoE，不像ADSL那样直接物理链路就限制了连接速度，在链路层做QoS也很合理。平时HTTP打开网页、下载到合适链路的话很容易达到满速，而OpenVPN的TCP/UDP包估计就被当成P2P流量被限制了，所以网速一点都不给力。 用OpenVPN科学上网是最稳定最灵活的方式了，它基于udp/tcp的协议，比pptp、l2tp等直接跑IP包的开销虽说大一点，但好处就是容易把数据流重新封装，避开链路的关卡。显然它也支持HTTP代理，所以把OpenVPN变成HTTP协议，就可以在家里跑上满速的VPN。 How OpenVPN要过HTTP代理，只能用TCP协议，这个需要服务端和客户端都要稍作修改。 Polipo as Tunnel Proxy 首先在VPS上安装一个http proxy，我选择polipo，比较轻量级。 apt-get install polipo 配置也是很简单的，编辑/etc/polipo/config，原来的配置文件基本全都是注释，直接在文件底部加上： proxyAddress = &#34;0.0.0.0&#34; proxyPort = 8128 authCredentials = &#34;user:password3.141592654&#34; tunnelAllowedPorts = 1194 polipo默认只监听本地的127.0.0.1，要拿来做服务就要监听外网 polipo默认监听8123，为了不让扫代理的盯上，自己随便写个端口 加上http basic验证，这个密码不要紧，后面让openvpn自动应答 允许管道模式连接openvpn的1194端口 OpenVPN Server 服务端倒是不需要很多配置，确定是tcp模式监听连接（我是多开一个openvpn server，子网错开，个人喜欢吧） Client 客户端就要指定使用代理的方式： remote 127.0.0.1 1194 http-proxy YOUR.VPS.IP.HERE.com 8128 pw.txt http-proxy-retry 这个pw.txt是上述的HTTP的认证信息，用户名密码各一行。 现在连接OpenVPN，可以看到连接过程的Log有这么几句，基本就确定OpenVPN over HTTP成功了！ Sun Mar [...]]]></description>
			<content:encoded><![CDATA[<h1>Why</h1>
<p>我家里用的是一家三线的便宜小区宽带，标称有几个M的带宽，虽说有些资源确实能达到这个速度，但发现直连VPN的速度从来都没上去过，大概30k/s，不难猜测到，ISP在链路上做了手脚，即所谓的Layer 7 Priority QoS。因为入线是100M进宅然后PPPoE，不像ADSL那样直接物理链路就限制了连接速度，在链路层做QoS也很合理。平时HTTP打开网页、下载到合适链路的话很容易达到满速，而OpenVPN的TCP/UDP包估计就被当成P2P流量被限制了，所以网速一点都不给力。</p>
<p>用OpenVPN<strong><a href="https://www.google.com/search?ie=UTF-8&amp;q=%E7%A7%91%E5%AD%A6%E4%B8%8A%E7%BD%91">科学上网</a></strong>是最稳定最灵活的方式了，它基于udp/tcp的协议，比pptp、l2tp等直接跑IP包的开销虽说大一点，但好处就是容易把数据流重新封装，避开链路的关卡。显然它也支持HTTP代理，所以把OpenVPN变成HTTP协议，就可以在家里跑上满速的VPN。</p>
<h1>How</h1>
<p>OpenVPN要过HTTP代理，只能用TCP协议，这个需要服务端和客户端都要稍作修改。</p>
<h3>Polipo as Tunnel Proxy</h3>
<p>首先在VPS上安装一个http proxy，我选择polipo，比较轻量级。</p>
<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> polipo</pre></div></div>
<p>配置也是很简单的，编辑<code>/etc/polipo/config</code>，原来的配置文件基本全都是注释，直接在文件底部加上：</p>
<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">proxyAddress = &quot;0.0.0.0&quot;
proxyPort = 8128
authCredentials = &quot;user:password3.141592654&quot;
tunnelAllowedPorts = 1194</pre></div></div>
<ul>
<li>polipo默认只监听本地的127.0.0.1，要拿来做服务就要监听外网</li>
<li>polipo默认监听8123，为了不让扫代理的盯上，自己随便写个端口</li>
<li>加上http basic验证，这个密码不要紧，后面让openvpn自动应答</li>
<li>允许管道模式连接openvpn的1194端口</li>
</ul>
<h3>OpenVPN</h3>
<h4>Server</h4>
<p>服务端倒是不需要很多配置，确定是tcp模式监听连接（我是多开一个openvpn server，子网错开，个人喜欢吧）</p>
<h4>Client</h4>
<p>客户端就要指定使用代理的方式：</p>
<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">remote 127.0.0.1 1194
http-proxy YOUR.VPS.IP.HERE.com 8128 pw.txt
http-proxy-retry</pre></div></div>
<p>这个pw.txt是上述的HTTP的认证信息，用户名密码各一行。</p>
<p>现在连接OpenVPN，可以看到连接过程的Log有这么几句，基本就确定OpenVPN over HTTP成功了！</p>
<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Sun Mar  4 19:12:58 2012 Attempting to establish TCP connection with 199.101.103.107:8192 [nonblock]
Sun Mar  4 19:12:59 2012 TCP connection established with [IPADDR]:8128
Sun Mar  4 19:12:59 2012 Send to HTTP proxy: 'CONNECT 127.0.0.1:1194 HTTP/1.0'
Sun Mar  4 19:12:59 2012 Attempting Basic Proxy-Authorization
Sun Mar  4 19:13:00 2012 HTTP proxy returned: 'HTTP/1.1 200 Tunnel established'</pre></div></div>
<h1>Related</h1>
<p>最后透露一下我的<strong>科学上网</strong>环境是在跑OpenWRT的路由器上跑VPN，然后配合<a href="http://code.google.com/p/chnroutes/">chnroute</a>的路由表，当然dnsmasq也经过配置负责把国内常用域名的解释交给国内的<code>114.114.114.114</code>服务器，这样基本一回家手机kindle电脑等全都是翻墙环境，而且速度非常良好。</p>
<h1>Reference</h1>
<ul>
<li><a href="http://www.pps.jussieu.fr/~jch/software/polipo/polipo.html">The Polipo Manual</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://apt-blog.net/break-through-l7qos-with-openvpn-over-http/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>通过python实现mutipart/form发送数据到paste.ubuntu.org.cn</title>
		<link>http://apt-blog.net/python_script_mutipart_upload</link>
		<comments>http://apt-blog.net/python_script_mutipart_upload#comments</comments>
		<pubDate>Wed, 16 Sep 2009 10:41:42 +0000</pubDate>
		<dc:creator>BOYPT</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Unix/Linux]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[paste. mutipart]]></category>
		<category><![CDATA[upload]]></category>
		<guid isPermaLink="false">http://apt-blog.net/archives/553.html</guid>
		<description><![CDATA[paste.ubuntu.org.cn是国内很多linuxer喜爱的“在线剪贴板”，在跟网友交流时把代码、截图等发在这里，然后把网址发送给对方即可，而且对多种常见代码支持语法高亮，功能简单贴心。（不用像某网友在这个博客上篇帖子里面那样，在留言里面贴一大堆乱哄哄的代码……=。=） 虽说方便，但平时要发送文件时候还是要打开浏览器，再贴代码或者选择文件，多少有点繁琐，所以打算用python写个上传脚本，跟nautilous结合的话，上传截图就方便多了。 首先问球猫要了个ubpaste的perl的脚本，虽然我不懂perl，但发现上传部分只有10来行代码嘛……看来挺简单的，可能用urllib随便弄一下就可以了……结果发现，不行！paste.ubuntu.org.cn用的是mutipart/form协议方式的上传，而python标准库里面没有直接支持这种协议（perl却有……而且自动支持……所以几行代码搞定=。=）…… 查了一下资料后自己写了个class来实现mutipart的boundary，才知道用http来发送文件，特别是上传大文件是这么麻烦的事情……不过还好，不算很复杂，但是整个脚本下来居然有150行代码了……=。= 现在还不能直接拿来当nautilous script用，因为第一个参数是读入文字而不是文件，还在犹豫用bash来重新封装（使用curl一行就搞定上面所说的上传了）……[懒ing]]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://paste.ubuntu.org.cn/">paste.ubuntu.org.cn</a>是国内很多linuxer喜爱的“在线剪贴板”，在跟网友交流时把代码、截图等发在这里，然后把网址发送给对方即可，而且对多种常见代码支持语法高亮，功能简单贴心。（不用像某网友在这个博客上篇帖子里面那样，在留言里面贴一大堆乱哄哄的代码……=。=）</p>
<p>虽说方便，但平时要发送文件时候还是要打开浏览器，再贴代码或者选择文件，多少有点繁琐，所以打算用python写个上传脚本，跟nautilous结合的话，上传截图就方便多了。</p>
<p>首先<a target="_blank" href="http://code.google.com/p/ptcoding/source/browse/trunk/ubpaste.pl">问球猫要了个ubpaste的perl的脚本</a>，虽然我不懂perl，但发现上传部分只有10来行代码嘛……看来挺简单的，可能用urllib随便弄一下就可以了……结果发现，不行！<a target="_blank" href="http://paste.ubuntu.org.cn/">paste.ubuntu.org.cn</a>用的是<a target="_blank" href="http://yefeng.javaeye.com/blog/315847">mutipart/form协议方式</a>的上传，而python标准库里面没有直接支持这种协议（perl却有……而且自动支持……所以几行代码搞定=。=）……</p>
<p><a target="_blank" href="http://code.google.com/p/ptcoding/source/browse/trunk/ubpaste.py">查了一下资料后自己写了个class来实现mutipart的boundary</a>，才知道用http来发送文件，特别是上传大文件是这么麻烦的事情……不过还好，不算很复杂，但是整个脚本下来居然有150行代码了……=。=</p>
<p>现在还不能直接拿来当nautilous script用，因为第一个参数是读入文字而不是文件，还在犹豫用bash来重新封装（使用curl一行就搞定上面所说的上传了）……[懒ing]</p>
]]></content:encoded>
			<wfw:commentRss>http://apt-blog.net/python_script_mutipart_upload/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

