Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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
创建python代理服务器_Python_Python 3.x_Proxy - Fatal编程技术网

创建python代理服务器

创建python代理服务器,python,python-3.x,proxy,Python,Python 3.x,Proxy,大家好,我正在尝试用python编程语言创建一个代理服务器 虽然问题是脚本是用Python2.7版本编写的,但我现在是用Python3.0版本编写的,但我在上个月找到了这样一个解决方案 在重写脚本以满足我所需的3.0版本后,它仍然不起作用 我会很快解释我想做什么,一切都显示在这张图片上: 它们之间有用户网站和代理服务器 如果建议的话,该代理服务器是使用windows操作系统的普通计算机,在该计算机上启动此脚本。用户知道代理服务器的IP地址,在浏览器Firefox的设置中输入该地址,并移动到该网站

大家好,我正在尝试用python编程语言创建一个代理服务器

虽然问题是脚本是用Python2.7版本编写的,但我现在是用Python3.0版本编写的,但我在上个月找到了这样一个解决方案

在重写脚本以满足我所需的3.0版本后,它仍然不起作用

我会很快解释我想做什么,一切都显示在这张图片上:

它们之间有用户网站和代理服务器


如果建议的话,该代理服务器是使用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