Total Pageviews

Saturday 30 June 2012

中#共会以何种方式垮台

中共随时都会垮台,这已成了人们普遍的认识。但中共会以何种方式垮台,则仁者见仁智者见智。
以普通百姓的心情,只要能让中共垮台,什么方式都可以选择。很多人甚至觉得,通过暴力推翻中共才解气呢。民众的这种想法是可以理解的,毕竟,中共的恶行已经将民众的愤怒推到了临界点,在这样的情绪下,以暴易暴似乎才能宣泄满腔的怒火。
自从贵州平塘惊现“中国共产党亡”的天然巨石以来,人们已经认识到,中共的灭亡看来是天意。天意的安排,很多时候让人难以揣测,不过,既然是天要灭中共,就一定会通过各种事件给人以启示。
从历史、现状和走势看,中共最可能的垮台方式是被和平解体。
首 先,纵观百年共产主义运动史,我们发现一个奇异的现象,几乎所有垮台的共产政权都是被和平解体而非被暴力推翻。尽管民主阵营和共产阵营历经了几十年的军备 竞赛和冷战,但,民主阵营从来没有通过武力推翻过一个共产政权。真正导致共产政权垮台的,是真相的传播带来的人心觉醒。
我们从苏共垮台看到,由于戈尔巴乔夫实行的舆论开禁使民众了解了共产党的邪恶和外部世界的真相,苏共很快就失去了民心。在这样的状态下,叶利钦登高一呼,民众便群起响应,连明白真相的军队也选择了抛弃苏共,苏共瞬间就被和平解体了。随后,东欧共产政权也相继被和平解体
历史是现实的一面镜子。苏联、东欧共产政权被和平解体的历史给予我们的启示是:当民众都了解了真相并重新回归道德时,共产政权就会瞬间被和平解体。
也许,苏联和东欧共产政权的和平解体之路是上天刻意给中国人民预演的如何解体中共的参照。
其次,考察一下中共政权与其它政权的区别,以及中共治下的现状,可以看出,中共垮台最大的可能是和平解体。
正常的社会政权无非通过两种方式产生,一种是君权神授,一种是民主选举。君权神授的政权多半是通过兵征天下的方式更替,而民主选举的政权则通过投票轮换。无论是兵征天下还是民主选举,后继者所求的不过是权力,获取权力后都会继承历史积淀的文化,只是执政风格有所差异而已。
中共政权则是人类的一个异类,它既非通过君权神授产生,也非通过民主选举产生,其夺权方式是以血腥的暴力革命摧毁一切现有秩序和文化传统,夺取政权后继续对一切优秀的文化进行革命,控制一切社会资源以垄断民生,并以共产党的一套邪说给全民洗脑。
中共可以说是集古今中外一切邪恶之大全的最邪恶政权,它不仅具有所有共产党的一切邪恶特点,还具有更鲜明的个性:
一 是控制民众最为严厉,其网络化的控制遍及社会每一领域、每一个角落和每一个最小社会单元;二是洗脑宣传更为精致、广泛和持久;三是极度暴力和扭曲的行为让 民众的恐惧深入骨髓;四是,对真相传播的控制最为严厉,它封锁一切真相传播的渠道,对一切传播真相的努力都予以最严厉的控制和灭杀;五是超越一切道德底线 和羞耻人格,公然耍流氓。
这样一种最具毁灭性、控制性和欺骗性的政权,与历史上任何一种政权相比,一个最大的区别就是“全民绑架”。它不仅绑架了所有人的肉体,而且绑架了所有人的灵魂。
面对这样的邪恶政权,靠少数社会精英对其进行改革是根本不可能的。体制内的改革是换汤不换药,根本不会触及中共的本质,最多不过是欺骗百姓的把戏。如果进行实质的改革就意味着亡党,中共决不会自己革自己的命。
靠零星甚至局部的维权抗争也不能形成气候,因为中共严密的网络控制和全民绑架的特性,普通民众很难持久的群起响应,在中共暴力镇压和欺骗性的承诺下,这样的抗暴很快就会平息。
那 么,聚合强大的民主阵营武力讨伐中共政权能奏效吗?从历史和现状看,也不可能奏效。一来,世界上主要民主国家都还巴望着与中共交易呢,他们连政治抗议和经 济制裁都少做或不做,怎么会聚合那么强大的军力来对抗中共呢;二来,被中共洗脑后分不清爱党和爱国的很多民众不仅不会起来响应,还会被中共煽动出强烈的 “爱国”情绪而与中共站在一起。
在这样的情况下,无论是国内的武力抗暴和国际的武力打击都很难解体中共,那么,剩下的只有一条途径,那就是真相的广传引发全民精神觉醒导致共产党的精神绑架失效,越来越多的民众都选择唾弃中共,连体制内的精英都选择抛弃中共,中共政权自然就垮台了。
因此,真相传播到一定程度,藉助某个突发事件形成的弃共形势,中共也许就像苏共一样,一瞬间就被和平解体了。
当然,和平解体中共有个关键的推手,那就是真相的传播。
真相的传播真的可令中共和平解体吗?既然苏联和东欧共产政权的和平解体已有了先例,那么,中共的和平解体也就有了遵循的道路。
也许有人会说,中共内部没有戈尔巴乔夫似的人物出来开放言论自由,中共的信息封锁那么严重,百姓要想了解真相谈何容易。
的确,中国目前还看不出有前苏联那样的言论开放形势,但,另外的传播方式同样可以使真相得以迅速的传播。
自 1999年中共迫害flg以来,人们欣喜地看到,flg弟子开创的各种传真相方式正迅猛的瓦解着中共编造的谎言。国内flg弟子采取了遍地开花似的传真 相的活动,他们贴传单,发资料,发光盘,挂横幅,以及面对面地直接讲真相,几乎每个领域每个地区每个角落都活跃着他们讲真相的身影。而国外的大法弟子则办 报纸、办网络,办电视、办电台,办弘扬中华神传文化的神韵演出和各类赛事,开发突破网络封锁的软件,以及发真相邮件,打真相电话,等等,使中共的信息封锁 形同虚设,使国际社会越来越了解了真相从而站在正义一边。
讲真相活动确实能起到解体中共的作用,而且能将武装到牙齿的中共消弭于无形。
其实,中共维系统治的手段无非就是暴力和谎言。暴力,是共产政权最核心的维持手段,谎言,则是暴力的润滑剂。当暴力不足或过度时,谎言就会粉墨登场;当谎言穿帮或欺骗力不足时,共产党会撕下伪装公然施暴和耍流氓。
既然中共是依靠暴力和谎言维持着的一个邪恶生命,那么,依据相生相克的法理,与之相反的“和平与真相”,就是解体共产政权的最有效途径。
和平解体,是共产政权垮台的基本轨迹,而真相的传播和人心的觉醒,则是实现这一基本轨迹的推手。

