创建python代理服务器
大家好,我正在尝试用python编程语言创建一个代理服务器 虽然问题是脚本是用Python2.7版本编写的,但我现在是用Python3.0版本编写的,但我在上个月找到了这样一个解决方案 在重写脚本以满足我所需的3.0版本后,它仍然不起作用 我会很快解释我想做什么,一切都显示在这张图片上: 它们之间有用户网站和代理服务器创建python代理服务器,python,python-3.x,proxy,Python,Python 3.x,Proxy,大家好,我正在尝试用python编程语言创建一个代理服务器 虽然问题是脚本是用Python2.7版本编写的,但我现在是用Python3.0版本编写的,但我在上个月找到了这样一个解决方案 在重写脚本以满足我所需的3.0版本后,它仍然不起作用 我会很快解释我想做什么,一切都显示在这张图片上: 它们之间有用户网站和代理服务器 如果建议的话,该代理服务器是使用windows操作系统的普通计算机,在该计算机上启动此脚本。用户知道代理服务器的IP地址,在浏览器Firefox的设置中输入该地址,并移动到该网站
如果建议的话,该代理服务器是使用windows操作系统的普通计算机,在该计算机上启动此脚本。用户知道代理服务器的IP地址,在浏览器Firefox的设置中输入该地址,并移动到该网站上的网站myip.com显示服务器的IP地址-这是此脚本的正确操作,但我的两个都不起作用。也许这个问题有现成的解决方案吗?几年前我用
def\uuuu初始化(self,config):
#在Ctrl+C上关闭
signal.signal(signal.SIGINT,自关闭)
#创建TCP套接字
self.serverSocket=socket.socket(socket.AF\u INET,socket.SOCK\u流)
#重新使用插座
self.serverSocket.setsockopt(socket.SOL\u socket,socket.SO\u REUSEADDR,1)
#将套接字绑定到公共主机和端口
self.serverSocket.bind((配置['HOST\u NAME'],配置['bind\u PORT']))
self.serverSocket.listen(10)#成为服务器套接字
self.\uu客户端={}
尽管如此:
#建立连接
(clientSocket,client_address)=self.serverSocket.accept()
d=线程.Thread(name=self.\u getClientName(客户端地址),
target=self.proxy_线程,args=(clientSocket,客户端_地址))
d、 setDaemon(True)
d、 开始()
#从浏览器获取请求
request=conn.recv(配置['MAX\u request\u LEN'])
#解析第一行
第一行=request.split('\n')[0]
#获取url
url=第一行拆分(“”)[1]
http#u pos=url.find(“:/”)#find pos of://
如果(http_pos==-1):
temp=url
其他:
temp=url[(http_pos+3):]#获取url的其余部分
端口位置=临时查找(“:”)#查找端口位置(如果有)
#查找web服务器的结尾
Web服务器位置=临时查找(“/”)
如果webserver_pos==-1:
webserver_pos=len(临时)
webserver=“”
端口=-1
如果(端口位置==-1或Web服务器位置<端口位置):
#默认端口
端口=80
webserver=temp[:webserver\u pos]
其他:#特定端口
端口=int((临时[(端口位置+1):])[:Web服务器端口位置-1])
webserver=temp[:端口位置]
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s、 settimeout(配置['CONNECTION\u TIMEOUT'])
s、 连接((Web服务器,端口))
s、 发送所有(请求)
而1:
#从web服务器接收数据
data=s.recv(配置['MAX\u REQUEST\u LEN'])
如果(len(数据)>0):
conn.send(数据)#发送到浏览器/客户端
其他:
打破
您的问题可以改进。您是否看到您链接的代码顶部有一个电子邮件地址?我建议你联系原作者。你能澄清一下你想做什么吗?对我来说,不清楚您是否正在尝试创建反向代理:到单个服务器的所有连接都必须通过代理,或转发代理:从客户端到任何服务器的所有连接都必须通过proxy@Minion3665从客户端到任何服务器的所有连接都必须通过proxy@Apelsin2020您可以尝试使用2to3将程序从python2转换为python3。当我写剧本的时候,剧本看起来很有趣work@minion3665如果可能,在答案中显示代码。但据我所知,此代码允许您连接到最终的单个服务器,而不是所有站点。也许我弄糊涂了,兄弟,你能告诉我什么是conn
?早期在哪里使用?
def __init__(self, config):
# Shutdown on Ctrl+C
signal.signal(signal.SIGINT, self.shutdown)
# Create a TCP socket
self.serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Re-use the socket
self.serverSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# bind the socket to a public host, and a port
self.serverSocket.bind((config['HOST_NAME'], config['BIND_PORT']))
self.serverSocket.listen(10) # become a server socket
self.__clients = {}
while True:
# Establish the connection
(clientSocket, client_address) = self.serverSocket.accept()
d = threading.Thread(name=self._getClientName(client_address),
target = self.proxy_thread, args=(clientSocket, client_address))
d.setDaemon(True)
d.start()
# get the request from browser
request = conn.recv(config['MAX_REQUEST_LEN'])
# parse the first line
first_line = request.split('\n')[0]
# get url
url = first_line.split(' ')[1]
http_pos = url.find("://") # find pos of ://
if (http_pos==-1):
temp = url
else:
temp = url[(http_pos+3):] # get the rest of url
port_pos = temp.find(":") # find the port pos (if any)
# find end of web server
webserver_pos = temp.find("/")
if webserver_pos == -1:
webserver_pos = len(temp)
webserver = ""
port = -1
if (port_pos==-1 or webserver_pos < port_pos):
# default port
port = 80
webserver = temp[:webserver_pos]
else: # specific port
port = int((temp[(port_pos+1):])[:webserver_pos-port_pos-1])
webserver = temp[:port_pos]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(config['CONNECTION_TIMEOUT'])
s.connect((webserver, port))
s.sendall(request)
while 1:
# receive data from web server
data = s.recv(config['MAX_REQUEST_LEN'])
if (len(data) > 0):
conn.send(data) # send to browser/client
else:
break