同步操作将从 mktime/python-learn 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
# -*- coding: cp1252 -*-# <PythonProxy.py>##Copyright (c) <2009> <Fbio Domingues - fnds3000 in gmail.com>##Permission is hereby granted, free of charge, to any person#obtaining a copy of this software and associated documentation#files (the "Software"), to deal in the Software without#restriction, including without limitation the rights to use,#copy, modify, merge, publish, distribute, sublicense, and/or sell#copies of the Software, and to permit persons to whom the#Software is furnished to do so, subject to the following#conditions:##The above copyright notice and this permission notice shall be#included in all copies or substantial portions of the Software.##THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,#EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES#OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND#NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,#WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING#FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR#OTHER DEALINGS IN THE SOFTWARE."""\Copyright (c) <2009> <Fbio Domingues - fnds3000 in gmail.com> <MIT Licence>***************************************** Python Proxy - A Fast HTTP proxy *****************************************Neste momento este proxy um Elie Proxy.Suporta os mtodos HTTP:- OPTIONS;- GET;- HEAD;- POST;- PUT;- DELETE;- TRACE;- CONENCT.Suporta:- Conex?es dos cliente em IPv4 ou IPv6;- Conex?es ao alvo em IPv4 e IPv6;- Conex?es todo o tipo de transmiss?o de dados TCP (CONNECT tunneling),p.e. liga??es SSL, como o caso do HTTPS.A fazer:- Verificar se o input vindo do cliente est correcto;- Enviar os devidos HTTP erros se n?o, ou simplesmente quebrar a liga??o;- Criar um gestor de erros;- Criar ficheiro log de erros;- Colocar excep??es nos stios onde previsvel a ocorrncia de erros,p.e.sockets e ficheiros;- Rever tudo e melhorar a estrutura do programar e colocar nomes adequados nasvariveis e mtodos;- Comentar o programa decentemente;- Doc Strings.Funcionalidades futuras:- Adiconar a funcionalidade de proxy annimo e transparente;- Suportar FTP?.(!) Aten??o o que se segue s tem efeito em conex?es n?o CONNECT, para estas oproxy sempre Elite.Qual a diferen?a entre um proxy Elite, Annimo e Transparente?- Um proxy elite totalmente annimo, o servidor que o recebe n?o consegue terconhecimento da existncia do proxy e n?o recebe o endere?o IP do cliente;- Quando usado um proxy annimo o servidor sabe que o cliente est a usar umproxy mas n?o sabe o endere?o IP do cliente;enviado o cabe?alho HTTP "Proxy-agent".- Um proxy transparente fornece ao servidor o IP do cliente e um informa??o quese est a usar um proxy.S?o enviados os cabe?alhos HTTP "Proxy-agent" e "HTTP_X_FORWARDED_FOR"."""import socket, thread, select__version__ = '0.1.0 Draft 1'BUFLEN = 8192VERSION = 'Python Proxy/'+__version__HTTPVER = 'HTTP/1.1'class ConnectionHandler:def __init__(self, connection, address, timeout):self.client = connectionself.client_buffer = ''self.timeout = timeoutself.method, self.path, self.protocol = self.get_base_header()if self.method=='CONNECT':self.method_CONNECT()elif self.method in ('OPTIONS', 'GET', 'HEAD', 'POST', 'PUT','DELETE', 'TRACE'):self.method_others()self.client.close()self.target.close()def get_base_header(self):while 1:self.client_buffer += self.client.recv(BUFLEN)end = self.client_buffer.find('\n')if end!=-1:breakprint '%s'%self.client_buffer[:end]#debugdata = (self.client_buffer[:end+1]).split()self.client_buffer = self.client_buffer[end+1:]return datadef method_CONNECT(self):self._connect_target(self.path)self.client.send(HTTPVER+' 200 Connection established\n'+'Proxy-agent: %s\n\n'%VERSION)self.client_buffer = ''self._read_write()def method_others(self):self.path = self.path[7:]i = self.path.find('/')host = self.path[:i]path = self.path[i:]self._connect_target(host)self.target.send('%s %s %s\n'%(self.method, path, self.protocol)+self.client_buffer)self.client_buffer = ''self._read_write()def _connect_target(self, host):i = host.find(':')if i!=-1:port = int(host[i+1:])host = host[:i]else:port = 80#TODO:if error, use nslookup on proxy servertry:(soc_family, _, _, _, address) = socket.getaddrinfo(host, port)[0]except:print "error when call sockt.getaddrinfo()"self.target = socket.socket(soc_family)self.target.connect(address)def _read_write(self):time_out_max = self.timeout/3socs = [self.client, self.target]count = 0while 1:count += 1(recv, _, error) = select.select(socs, [], socs, 3)if error:breakif recv:for in_ in recv:data = in_.recv(BUFLEN)if in_ is self.client:out = self.targetelse:out = self.clientif data:out.send(data)count = 0if count == time_out_max:breakdef start_server(host='localhost', port=8080, IPv6=False, timeout=60,handler=ConnectionHandler):if IPv6==True:soc_type=socket.AF_INET6else:soc_type=socket.AF_INETsoc = socket.socket(soc_type)soc.bind((host, port))print "Serving on %s:%d."%(host, port)#debugsoc.listen(0)while 1:thread.start_new_thread(handler, soc.accept()+(timeout,))if __name__ == '__main__':start_server()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。