共匪将面对一场真正的"人民战争"

广东省中山沙溪因两名少年打架引发了激烈的冲突事件,目前已持续多日。据传,冲突事件已致多人死亡,300多人受伤。
原本一个偶发的个体事件,又一次发展成为大规模的警民冲突,并引起国际媒体关注。一辆辆被推翻的警车、遭到焚烧的店铺、民众头破血流的画面,类似场景一次又一次地出现在媒体和大众的视线中。
从2011年到2012年迄今为止,源于偶然事件但最后演变为大规模严重警民冲突的重大群体事件,其频率和数量都在上升。虽然最后的结果大都是在中共官方的强力维稳用暴力手段“平息”事态而收场,但是在民众心中埋下的却是不满和仇恨的种子。
在 一个正常的拥有民主和法治国家,民众可以通过法律手段,来解决自己遇到的不公和冤屈,并且其过程都会得到法律制度和体系的保障,维持这种保障体系的是自由 媒体对政府的监督、民众的选票对执政党的制约等因素。同时,由于民众拥有游行示威和自由发表言论的自由,民众对政府的不满都可以通过这些正当的渠道来得以 宣泄和解决。
相反,在中共的独裁体制下,所有的化解社会矛盾的正常渠道都被堵死,民众有冤无处申,有苦无处诉。不仅如此,中共为了维持其统治的稳定,却把民众创造的财富变成暴力工具,用军警、棍棒、子弹来对付民众的正常诉求。
中 山沙溪事件在演变为大规模冲突之前,本来是很简单的事情,如果政府尽职尽责,公正公开对事件展开调查调查,并做出及时处理,解决起来非常容易,很快就会平 息事件。但是代表政府的维稳机构政法委一味使用暴力,惟恐事件闹得不够大,使事件急速恶化。政府的这种使用国家机器的行恶,使民众完全地对政府失去了信 任,他们已经不再指望政府,也不再相信政府的言论。
中共在60多年的这种“维稳”统治下,一方面用谎言给民众洗脑,另一方面用暴力给民众制 造恐惧。但是,近来在全国各地发生的包括此次中山沙溪的民众群体抗暴事件,已经明确地显示出,中国民众已经走出恐惧,走向觉醒,他们用掀翻警车来表达自己 的愤怒,他们不再用上访和下跪来祈求暴政的施恩,而是拿起了武器。
对于普通民众和任何一个正常的人来讲,都希望过上平安稳定的生活,都希望社会稳定、人民祥和富足,都不希望暴力充斥社会,以暴制暴不是最好的选择。但是,中共对中国民众不顾一切地打压,尤其是对千百万善良民众的打压,正在把中共置身于如同汪洋大海的人民战争。
这是因为中共把民众视为了敌人。这一次,中共将不得不面对一场对人民的战争,可以预见,中共是注定会输掉战争的,因为没有人能够与十几亿民众为敌,而中共却长期的愚蠢的试图如此作战,所以,从一开始,这场战争的胜负就已经定下.

