新建了一个开源项目 endlessssh, 用于 SSH 代理(不是 SSH 作为代理, 而是 SSH 使用代理), 放在 Google Project Hosting. 工具有两个特点:
1. Tunneling SSH over REAL HTTP(完善中)
让 SSH 工作在 HTTP 协议上, 从而穿越防火墙.
2. 持续的会话
即使 TCP 网络连接断开(这时, SSH 会话会失效), SSH 会话仍然保持, 直到网络重连后, 会话继续.
项目地址: http://code.google.com/p/endlessssh/
补充:
谢谢评论中 Zealot 朋友的推荐.
大概看了下类似的一个 GNU 项目 httptunnel(http://www.nocrew.org/software/httptunnel.html). 这个项目所使用的交互过程更像是 HTTP 交互, 在一个 HTTP 报文中包含自己的多个报文. httptunnel 没有确认机制, 也没有会话保持机制. 不过, httptunnel 可以值得借鉴.
Written by ideawu
at 2010-06-06 15:17:22
Windows 版本的 Python, select() 函数只能接受 socket, 不接受 File Object, 所以不能 select 标准输入输出.
为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 socket 作为 stdin/stdout 的代理. 结构示意如下:
stdin -> stdin_sock -> my_stdin
stdout <- stdout_sock <- my_stdout
Continue reading »
Written by ideawu
at 2010-05-30 19:21:24 | tags: IO多路复用

PyPy 项目可能会颠覆老学究和初学者的逻辑, 因为 PyPy 用 Python 语言来实现 Python 语言, 就像一只小蟒蛇吞下自己的尾巴. 也许你没见过, 但它确实存在.
你可能会疑惑, 既然已经有了 Python, 那么为什么还用 Python 来实现 Python(PyPy)? 后者到底是什么东西?
其实, 这其中的逻辑并不复杂. 比如 C 语言, C 语言的第一个编译器肯定不是用 C 语言来编写的, 但之后, C 编译器(如 GCC)就没有理由不用 C 来编写了. 所以, 用 Python 语言编写, 并用已存在的 Python 编译器(解释器, 执行环境)来做一个实现 Python 语言并没有什么奇怪.
Continue reading »
Written by ideawu
at 2010-05-09 21:30:01 | tags: PyPy
像因特网的Web系统一样, 几乎所有的大规模软件系统, 都会使用脚本语言. 在网络游戏服务器的开发中, 也会应用脚本语言. 游戏开发常用的脚本语言主要有: Python, Lua. 本文介绍在C语言中嵌入Python支持, C语言和Python语言通过API进行交互.
任何两种语言要整合, 首先要解决通信问题. C要和Python进行通信, 要进行数据结构转换, 把C的数据结构转为Python的对象, 和把Python对象转换为C数据结构.
Continue reading »
Written by ideawu
at 2010-05-07 12:00:06
如果不使用Cookie, 发送HTTP POST非常简单:
import urllib2, urllib
data = {'name' : 'www', 'password' : '123456'}
f = urllib2.urlopen(
url = 'http://www.ideawu.net/',
data = urllib.urlencode(data)
)
print f.read()
当使用Cookie时, 代码变得有些复杂:
import urllib2
cookies = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookies)
f = opener.open('http://www.ideawu.net/?act=login&name=user01')
data = '<root>Hello</root>'
request = urllib2.Request(
url = 'http://www.ideawu.net/?act=send',
headers = {'Content-Type' : 'text/xml'},
data = data)
opener.open(request)
第一次 open() 是进行登录. 服务器返回的 Cookie 被自动保存在 cookies 中, 被用在后来的请求.
第二次 open() 用 POST 方法向服务器发送了 Content-Type=text/xml 的数据. 如果你不创建一个 Request, 而是直接使用 urlopen() 方法, Python 强制把 Content-Type 改为 application/x-www-form-urlencoded.
Written by ideawu
at 2007-08-30 16:52:06
最近需要一种脚本语言做快速的原型开发, 因为类似 C/C++, Java, C# 之类的语言调试很困难. 特别是 Java 和 C#, 开发环境庞大, 一运行, 别的事就别想做了. 我希望找到一种只需要文本编辑器就可以开发的语言. 于是寻找:
首先想到是 PHP, 因为我比较熟悉. 不过, PHP 不支持线程, 而且在 Web 之外的应用不强大, 所以排除.
也没别的了, 就考虑 Python 吧. 首先, 必须对 HTTP 支持良好. 经过一段时间的试用, 中间一些失望, 感觉 Python 能很符合我的需要. Python 的文档缺少像 Java API Doc 那样的结构. Python 的类文档结构不是很明显, 甚至方法和属性列表不完整, 可能是 Python 的哲学吧. 不过, 我更希望类的构造函数文档和方法以及属性文档放在同一页.
无论使用 Python 做快速的原型开发还是最终的产品, 我觉得还是可以的.
Written by ideawu
at 10:41:44
Recent Comments