下面是我用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()
分享到:
相关推荐
这里的代理服务器,是指二级代理服务器。比如:A可以访问B,B可以访问C,A不能直接访问C。这时,如果在B开一个二级代理,就可实现A访问C。现有的工具有CCProxy。...这里就是使用Python简单的实现一个二级代理。
本文实例讲述了python实现简单的TCP代理服务器的方法,分享给大家供大家参考。 具体实现代码如下: # -*- coding: utf-8 -*- ''' filename:rtcp.py @desc: 利用python的socket端口转发,用于远程维护 如果连接不到...
本文将深入探讨一个基于Python实现的简单代理,它能够将Websocket消息高效地转发到Unix套接字,同时也支持反向操作,即从Unix套接字接收消息并发送到Websocket客户端。这个工具名为"ws-unix-framed-bridge",它为...
使用 Python 和 Flask 创建一个 HTTP 代理服务器是一种高效且灵活的方式来处理 HTTP 请求和响应。Flask 是一个轻量级的 Web 框架,易于学习和使用,非常适合快速开发和原型设计。通过结合 Flask 和 Python 的标准库...
在这个“Python-一个自己写的python3的简单到发指的爬虫”的项目中,我们将深入探讨Python3的基本爬虫实现,以及涉及到的相关知识点。 首先,我们要了解Python3爬虫的基础,这通常包括HTTP/HTTPS协议、网络请求库...
Nginx是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。在Web服务器端架构中,Nginx通常用作静态资源服务器和反向代理服务器,它能够快速响应静态文件的请求,而对于动态请求则转发至uWSGI...
标题中的“Python超实用技能:使用Python开发SQLite代理服务器的方法”指的是使用Python编程语言来创建一个SQLite数据库的代理服务,从而解决SQLite数据库无法远程访问的问题。这个代理服务器充当了一个中间层,使得...
源码编写一个简单的HTTP代理服务器,首先需要理解HTTP的基本请求结构,包括GET、POST等方法,以及请求头和请求体的构成。接着,你需要使用合适的编程语言,如Python、Java或C++,来实现这个代理服务。这可能涉及创建...
mailproxy是一个简单的SMTP代理。 它通过未加密的未经身份验证的SMTP接口接收电子邮件,并通过需要现代功能(SSL,STARTTLS)和/或身份验证(SMTP AUTH))的远程SMTP服务器重新发送。 mailproxy主要用于在仅支持纯...
除了socket外没有用到任何第三方库,完全从最底层写起,对研究http协议有帮助。仅实现简单的代理功能
这个项目将复杂的邮件服务器配置集成为一个简单的命令行工具,使得非专业技术人员也能轻松设置自己的邮件服务,从而实现完全的隐私和数据控制。 Mail-in-a-Box 包含了以下关键组件和服务: 1. **域名解析(DNS)**...
于是就自己用python写一个。 原理很简单。 1.开一个socket server监听连接请求 2.每接受一个客户端的连接请求,就往要转发的地址建一条连接请求。即client->proxy->forward。proxy既是socket服务端(监听client),...
本文实例讲述了Python简单实现的代理服务器端口映射功能。分享给大家供大家参考,具体如下: 一 代码 1、模拟服务端代码 import sys import socket import threading #回复消息,原样返回 def replyMessage(conn): ...
proxy.py, 在 python 中,轻量级的HTTP代理服务器 proxy.pypython 中的轻量级HTTP代理服务器。特性作为单个文件模块分发除了 python 标准库之外没有依赖项支持 http,https,web sockets请求代理安装要简单安装 ...
**Python-一个简单的Python爬虫** 在Python编程领域,Web爬虫是一种常用的技术,用于自动地从互联网上抓取信息。Python因其丰富的库支持和简洁的语法,成为了编写爬虫的首选语言。在这个主题中,我们将深入探讨如何...
本压缩包文件“Python反向代理服务器.rar”显然是提供了一个简单的Python实现反向代理的示例。 首先,让我们理解什么是反向代理。反向代理是一种网络架构模式,它位于客户端和服务器之间,接收来自客户端的请求,并...
标题中的"Python-一个简单的web服务代理只有19行Python代码"揭示了我们将讨论的是一个用Python编写的小型Web服务代理。这个代理可能是用于转发HTTP请求,帮助隐藏客户端的真实身份,或者提供网络访问的透明性。它...
Python-statsd是一个Python实现的客户端库,用于与statsd服务器通信。Statsd是Twitter开发的一款轻量级代理服务,主要用于收集、聚合并转发应用的度量数据,如计数器、计时器、直方图和分布,这些数据通常被用作监控...
1. **获取网站列表**:首先,你需要一个包含代理服务器网站的列表。这个列表可以从网上手动收集,或者从已有的数据文件(如压缩包中的`ProxyNet`文件)中读取。这些网站可能需要定期检查以确保其有效性。 2. **解析...
2. **基于 Tornado 的 HTTP 服务器框架**:Tornado 是一个开源的 Python Web 框架,它支持异步网络操作,非常适合构建高性能的应用程序服务器。 3. **App 客户端/服务器端之间的数据通信**:详细讲解如何实现客户端...