美国智库:中南海破罐子破摔 玩不下去了

华府智库“美国企业研究所”(AEI)学者、《华尔街日报》专栏作家迈克尔?奥斯林(Michael Auslin)近日撰文《中共即将解体》,他认为北京目前面临国内外成堆的问题,已经玩不转了,踢罐子的游戏已无法继续下去了(Beijing can kick the can no further)。
20年前,邓小平搞了个后来著名的“南巡”,那是在天安门发生大屠杀的几年后,中国正处于被国际社会孤立的困境,邓小平的改革方案也受到质疑。拜邓小平南巡所赐,中国经济改革又回到正轨,随后就有了所谓经济起飞,在过去20年里,中共号称平均增长10.4%。
一时之间,中国似乎将勇往直前,不再回头。但很显然,坦途已走到尽头,未来20年中共将面临荆棘之路。中国面临的问题比过去20年任何时候都大,这意味着不仅是经济恶化,中共也面临生死存亡的问题。
文章称,问题在过去10年的后期初见端倪,胡锦涛主席全面改变方针,优先权从私营转向国营。国有企业比过去更占主导 地位,地方政府趁机做大,特别是金融危机之后的放贷狂潮,这些国企联手吞下大部分可用信贷,但就业增长引擎的小型和中小型企业却止步不前,这也是增长正在 放缓的部分原因,中共当局最近把今年的经济增长估值下调到7.5%。
在中共忽视的痼疾中,当前的经济管理不善尤为凸出。不仅存在工资涨幅足以开始影响中国企业竞争力的问题,作为经济增长核心的沿海地带还存在劳动力短缺的问题。短缺的部分原因是由于内陆提供了更多的就业机会,但最大的问题是适龄劳动人口数量已经达到峰值。
作者认为,中共的一胎化政策难辞其咎。该政策广泛被中国民众谴责,本月1名孕妇已成型的女胎被强迫引产,已引起中国年轻网民的强烈公愤。经济方面,这一政策可能在1979年提高了个体收入,但今天,它使中国迅速成为老龄化社会,从而对生产力造成制约。
再有就是中国金融市场的开放问题。在过去的几年,北京放风将让人民币国际化已引起波澜,但如果不能开放其资本市场, 这无异于一张空头支票。未兑现之前,中国人有权质疑他们的积蓄能否派上更好地用场。中国的资源正在被政府机构这个效率低下的庞然大物所吞噬,或者将成为 1.5万亿美元的资产和地方政府债务泡沫,许多观察家认为泡沫已接近破裂。同时实干的小厂家如温州的小企业,则面临窒息的危险。
中国人出于本能地担心制度被人为操控以飨少数人,最近的腐败案就是明悟的例证。薄熙来的案例是今年最恶劣的,这位重 庆前领导被拿下,其妻被控谋杀1名英国商人。该案把大家都心照不宣的公诸于世:制度的主体是被黑社会化的官员所操控的。今年晚些时候,中共党的权力按规矩 将交给新的一代,为了瓜分到已缩水的经济大饼中的较大份额,高层派系的内斗可能会加剧。如果地盘争夺战加剧,普通的中国民众只能自求多福,因为他们没有产 权,或独立的法律体系保障。
作者还说,显然中产阶级现在对未来更悲观,对政府的态度愈加愤世嫉俗,愈加看重维护其所取得的地位。最近,与作者交 谈的中国人士说,人们对中共感到更加绝望,而不仅是不满。如果这种不信任感增长,中国很可能会出现像天安门事件那样的政治抗议。中国每年发生约18万件农 村人口为主体的群体抗议活动,激进的城市中产阶级有可能加入其中。
中共可能会以加紧大规模镇压应对,但这将适得其反,使国内变得更不稳定。同时,衰退的中国可能凭藉其现代化军队向海外穷兵黩武,挑动民族主义情绪转移国内不满的压力。这只会让中国在全球变得更加孤立。总而言之,国内或国外可能会发生大屠杀,对中共的生存造成威胁.

