TPROXY é um proxy simples encaminhamento TCP (camada 7), construído sobre Geven_t, que permite configurar a lógica de rotina em Python. & Nbsp; É fortemente inspirado a partir da máquina do proxy, mas tem alguns exclusivos, como o modelo do trabalhador pré-garfo emprestado para Gunicorn .
Instalação:
TPROXY requer Python 2.x> = 2,5. Está previsto o apoio Python 3.x.
pip instalar GEvent
pip instalar TPROXY
Para instalar a partir da fonte:
git clone git: //github.com/benoitc/tproxy.git
cd TPROXY
pip instalar requirements.txt -r
python setup.py install
Teste a instalação executando a linha de comando:
exemplos TPROXY / transparent.py
E ir em http://127.0.0.1:5000, você deverá ver a página inicial do Google.
Uso:
TPROXY -h
Uso: TPROXY [opções] script_path
Opções:
& Nbsp; - número da versão do show version do programa e sai
& Nbsp; -h, --help mostrar esta mensagem de ajuda e sai
& Nbsp; - log-file = Arquivo O arquivo de log para gravar. [-]
& Nbsp; - em nível de log = NÍVEL A granularidade de saídas de log. [Info]
& Nbsp; - log-config = O arquivo de configuração do log de usar. [Nenhum]
& Nbsp; STRING -n, --name = STRING
& Nbsp; A base para usar com setproctitle para o processo de nomeação.
& Nbsp; [Nenhum]
& Nbsp; -D, --daemon daemonize o processo Gunicorn. [Falso]
& Nbsp ARQUIVO ;-p, --pid = ARQUIVO Nome do arquivo a ser usado para o arquivo PID. [Nenhum]
& Nbsp; -u USUÁRIO, processos de trabalho Interruptor --user = Usuário para ser executado como esse usuário. [501]
& Nbsp; GROUP -g, --group = GROUP
& Nbsp; processo de trabalho Alternar para executar como este grupo. [20]
& Nbsp; -m INT, --umask = INT A máscara de bits para o modo de arquivo em arquivos escritos por
& Nbsp; Gunicorn. [0]
& Nbsp; ENDEREÇO -b, --bind = ENDEREÇO
& Nbsp; A tomada para ligar. [127.0.0.1:8000]
& Nbsp; - backlog = INT O número máximo de conexões pendentes. [2048]
& Nbsp; -w INT, --workers = INT
& Nbsp; O número de processo de trabalho de tratamento dos pedidos.
& Nbsp; [1]
& Nbsp; - trabalhadores-conexões = INT
& Nbsp; O número máximo de clientes simultâneos por trabalhador.
& Nbsp; [1000]
& Nbsp; -t INT, --timeout = INT
& Nbsp; Trabalhadores em silêncio por mais que esta quantidade de segundos são
& Nbsp; morto e reiniciado. [30]
Sinais
SAIR - desligamento normal. Deixar de aceitar ligações imediatamente
& Nbsp; e aguarde até que todas as ligações perto
TERMO - desligamento rápido. Parar de aceitar e fechar todas as conexões
& Nbsp; depois de 10s.
INT - O mesmo que TERMO
HUP - recarregamento graciosa. Atualizar todos os trabalhadores com o novo código
& Nbsp; em seu script de roteamento.
USR2 - Atualize TPROXY on the fly
TTIN - Aumentar o número de trabalhador a partir de 1
TTOU - Diminuir o número de trabalhador a partir de 1
Exemplo de script de encaminhamento
re importação
re_host = re.compile ("Convidado:. s * (*) r n")
CouchDBRouter classe (objeto):
& Nbsp; # olhada a tabela de roteamento e retornar um nó couchdb de usar
& Nbsp; def lookup (self, nome):
& Nbsp; "" "fazer alguma coisa" ""
roteador = CouchDBRouter ()
# Execute roteamento de reconhecimento de conteúdo com base nos dados de fluxo. Aqui, o
# Informações de cabeçalho de host do protocolo HTTP é analisado para encontrar o
# Nome de usuário e uma rotina de pesquisa é executado no nome para encontrar o correcto
# Couchdb nó. Se nenhuma correspondência pode ser feita ainda, não fazer nada com a
# Conexão. (Fazer o seu próprio servidor couchone ...)
procuração def (data):
& Nbsp; partidas = re_host.findall (dados)
& Nbsp; se partidas:
& Nbsp; host = router.lookup (matches.pop ())
& Nbsp; retorno {"remoto": host}
& Nbsp; retornar None
Exemplo SOCKS4 Proxy em 18 linhas
Tomada de importação
struct importação
procuração def (data):
& Nbsp; if len (dados) <9:
& Nbsp; retorno
& Nbsp; ord = comando (dados [1])
& nbsp; IP, porta = socket.inet_ntoa (dados [4: 8]) (dados "> H", [2: 4]), struct.unpack [0]
& Nbsp; idx = data.index (" 0")
& nbsp; userid = dados [8: idx]
& Nbsp; se o comando == 1: #CONNECT
& Nbsp; dict retorno (remote = "% s:% s"% (ip, porta),
& Nbsp; reply = " 0 X5a 0 0 0 0 0 0",
& Nbsp; de dados = dados [idx:])
& Nbsp; mais:
& Nbsp; retorno {"fechar": " 0 X5b 0 0 0 0 0 0"}
Valores retorno válido
& Nbsp; {"remoto": string ou tupla} - corda é o host: port do servidor que serão colocadas em proxy.
& Nbsp; {"remoto": String, "dados": String} - O mesmo que acima, mas enviar os dados fornecidos em seu lugar.
& Nbsp; {"remoto": String, "dados": String, "resposta": String} - O mesmo que acima, mas responder com dados dados de volta para o cliente
& Nbsp; None - Não fazer nada.
& Nbsp; {"fechar": true} - Feche a conexão.
& Nbsp; {"fechar": String} - Feche a conexão após o envio da cadeia.
manipular erros
Você pode facilmente tratamento de erros, adicionando uma função proxy_error em seu script:
proxy_error def (cliente, e):
& Nbsp; passe
. Esta função obter a instância ClientConnection (conexão atual) como primeiros argumentos ea exceção erro no segundo argumento
Requisitos :
- Python
Comentários não encontrado