Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Proxy 用python构建代理服务器_Proxy_Node.js_Python 3.x - Fatal编程技术网

Proxy 用python构建代理服务器

Proxy 用python构建代理服务器,proxy,node.js,python-3.x,Proxy,Node.js,Python 3.x,我正在做一个个人项目,用python构建一个用于互联网浏览的前向代理服务器。我以前有过一些python套接字编程的经验,但是我很难找出它到底出了什么问题。我最初在github上发现了一个由kasattejaswi编写的node.js程序,该程序似乎非常简单,而且运行良好。我一直在尝试将其转换为python 3,但由于它似乎来回发送数据,所以我感到很困难,但它并没有像kasattejaswi的代理那样在我的浏览器中产生任何结果。任何对我的代码的煽动,或者为什么它可能不起作用,我们将不胜感激 我的

我正在做一个个人项目,用python构建一个用于互联网浏览的前向代理服务器。我以前有过一些python套接字编程的经验,但是我很难找出它到底出了什么问题。我最初在github上发现了一个由kasattejaswi编写的node.js程序,该程序似乎非常简单,而且运行良好。我一直在尝试将其转换为python 3,但由于它似乎来回发送数据,所以我感到很困难,但它并没有像kasattejaswi的代理那样在我的浏览器中产生任何结果。任何对我的代码的煽动,或者为什么它可能不起作用,我们将不胜感激

我的python代码

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()
提前谢谢