Proxy 用python构建代理服务器
我正在做一个个人项目,用python构建一个用于互联网浏览的前向代理服务器。我以前有过一些python套接字编程的经验,但是我很难找出它到底出了什么问题。我最初在github上发现了一个由kasattejaswi编写的node.js程序,该程序似乎非常简单,而且运行良好。我一直在尝试将其转换为python 3,但由于它似乎来回发送数据,所以我感到很困难,但它并没有像kasattejaswi的代理那样在我的浏览器中产生任何结果。任何对我的代码的煽动,或者为什么它可能不起作用,我们将不胜感激 我的python代码Proxy 用python构建代理服务器,proxy,node.js,python-3.x,Proxy,Node.js,Python 3.x,我正在做一个个人项目,用python构建一个用于互联网浏览的前向代理服务器。我以前有过一些python套接字编程的经验,但是我很难找出它到底出了什么问题。我最初在github上发现了一个由kasattejaswi编写的node.js程序,该程序似乎非常简单,而且运行良好。我一直在尝试将其转换为python 3,但由于它似乎来回发送数据,所以我感到很困难,但它并没有像kasattejaswi的代理那样在我的浏览器中产生任何结果。任何对我的代码的煽动,或者为什么它可能不起作用,我们将不胜感激 我的
import os, socket, select
from threading import Thread
class initConnection():
def __init__(self):
self.address = "127.0.0.1"
self.port = 8080
self.initSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.initSocket.bind((self.address,self.port))
self.threads = []
def doStuff(self):
while 1:
print("start")
self.initSocket.listen()
conn, (cAddress,cPort) = self.initSocket.accept()
data = conn.recv(8192)
if data != b'':
print(data)
print(type(data))
try:
sIP,sPort = httpDigest(data.decode("utf-8"))
except:
sIP,sPort = httpDigest(data.decode("latin-1"))
newThread = proxyThing(data,conn,cAddress,cPort,sIP,sPort)
self.threads.append(newThread)
newThread.start()
def httpDigest(data):
if data.find("CONNECT") != -1:
port = 443
webserver = data.split("CONNECT")[1].split(" ")[1].split(":")[0]
else:
port = 80
webserver = data.split("Host: ")[1].split("\r\n")[0]
print(port)
print(webserver)
return webserver, port
class proxyThing(Thread):
def __init__(self,data,cConn,cIP,cPort,sIP,sPort):
Thread.__init__(self)
print(data)
self.data = data
self.cConn = cConn
self.cIP = cIP
self.cPort = cPort
self.sIP = sIP
self.sPort = sPort
if sPort == 443:
self.TLS = True
else:
self.TLS = False
def run(self):
self.sSock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.sSock.connect((self.sIP,self.sPort))
self.cConn.send("HTTP/1.1 200 OK\r\n\n".encode("utf-8"))
self.socks = [self.cConn,self.sSock]
timeoutThing = 0
while 1:
timeoutThing += 1
readable, writable, excep = select.select(self.socks, [], self.socks)
if excep:
break
if readable:
for each in readable:
data = each.recv(8192)
if each is self.cConn:
print("client data:")
out = self.sSock
else:
print("server data")
out = self.cConn
if data:
out.send(data)
print(data)
count = 0
if timeoutThing == 5:
break
thing = initConnection()
thing.doStuff()
提前谢谢