Git Product home page Git Product logo

wallproxy's Introduction

wallproxy

New version of wallproxy, a general purpose proxy framework in Python. It can run on Python 2.5/2.6/2.7, and an Python environment with ssl, pyOpenSSL, gevent is recommended.

How to run it?

./startup.py [config_file]

The default config_file is config.py, if ini_config is defined in config_file and does not equal 0 or config_file is missing, wallproxy will generate config_file from proxy.ini under the same directory.

wallproxy can serve HTTP/HTTPS/SOCKS4/SOCKS5 proxy on single port, here is an example config_file:

listen_ip = '0.0.0.0'
listen_port = 8086
def config():
    # digest_auth = import_from('util')
    # def check_auth(username, password, socks4=True, socks5=True, digest=True):
        # socks5_userid = (username, password)
        # socks4_userid = '%s:%s' % socks5_userid
        # if not password:
            # socks4_userid = username
            # def http_auth(req): pass
        # elif digest:
            # def http_auth(req):
                # return digest_auth(req, username, password)
        # else:
            # basic_userid = 'Basic ' + b64encode(socks4_userid)
            # def http_auth(req):
                # if req.userid != basic_userid:
                    # return 'Basic realm="wallproxy Proxy Authenticate"'
        # if not socks4: socks4_userid = False
        # if not socks5: socks5_userid = False
        # def decorator(func):
            # def wrapper(req):
                # proxy_type = req.proxy_type
                # if proxy_type == 'socks4':
                    # if req.userid != socks4_userid:
                        # return False
                # elif proxy_type == 'socks5':
                    # if req.userid != socks5_userid:
                        # return False
                # elif proxy_type in ('https', 'http'):
                    # auth = http_auth(req)
                    # if auth: return auth
                # req.userid = None
                # return func(req)
            # return wrapper
        # return decorator

    # def redirect_https(req):
        # return req.send_error(301, '',
            # 'Location: %s\r\n' % req.url.replace('http://', 'https://', 1))

    Forward, check_auth, redirect_https = import_from('util')
    DIRECT = Forward(None)
    PROXY1 = Forward('http://10.0.0.100:8080')
    PROXY2 = Forward('https://user:[email protected]:8081')
    PROXY3 = Forward('hosts://www.google.com:80')
    PROXY4 = Forward('socks4://10.0.0.100:8082')
    PROXY5 = Forward('socks5://10.0.0.100:8083/?dns=1')
    PROXY6 = Forward(('socks5://10.0.0.100:8083', 'http://10.0.0.100:8080'))

    @check_auth('user', 'pwd')
    def find_proxy_handler(req):
        proxy_type = req.proxy_type
        host, port = req.proxy_host
        if host == 'type-switch-site':
            return None # socks->http, https->http, http->web
        elif host == 'forbid-site':
            return False
        if proxy_type.endswith('http'): # socks2http, https2http, http
            if req.url == 'http://mail.qq.com/': return redirect_https
            if req.command == 'GET': return PROXY1
            if 'MSIE' in req.headers.get('User-Agent', ''): return PROXY2
            if host == 'www.baidu.com' and port == 80: return PROXY3
            return DIRECT
        elif proxy_type == 'https':
            if host == 'www.bing.com': return PROXY4
            # return None
        elif proxy_type == 'socks4':
            return PROXY5
        elif proxy_type == 'socks5':
            if req.command != 1: return False
            return PROXY6

    return find_proxy_handler

wallproxy's People

Contributors

jc3213 avatar red54 avatar wallproxy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wallproxy's Issues

wallproxy项目在googlecode上已重建

经过2个小时的努力,wallproxy主页已经备份出来了,目前在 https://code.google.com/p/wallproxy 上运行,请作者修正细节(手机功能有限)

希望作者还是不要在github上开issue,防止github被封锁,googlecode安全一些

其实您可以在googlecode上少量上传一些源码,把证书,.bak文件放在googlecode上让大家下载,这样就不会被强制关闭了

希望做到既能支持sslv23,又能支持tlsv1,不然ubuntu 12部署正常,16就不行,出现以下错误如下:

Traceback (most recent call last):
File "./startup.py", line 7, in
from proxy import main
File "/home/linhcpg/Desktop/wallproxy/local/src.zip/proxy.py", line 3, in
exec(code.decode('zlib'))
File "", line 17, in
File "", line 15, in code
File "", line 3894, in
File "", line 10, in main
File "/usr/local/lib/python2.7/dist-packages/gevent/init.py", line 43, in
from gevent.os import fork
File "/usr/local/lib/python2.7/dist-packages/gevent/os.py", line 12, in
from gevent.socket import EAGAIN
File "/usr/local/lib/python2.7/dist-packages/gevent/socket.py", line 659, in
from gevent.ssl import sslwrap_simple as ssl, SSLError as sslerror, SSLSocket as SSLType
File "/usr/local/lib/python2.7/dist-packages/gevent/ssl.py", line 386, in
def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
NameError: name 'PROTOCOL_SSLv3' is not defined

wallproxy现在不能用吗?

下载了最新版本的,但是翻墙时总是时断时续,基本上都处于连通不了状态,不知道作者是否有更新的计划?

这里有提供完整版下载吗?

以前在code.google上既有提供更新版下载,也有提供完整版下载,现在在github还有提供完整下载吗,在哪里?因为有需要,盼复。

感谢作者的辛勤劳动!

客户端与服务器端的加密

现在AES加密的开销并不大,希望WallProxy能够添加客户端与服务器端的AES加密。其实我想自己加的,就是客户端的proxy.py太长,找半天没找到最后的http request和response 处理数据在哪里……

请作者更新支持gvs ip ?

很高兴,wallproxy有更新了,可是不支持gvs ip,按照Google code里的方法更新,可惜失败了,请作者更新一下。现在gws的ip很少,但gvs的ip有很多。

求提供ipv6下自动抛弃被污染解析的功能

发现现在在ipv6下进行域名解析也会被污染。我测试出的被污染到的ip有这三个:[101::1234],[10::2222],[21:2::2]。

由于ipv6下连接不易被干扰,估计只要解决dns污染的问题就基本可以直连了。

qq 20150930185510
qq 20150930185441

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.