我怎能离开你

中美工薪阶层购买力PK:美国人购买力是中国3倍(岂止3倍)


都说美国富,你知道美国的工薪阶层和我们的购买力差距有多大吗?
  一、基于汇率,老美比中国人富5.5倍
图1
  第一张图中,为了便于比较,根据人民币和美元当天的外汇汇率(1 : 6.32)将老美收入折算为人民币。中国工薪阶层的平均年薪是4.9万元人民币,而美国是27.2万元人民币,是中国的5.5倍。另外看到,美国各行业薪酬相对平均,其中金融、信息、科研、能源、卫生、房地产行业都属于第一梯队且相差不大。反观中国,不同行业薪酬悬赏非常大,最高行业(金融)雄踞榜首。可见“男怕入错行”这话在中国是经得起推敲的。
  二、基于购买力,老美比中国人富3倍
图2
  基于汇率并没有考虑到中美两地物价差别。国际上一般用平价购买力(Purchasing Power Parity,简称PPP)进行调整,可以更加公平地比较中国人和美国人的购买力。PPP这个东西有很多计算方法,市面上也有很多版本,1:2.0,1:3.45,1:3.99等等。取个认可度较高的1:3.45作为计算基础。这样国人的购买力比基于汇率的计算高了不少,实际购买力高于汇率所隐含的购买力。通俗的说,美国人工薪阶层人均购买力是中国的3倍。
  三、一个月的工资能买什么
图3
  除了PPP,还有不少对比两地购买力的方式。其中有个有意思的居然用每小时薪水能买多少个麦当劳的巨无霸汉堡作为对比依据。当然麦当劳在中国收费较高,所以通过巨无霸不太适合于中国。
  有个直观的方法,是看1个月的工资能购买多少商品。所以我收集了一些常见食品和消费品的在中国和美国的当地价格,用于计算工资的购买力。
  现在,你知道老美比你富多少了吧?而笔者对着图看了半天,最大的感慨是:老美的汽车真TM便宜!

邓丽君的演唱会




Friday 29 June 2012

如果你的gappproxy的dos窗口闪了一下就消失

如果你的gappproxy的dos窗口闪了一下就消失,而你安装的又是python2.7.2版,python2.7.2有问题,建议卸载python2.7.2,安装python2.7.3:
http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi,即可解决问题。

利用shadowsocks(SERVER.PY版): BALAN-PROXY翻墙,这是最简单/省事的翻墙术


CLOWWINDY最早的SHADOWSOCKS(此版已被作者CLOWWINDY删除),不过它有一个FORK版:balan-proxy (https://github.com/lerry/balan-proxy/)

登录你的vps,
git clone https://github.com/lerry/balan-proxy/
cd balan-proxy
编辑balan-proxy目录里的server.py如下:
...
PORT = 8499 (这个是balan-proxy的端口号,保持默认的8499,不必修改)
KEY = "你自行设置的一个字符串"注意:这里的引号不可缺少。需跟本地的local.py里的KEY值一致)
...
然后运行命令:python server.py
此命令是运行在前台的。我们可以利用systemd把它运行为service:
nano /etc/systemd/system/balan-proxy.service
cat /etc/systemd/system/balan-proxy.service
[Unit]
After=network.target

