`
fudehai001
  • 浏览: 497243 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个python写的简单的代理服务器

阅读更多
from: http://dream-people.iteye.com/blog/364402

下面是我用python写的一个简单的代理服务器
具备简单的管理功能,运行后 telnet localhost 9000 端口可以进行管理主要功能就是做包转发,如果有一个桥服务器,可以用来外网访问内网用,还是很管用的
#/bin/env python  
#coding:utf-8  
  
import socket,select,sys,time  
import thread  
  
s_list = []  
  
def loop(cs,addr,s_ip,s_port):  
    print '%s %d connected.' % addr  
    ts = socket.socket()  
  
    try:  
        ts.connect((s_ip,s_port))  
    except:  
        cs.close()  
        print '%s %d closed.' % addr  
        sys.exit(0)  
  
    while True:  
  
        rl,wl,xl = select.select([cs.fileno(),ts.fileno()],[],[cs.fileno(),ts.fileno()])  
  
        if len(xl) > 0:  
            cs.close()  
            ts.close()  
            print '%s %d closed.' % addr  
            sys.exit(0)  
  
        if len(rl) > 0:  
            if rl[0] == cs.fileno():  
                rs = ts  
                ws = cs  
            else:  
                rs = cs  
                ws = ts  
  
            try:  
                buffer = ws.recv(10000)  
                if len(buffer) == 0:  
                    raise  
                rs.send(buffer)  
            except:  
                rs.close()  
                ts.close()  
                print '%s %d closed.' % addr  
                sys.exit(0)  
  
def mainserver(l_port,s_ip,s_port):  
    global s_list  
    try:  
        ss = socket.socket()  
        ss.bind(('0.0.0.0',l_port))  
        ss.listen(10)  
        s_list.append((l_port,s_ip,s_port))          
    except:  
        sys.exit(0)  
  
    while True:  
        cs,addr = ss.accept()  
  
        thread.start_new_thread(loop,(cs,addr,s_ip,s_port))  
  
def manager(l_port):  
    global start,s_list  
  
    ss = socket.socket()  
    ss.bind(('0.0.0.0',l_port))  
    ss.listen(10)  
  
    while True:  
        cs,addr = ss.accept()  
        cs.send("""trans server 1.0\r\ntype 'help' to get help\r\n""")  
        buffer = ''  
        while True:  
            buf = cs.recv(10000)  
            if len(buf) == 0:  
                cs.close()  
                break  
            if buf[-1] not in ('\r','\n'):  
                buffer += buf  
                continue  
            buffer += buf  
            cmd = buffer.strip()  
            buffer = ''  
            if cmd == 'exit':  
                cs.close()  
                break  
            elif cmd == 'stop':  
                start = 0  
                cs.close()  
                sys.exit(0)  
            elif cmd == 'list':  
                b = ''  
                for l in s_list:  
                    b += '%4d %s:%d\r\n' % l  
  
                if len(b) > 0:  
                    cs.send(b)  
            elif cmd in ('help','?'):  
                cs.send("""-------------------------------------------\r 
exit\r 
    exit telnet\r 
start localport serverip:serverport\r 
    start a new server\r 
list\r 
    list all server\r 
-------------------------------------------\r 
""")  
            else:  
                cmds = cmd.split(" ",1)  
                if len(cmds) > 1 and cmds[0] == 'start':  
                    args = cmds[1].strip().split(" ",1)  
                    if len(args) != 2:  
                        cs.send('start localport serverip:serverport\r\n')  
                        continue  
                    arg = args[1].split(":",1)  
                    if len(arg) != 2:  
                        cs.send('start localport serverip:serverport\r\n')  
                        continue  
  
                    try:  
                        l_port = int(args[0])  
                        s_ip = arg[0]  
                        s_port = int(arg[1])  
                    except:  
                        cs.send('start localport serverip:serverport\r\n')  
                        continue  
  
                    thread.start_new_thread(mainserver,(l_port,s_ip,s_port))  
                    cs.send('start OK!\r\n')  
                else:  
                    cs.send('no command [%s]\r\n' % cmd)  
                    continue  
  
def main():  
    global start  
  
    if len(sys.argv) == 3:  
        try:  
            l_port = int(sys.argv[1])  
            s_ip,s_port = sys.argv[2].split(":")  
            s_port = int(s_port)  
            thread.start_new_thread(mainserver,(l_port,s_ip,s_port))  
        except:  
            pass  
  
    start = 1  
  
    thread.start_new_thread(manager,(9000,))  
  
    while start:  
        time.sleep(1)  
  
if __name__ == '__main__':  
  
    start = 0  
  
    main()  
分享到:
评论

相关推荐

    50行Python代码实现代理服务器

    这里的代理服务器,是指二级代理服务器。比如:A可以访问B,B可以访问C,A不能直接访问C。这时,如果在B开一个二级代理,就可实现A访问C。现有的工具有CCProxy。...这里就是使用Python简单的实现一个二级代理。

    python实现简单的TCP代理服务器

    本文实例讲述了python实现简单的TCP代理服务器的方法,分享给大家供大家参考。 具体实现代码如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口转发,用于远程维护 如果连接不到...

    Python-一个简单的代理可以将Websocket消息转发到Unix套接字反之亦然

    本文将深入探讨一个基于Python实现的简单代理,它能够将Websocket消息高效地转发到Unix套接字,同时也支持反向操作,即从Unix套接字接收消息并发送到Websocket客户端。这个工具名为"ws-unix-framed-bridge",它为...

    使用 Python 和 Flask 创建一个 HTTP 代理服务器

    使用 Python 和 Flask 创建一个 HTTP 代理服务器是一种高效且灵活的方式来处理 HTTP 请求和响应。Flask 是一个轻量级的 Web 框架,易于学习和使用,非常适合快速开发和原型设计。通过结合 Flask 和 Python 的标准库...

    Python-一个自己写的python3的简单到发指的爬虫

    在这个“Python-一个自己写的python3的简单到发指的爬虫”的项目中,我们将深入探讨Python3的基本爬虫实现,以及涉及到的相关知识点。 首先,我们要了解Python3爬虫的基础,这通常包括HTTP/HTTPS协议、网络请求库...

    一种基于Python Flask的Web服务器端设计.pdf

    Nginx是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。在Web服务器端架构中,Nginx通常用作静态资源服务器和反向代理服务器,它能够快速响应静态文件的请求,而对于动态请求则转发至uWSGI...

    python超实用技能:使用Python开发SQLite代理服务器的方法

    标题中的“Python超实用技能:使用Python开发SQLite代理服务器的方法”指的是使用Python编程语言来创建一个SQLite数据库的代理服务,从而解决SQLite数据库无法远程访问的问题。这个代理服务器充当了一个中间层,使得...

    简单HTTP代理服务器

    源码编写一个简单的HTTP代理服务器,首先需要理解HTTP的基本请求结构,包括GET、POST等方法,以及请求头和请求体的构成。接着,你需要使用合适的编程语言,如Python、Java或C++,来实现这个代理服务。这可能涉及创建...

    Python-mailproxy是一个简单的SMTP代理

    mailproxy是一个简单的SMTP代理。 它通过未加密的未经身份验证的SMTP接口接收电子邮件,并通过需要现代功能(SSL,STARTTLS)和/或身份验证(SMTP AUTH))的远程SMTP服务器重新发送。 mailproxy主要用于在仅支持纯...

    简单的python服务器

    除了socket外没有用到任何第三方库,完全从最底层写起,对研究http协议有帮助。仅实现简单的代理功能

    Python-MailinaBox一键轻松部署邮件服务器

    这个项目将复杂的邮件服务器配置集成为一个简单的命令行工具,使得非专业技术人员也能轻松设置自己的邮件服务,从而实现完全的隐私和数据控制。 Mail-in-a-Box 包含了以下关键组件和服务: 1. **域名解析(DNS)**...

    仅用50行Python代码实现一个简单的代理服务器

    于是就自己用python写一个。   原理很简单。 1.开一个socket server监听连接请求 2.每接受一个客户端的连接请求,就往要转发的地址建一条连接请求。即client->proxy->forward。proxy既是socket服务端(监听client),...

    Python简单实现的代理服务器端口映射功能示例

    本文实例讲述了Python简单实现的代理服务器端口映射功能。分享给大家供大家参考,具体如下: 一 代码 1、模拟服务端代码 import sys import socket import threading #回复消息,原样返回 def replyMessage(conn): ...

    proxy.py, 在 python 中,轻量级的HTTP代理服务器.zip

    proxy.py, 在 python 中,轻量级的HTTP代理服务器 proxy.pypython 中的轻量级HTTP代理服务器。特性作为单个文件模块分发除了 python 标准库之外没有依赖项支持 http,https,web sockets请求代理安装要简单安装 ...

    Python-一个简单的Python爬虫

    **Python-一个简单的Python爬虫** 在Python编程领域,Web爬虫是一种常用的技术,用于自动地从互联网上抓取信息。Python因其丰富的库支持和简洁的语法,成为了编写爬虫的首选语言。在这个主题中,我们将深入探讨如何...

    Python反向代理服务器.rar_Python_

    本压缩包文件“Python反向代理服务器.rar”显然是提供了一个简单的Python实现反向代理的示例。 首先,让我们理解什么是反向代理。反向代理是一种网络架构模式,它位于客户端和服务器之间,接收来自客户端的请求,并...

    Python-一个简单的web服务代理只有19行Python代码

    标题中的"Python-一个简单的web服务代理只有19行Python代码"揭示了我们将讨论的是一个用Python编写的小型Web服务代理。这个代理可能是用于转发HTTP请求,帮助隐藏客户端的真实身份,或者提供网络访问的透明性。它...

    Python-pythonstatsdstatsd服务器的Python客户端

    Python-statsd是一个Python实现的客户端库,用于与statsd服务器通信。Statsd是Twitter开发的一款轻量级代理服务,主要用于收集、聚合并转发应用的度量数据,如计数器、计时器、直方图和分布,这些数据通常被用作监控...

    通过代理服务器网站获取代理服务器IP

    1. **获取网站列表**:首先,你需要一个包含代理服务器网站的列表。这个列表可以从网上手动收集,或者从已有的数据文件(如压缩包中的`ProxyNet`文件)中读取。这些网站可能需要定期检查以确保其有效性。 2. **解析...

    基于 Python 轻松自建 App 服务器.pdf

    2. **基于 Tornado 的 HTTP 服务器框架**:Tornado 是一个开源的 Python Web 框架,它支持异步网络操作,非常适合构建高性能的应用程序服务器。 3. **App 客户端/服务器端之间的数据通信**:详细讲解如何实现客户端...

Global site tag (gtag.js) - Google Analytics