[Service]
ExecStart=/usr/bin/python /root/balan-proxy/server.py
Restart=always

[Install]
WantedBy=multi-user.target

然后运行:
systemctl start balan-proxy
systemctl enable balan-proxy
服务器端搭建完成。
(当然你的vps需先安装python:
apt-get install python -y或yum install python -y)

回到本地linux桌面系统机器,
下载源码:https://github.com/lerry/balan-proxy/archive/master.zip。
解压,进入解压出来的目录,编辑里面的local.py文件如下:
...
SERVERS = [
      ('你的vps的ip', 8499),
    ]
...
PORT = 10802 #这个是要设置的本地端口,你可以修改它为其他端口。
KEY = "你自行设置的一个字符串"注意:这里的引号不可缺少。这个KEY值需跟你vps上设置的KEY值一致)
...
运行nohup python local.py > /dev/null &
然后设置你的浏览器的socks5代理为127.0.0.1,端口为10802,即可翻墙。

如果你的本地机器为mac.
git clone https://github.com/lerry/balan-proxy
cd balan-proxy
编辑里面的local.py文件如下:
...
SERVERS = [
      ('你的vps的ip', 8499),
    ]
...
PORT = 10802 #这个是要设置的本地端口,你可以修改它为其他端口。
KEY = "你自行设置的一个字符串" 注意:这里的引号不可缺少。这个KEY值需跟你vps上设置的KEY值一致)
...

然后,运行python local.py
(不要关闭该terminal窗口)
然后设置你的浏览器的socks5代理为127.0.0.1,端口为10802,即可翻墙。
在mac上,可通过launchd实现开机自运行命令python local.py,操作流程如下:
cd ~/Library/LaunchAgents/
nano com.balan-proxy.plist
内容为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.balan-proxy</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/python</string>
<string>~/balan-proxy/local.py</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>

</plist>

然后运行launchctl load com.balan-proxy.plist
这样,即可实现开机自运行命令python local.py

如果你的本地机器为windows,
则在你的本地windows机器上安装python2.7.3环境: http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi,python2.7.2有问题,建议卸载python2.7.2,安装python2.7.3,然后就可以运行local.py(即双击local.py),会弹出一个 dos窗口,不要关闭该窗口。然后设置你的浏览器的socks5代理为127.0.0.1,端口为10802,即可翻墙.

项目地址:https://github.com/lerry/balan-proxy

为防止balan-proxy的作者删除源码,特在此把local.py文件的内容和server.py文件的内容保存如下。
附录:
local.py文件的内容:
#!/usr/bin/env python
# Copyright (c) 2012 clowwindy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import os
SERVERS = [
('xxx.xxx.xx.11', 8499),
]
if os.path.exists('list.txt'):
data = open('list.txt').readlines()
SERVERS = []
item = (i.split(':') for i in data if ':' '#' not in i)
while 1:
try:
i = item.next()
except:
break
SERVERS.append((i[0], int(i[1])))
PORT = 1080
KEY = "foobar!"
import sys
import socket
import select
import string
import struct
import hashlib
import threading
import time
import SocketServer
def get_server():
servers = SERVERS
while 1:
for i in servers:
yield i
server = get_server()
def get_table(key):
m = hashlib.md5()
m.update(key)
s = m.digest()
(a, b) = struct.unpack('<QQ', s)
table = [c for c in string.maketrans('', '')]
for i in xrange(1, 1024):
table.sort(lambda x, y: int(a % (ord(x) + i) - a % (ord(y) + i)))
return table
encrypt_table = ''.join(get_table(KEY))
decrypt_table = string.maketrans(encrypt_table, string.maketrans('', ''))
my_lock = threading.Lock()
def lock_print(msg):
my_lock.acquire()
try:
print "[%s] %s" % (time.ctime(), msg)
finally:
my_lock.release()
class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
class Socks5Server(SocketServer.StreamRequestHandler):
def encrypt(self, data):
return data.translate(encrypt_table)
def decrypt(self, data):
return data.translate(decrypt_table)
def handle_tcp(self, sock, remote):
try:
fdset = [sock, remote]
counter = 0
while True:
r, w, e = select.select(fdset, [], [])
if sock in r:
r_data = sock.recv(4096)
if counter == 1:
try:
lock_print(
"Connecting " + r_data[5:5 + ord(r_data[4])])
except Exception:
pass
if counter < 2:
counter += 1
if remote.send(self.encrypt(r_data)) <= 0:
break
if remote in r:
if sock.send(self.decrypt(remote.recv(4096))) <= 0:
break
finally:
remote.close()
def handle(self):
try:
host = server.next()
sock = self.connection
remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remote.connect(host)
self.handle_tcp(sock, remote)
except socket.error:
lock_print('socket error')
def main(host):
print 'Starting proxy at port %d' % PORT
server = ThreadingTCPServer((host, PORT), Socks5Server)
server.serve_forever()
if __name__ == '__main__':
print 'Servers: '
for i in SERVERS:
print i
arg = sys.argv
if len(arg) == 1:
host = ''
print "Use default host"
else:
host = arg[1]
print "Use host %s" % host
main(host)
server.py文件的内容:
#!/usr/bin/env python
# Copyright (c) 2012 clowwindy
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
PORT = 8499
KEY = "foobar!"
import sys
import socket
import select
import SocketServer
import struct
import string
import hashlib
def get_table(key):
m = hashlib.md5()
m.update(key)
s = m.digest()
(a, b) = struct.unpack('<QQ', s)
table = [c for c in string.maketrans('', '')]
for i in xrange(1, 1024):
table.sort(lambda x, y: int(a % (ord(x) + i) - a % (ord(y) + i)))
return table
class ThreadingTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
pass
class Socks5Server(SocketServer.StreamRequestHandler):
def handle_tcp(self, sock, remote):
try:
fdset = [sock, remote]
while True:
r, w, e = select.select(fdset, [], [])
if sock in r:
if remote.send(self.decrypt(sock.recv(4096))) <= 0:
break
if remote in r:
if sock.send(self.encrypt(remote.recv(4096))) <= 0:
break
finally:
remote.close()
def encrypt(self, data):
return data.translate(encrypt_table)
def decrypt(self, data):
return data.translate(decrypt_table)
def send_encrpyt(self, sock, data):
sock.send(self.encrypt(data))
def handle(self):
try:
print 'socks connection from ', self.client_address
sock = self.connection
sock.recv(262)
self.send_encrpyt(sock, "\x05\x00")
data = self.decrypt(self.rfile.read(4))
mode = ord(data[1])
addrtype = ord(data[3])
if addrtype == 1:
addr = socket.inet_ntoa(self.decrypt(self.rfile.read(4)))
elif addrtype == 3:
addr = self.decrypt(
self.rfile.read(ord(self.decrypt(sock.recv(1)))))
else:
# not support
return
port = struct.unpack('>H', self.decrypt(self.rfile.read(2)))
reply = "\x05\x00\x00\x01"
try:
if mode == 1:
remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
remote.connect((addr, port[0]))
local = remote.getsockname()
reply += socket.inet_aton(local[0]) + struct.pack(">H",
local[1])
print 'Tcp connect to', addr, port[0]
else:
reply = "\x05\x07\x00\x01" # Command not supported
print 'command not supported'
except socket.error:
# Connection refused
reply = '\x05\x05\x00\x01\x00\x00\x00\x00\x00\x00'
self.send_encrpyt(sock, reply)
if reply[1] == '\x00':
if mode == 1:
self.handle_tcp(sock, remote)
except socket.error:
print 'socket error'
def main(host=''):
server = ThreadingTCPServer((host, PORT), Socks5Server)
server.allow_reuse_address = True
print "starting server at port %d ..." % PORT
server.serve_forever()
if __name__ == '__main__':
encrypt_table = ''.join(get_table(KEY))
decrypt_table = string.maketrans(encrypt_table, string.maketrans('', ''))
arg = sys.argv
if len(arg) == 1:
host = ''
print "Use default host"
else:
host = arg[1]
print "Use host %s" % host
main(host)
---------------------------------------------------------------------
balan-proxy程序fork自shadowsocks。
balan-proxy项目地址:https://github.com/lerry/balan-proxy
增加自定义服务器列表支持,请将服务器地址列表放在同文件夹下,文件名: list.txt 格式: 8.8.8.8:8499 4.4.4.4:8499 #1.1.1.1:8849 暂时不使用的服务器地址可使用#注释
用法和shadowsocks一样( 装gevent,然后在启动server.py,能省下一些内存)。
不过上面代理加密简单,如果要高强度的加密可以考虑换成两边用ssl来通信,
这就有了sockstunnel,sockstunnel是一个使用ssl加密隧道的简单 socks5服务器
(shadowsocks也在测试更强的加密方式)。
sockstunnel项目地址:https://github.com/wynemo/sockstunnel
在服务器上,使用 openssl 生成您的密钥和证书文件的方法
openssl genrsa -out privkey.pem 2048 
openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
作者说其在server:ubuntu 11.10 x64 python2.7 /client:windows7 python 2.7.3,ubuntu 11.10 python 2.7.2下测试成功,有兴趣的可以试试。
除了加密问题,还有人提出了IPv6支持问题,于是shadowsocks作者加了一个实验性的 IPv6 branch,Server 是 IPv6 地址,因为和 IPv4 不兼容,所以暂时没合并。
IPv6 branch项目地址:https://github.com/clowwindy/shadowsocks/tree/ipv6
shadowsocks作者折腾完Python版后又把目光瞄向了node.js,这就有了加密代理 shadowsocks node.js 版。作者说加密代理 shadowsocks node.js 版经过一个多月的改进现在可以在 1000 并发,500 QPS 下稳定工作。现在用在一个项目中,每天通过上百 GB 流量。
shadowsocks-nodejs项目地址:https://github.com/clowwindy/shadowsocks-nodejs
和原 Python 版相比优势: 1. 不会大量创建线程,VSZ 使用很少,适合 OpenVZ。 2. 支持更大并发。因为 Python 版用的是 select(),fd > 1024 的时候就挂了。
缺点: 下载大文件时内存占用峰值会达到几十 MB,怀疑与 V8 的 GC 策略有关。(参考) 当然 Python 版也可以改用非阻塞模型,不过写起来比 nodejs 麻烦就是了。欢迎有兴趣的童鞋做这样的尝试 :)
说明: 如果都升到最新版,Python 版与 node.js 版的协议是互相兼容的。即可以用 python client + node.js server。 另外感叹 V8 的性能确实很好,基本相同的计算密码表过程,纯 js 实现比纯 Python 实现快了几十倍。
使用方法:
Edit config.json, change the following values:
server your-server-ip
server_port server port 
local_port local port 
password a password used to encrypt transfer 
timeout in seconds 
Put all the files on your server. Run node server.js on your server.
 To run it in the background, run setsid node server.js.
Put all the files on your client machine. Run node local.js on your client machine.
Change proxy settings of your browser into
SOCKS5 127.0.0.1:local_port 
另外作者还将多 server 功能加到一个新分支里了。
multi-server branc项目地址:https://github.com/clowwindy/shadowsocks-nodejs/tree/multi-server
50多行代码引起了这许多故事,终究使用起来还是要比ssh代理速度快,有VPS的同学可以试试啦。
另外以前说过goagent在1.9.1a2测试版本中加入使用ssl加密独立主机上的wsgi.py(使用方法:python wsgi.py 443 -ssl ),这个和上面介绍的也是殊途同归
---------------------
用polipo把socks代理转换为http代理也很好用.把socks代理转换为http代理的最大好处就是
可以避免dns污染,比如你使用IE并且设置ie的socks代理的话,你依然是打不开
dongtaiwang.com的;但是如果你使用IE并且设置ie的http代理的话,
这样你就可顺利打开dongtaiwang.com (建议使用polipo,privoxy有时会出错。
polipo的使用方法:
http://web.archive.org/web/20130524201431/http://www.iusesoft.info/using-polipo-to-make-opera-works-with-socks5,)
不建议把此shadowsocks(它是一个socks proxy)搭配sockscap使用,因为通过ie还是打不开dongtaiwang.com

related post: 
http://briteming.blogspot.com/2012/07/sockstunnel.html(利用sockstunnel翻墙) 
http://briteming.blogspot.co.uk/2012/07/proxifierssh.html
http://briteming.blogspot.co.uk/2012/06/blog-post_20.html 
------------------------
 
shadowsocks(SERVER.PY版)的改进版

usage

First, make sure you have Python 2.6 or 2.7.
$ python --version
Python 2.6.8
Then edit config.json as follows:
{
    "server":"your_vps_ip",
    "server_port":8086,
    "local_port":1030,
    "password":"你自设的密码",
    "timeout":600
}
(注意:在该版本中,不要在上面的配置文件里加上"method":"aes-256-cfb",否则翻墙速度会变慢)
Put all the files on your server. Run python server.py on your server. To run it in the background, run nohup python server.py > log &.
Put all the files on your client machine. Run python local.py on your client machine.
Change proxy settings of your browser into
SOCKS5 127.0.0.1:local_port

advanced

You can use args to override settings from config.json.
python local.py -s server_name -p server_port -l local_port -k password
python server.py -p server_port -k password
You may want to install gevent for better performance:
$ apt-get install python-gevent
Or:
$ sudo easy_install gevent

troubleshooting

  • I can only load some websites Check the logs of local.py. If you see only IPs, not hostnames, your may got DNS poisoned, but your browser hasn't been configured to let the proxy resolve DNS. To set proper DNS config, you can simply install FoxyProxy / Autoproxy for Firefox, or ProxySwitchy / SwitchySharp for Chrome. They will set the config in your browser automatically. Or you can change network.proxy.socks_remote_dns into true in about:config page if you use Firefox.
  • I can't load any websites and the log prints mode != 1 Make sure proxy protocol is set to Socks5, not Socks4 or HTTP.
  • I use IE and I can't get my proxy to work Since you can't specify Socks4 or Socks5 in IE settings, 
  • you may want to use a PAC(Proxy auto-config) script, or just use Firefox instead.
from https://github.com/YvesChan/shadowsocks
shadowsocks 原理是借助国外的 VPS 翻墙。国外的 VPS 上运行服务端,在本地运行本地端,就可以建立加密连接。 用文本编辑器编辑 config.json,请注意一定要修改密码。 server 你的 VPS 的地址 server_port 使用的服务端口 local_port 本地 socks5 端口 password 请设置一个你的密码 用winscp 上传 server.py 和 config.json 到 VPS 上的某个目录。如果是 root 用户,放到 /root/ 下;如果是其他用户,放到 /home/用户名 目录下。 用putty 登录到 VPS。 安装 python: Debian, Ubuntu: sudo apt-get install python CentOS: yum install python (其实大部分LINUX VPS已默认安装了PYTHON) cd 进入到上传的目录,运行(注意后面的 &): nohup python server.py > /dev/null & 退出 putty。接下来只要 VPS 没有重启,服务端会一直运行下去。 在本地的windows机器运行 local.exe 修改浏览器的代理设置。使用 SOCKS5 代理,地址为 127.0.0.1:刚才设置的本地socks5端口。 最简单的方法是:建一个 Chrome 的快捷方式,右键,属性,在目标的最后加上: --proxy-server=socks5://127.0.0.1:所设置的本地端口。 推荐 Firefox 配合 Autoproxy 使用,Chrome 配合 SwitchySharp 使用,
可以根据网址自动选择是否翻墙。注意使用的时候,代理协议要选择 SOCKS5
(而不是 SOCKS4 或者 HTTP)。 IE浏览器使用 SOCKS5代理,需要配合 PAC 文件,
不推荐使用。 如果哪天你翻墙失败, 那么可能是 nohup python server.py > /dev/null &所对应的python进程退出了。你可运行命令: lsof -i:所使用的服务端口号 或 netstat -anp|grep 所使用的服务端口号 查看一下有无进程在使用该端口。如果没有进程在使用该端口,说明 nohup python server.py > /dev/null &所对应的python进程退出了,需要在VPS中,
重新运行一次该命令:nohup python server.py > /dev/null & 如果你想创建账号给某人使用,可这样做: 登录VPS, nano config.json 在这一步修改server_port和password的值. 下载地址: https://cloud.github.com/downloads/clowwindy/shadowsocks-win32pack/shadowsocks.7z 以上内容适用于WINDOWS桌面系统。
-------------------------
 
https://github.com/mengskysama/shadowsocks-rm/tree/master/shadowsocks
--------------------------
 
因为BALAN-PROXY没有加密,有时翻墙速度较慢。它不如sockstunnel的翻墙速度快。
sockstunnel: http://briteming.blogspot.com/2012/07/sockstunnel.html 
-----------------------------
https://github.com/li-plus/secure-socks,这个翻墙项目也是没有加密的。