Recoleguinha agora vamos fazer um script Python Proxy. Qual é a ideia? Bom, a ideia é você não se revelar, como assim? Então vamos lá, vamos pegar uma ferramenta de desenho. Rapaz, eu tô perdido da minha própria máquina, achei. Então vamos imaginar que você consegue a naturalmente colocar um servidor na internet, você acessa esse servidor, executa os comandos e os comandos então eles vão parar naturalmente dentro de uma infraestrutura de um alvo e esse alvo naturalmente ele só consegue observar isso aqui, certo? Então ele não consegue observar a parte em que você se conecta naturalmente ao proxy ou digamos que você consegue uma máquina muito vulnerável dentro de um ambiente, então você chega até ela e dela você então vai para as prox, então é sim muito comum você ter prox dentro de alvo ou para ocultar a sua real localização. Bom, e o livro ele traz um proxy, um proxy bem interessante, eu vou colocar o proxy aqui e aí você vai discutir. Vamos começar organizando o código do cara, tá? O código do livro não vai rodar. Já vou falar pra você, então nós vamos estar uma melhorada nesse código e colocar ele para funcionar. Primeira coisa, vamos acertar os import, tá? Lembrando que eu sempre preciso do traceback, traceback, eu acho que é assim que se escreve. Legal, lembrando que eu não tô com o IDE, não tô com o IDE. Bom, vamos começar aqui naturalmente, nossa o código aqui tá uma caca, vamos começar pelo main, puxar o main aqui pra cima, tá? Não precisa ser assim, mas eu vou fazer assim por um motivo simples, porque os programas começam a ser executados no main, certo? Primeira coisa, vamos adaptar aqui para o nosso amigo Python 3, que o print no Python 2 não precisava do parentesis, mas o print no Python 3 obrigatoriamente precisa. Então eu vou ler nessa sequência, ele não precisa. Repara que ele não utiliza nenhum parcer de argumento, né? Ele praticamente exige que o comando seja colocado da seguinte forma, e é assim, o proxy, na verdade, nós vamos fazer o proxy sem py. Galera, eu ranquei o py, não tá? Quero não. Localhost, localport, remote, remote, host, remoteport, e receivefirst, tipo um true, false pelo que eu entendi. Aqui, por isso que você tem esse teste aqui, por isso que você tem esse teste em texto, porque no terminal, os argumentos são todos em string, mesmo que seja um número, como esse cara aqui, tá vendo, 900, você tem que converter ele inteiro, porque ele é texto. Ah, mas ele é um texto, não, meu amigo, ele é um texto e que você vai converter ele no inteiro. Aí você usa ele logo em seguida. Legal? Beleza, então, se eu não tiver cinco argumentos, 1, 2, 3, 4, 5. Pera aí, galera. Desculpe, 0, 1, 2, 3, 4, 5, pera aí. Não, cara, esse é o que está errado. Tá vendo esse 1 aqui? Ele descartou esse primeiro argumento, que é o nome do comando. 5 argumentos, 1, 2, 3, 4, 5. Tá bom, bateu. E aí eu capturo 5 aqui nessa sequência. Pode mudar essa sequência? Não, segundo livro não. Nós podemos, no futuro, utilizar Geparse para resolver esse pipino. Legal? Logo que a vida recebe First, é igual a True, Recebe First é igual a False. Bom, eu faria assim, eu faria esse treco diferente, mas tudo bem, vamos lá. E Server Loop, e aí ele chama o Server Loop, que está logo aqui embaixo, tá? Cara, organizei o código do MEN. Código do MEN está organizado. Vamos organizar o Server Loop. Vamos ver se tem nexo aqui, o que ele fez. Aqui ele cria um server, bind, se deu Paulo, ele dá um exit e mata todas as threads. Caso contrário, então ele abre 5 concorrências, 250 concorrências. Aí para cada clientele aceita aqui e chama uma thread para tratar a conexão próx. Tá bom, o código está coerente, só está uma bosta, vamos lá. Vamos organizar o código do cara. S, isso aqui, dois pontos e adivinha para, que o espacinho, legal? Beleza. Então eu não vou nem tentar fazer isso aqui, se der pau aqui, então por isso que tem esse acceptor aqui. Legal? Mas eu poderia ter chegado aqui e ter colocado o 3Back.print.azep. Eu acredito que é assim. Legal. Galera, eu não decoro a linguagem, não a gente. Não tem como, cara. Programando uma pancada de linguagem no mesmo dia, tem condições não, cara. Ó, vamos lá. Outra coisa, isso aqui está uma merda. Isso aqui está uma merda porque olha só, ele não faz nada com isso. É uma merda, cara. Então beleza, mata isso aqui, pega o start e joga lá no fim. Então esse cara vai construir um objeto em memória e aqui vai iniciar a execução do objeto lá na memória. Legal? Salvo isso aqui. Bem doido, hein? Legal. Aqui, ó. Deixa eu ver se eu organizei aqui, se eu fiz tudo certinho. Não tem o IUTru, não. 3Back aqui, exec. Tá bom. Legal. Ele start a thread. O que é a thread roda? O proxy handler. Proxy handler, essa função aqui. Deixa eu dar uma olhada no código do cara antes de corrigir o código do cara. Odeio comentários, cara. Comentário de código só incha. Tá bom, então eu vou receber aqui o remote host, o remote port. Então eu estou nesse endereço e nessa porta. E eu estou fazendo um proxy para 1, 9, 2, 6, 8, 13, 3.12, porta 9.000. E eu vou colocar uma máquina lá ainda, tá? Beleza. Proxy. Legal. Tá bom. Aí eu me conecto a ele. Puta merda, olha que lixo ficou, hein? Lixo. S. Legal. Agora sim, aí eu faço o remote socket. Eu conecto o remote socket. Se eu recebo primeiro, então a remote buffer, esse W aqui tá sobrando, tá? O remote buffer. Receive from. Receive from é esse cara que nós vamos corrigir daqui a pouco. Eu vou receber e passo para ex-dump. Ex-dump é um cara que nós vamos corrigir daqui a pouco. Então deixa eu ver se eu entendi. Eu pego, certo? Eu vou receber. Então eu pego o remote dump e recebo. Provavelmente vai ter uma leitura lá. Então vai ter uma leitura lá na boa. Vamos trabalhar com 4.096. Legal. Provavelmente, cara. Escreve o que eu tô falando. E aí eu vou ler dentro de receive from. Legal. Aí o que é que esse ex-dump faz, cara? Vamos ver o que faz o ex-dump. Ele vem aqui, pega os dígitos, aí ele faz um aço de recep... Lá, de recepção. Um aço de repetição pelos caracteres. E ele remonta, cara, em exadecimal mensagem. Tá bom. Legal. Tá bom. Aí o remote buffer. Response handler. O que é o response handler? Response handler é essa função aqui que não faz nada. Aqui, ah, eu poderia fazer uma mudança no pacote. Aqui ele não tá fazendo mudança nenhuma, mas tanto request handler como response handler, eles poderiam alterar o pacote, mas não estão fazendo. Legal. Tem dica que ele quis fazer. Caso eu queira interceptar, caso eu queira salvar um determinado protocolo, tá aí aqui. Tá bom? Tem dica que o cara quis fazer. Beleza. Tá? Response handler. Aí, aqui ele tem um print novamente e esse print, ele monta um texto e esse texto, tantos bytes daqui pra lá. Legal. Clean socket send remote buffer. Então eu vou mandar o que eu recebi do remoto. Tá bom. O pop e o SMTP, por exemplo, desculpe. O SMTP, ele seria receive first. Aí ele se conecte e já recebe. O pop não. Pop o cliente manda depois que ele recebe. Então protocolo, isso aqui é definido baseado no protocolo de camada de aplicação que eu vou trabalhar. Ah, garotinho. Entendendo que esse cara quis fazer. Wile tool, certo? Então vou organizar no escódigo. Buffer, print. E aí, galera, será que eu estou com sorte hoje? Será que esse código vai rodar de primeiro? Porque tanta alteração assim. Só estamos organizados nessa questão de espaçamento, porque eu sou cego, cara. E ponto e vírgula no final. Cego pra caramba. Velho cego. Tô sobrosa. Estou sacanelhinho. Esposo, vi isso, ela me dá porrada, cara. E aí eu recebo. From, legal. Então eu faço a leitura, se local buffer, eu recebo os bytes, hexadecimal. E aí remote socket send. Eu envio pro socket remoto, hexadecimal. Remote. Aqui eu recebo from do remote socket. Aí vai ter que ler. Provavelmente uma função que lê. Se eu conseguir ler alguma coisa, então eu vou dizer, pô, tá ok, recebi isso e vou passar pra hexidump e vou mandar pro cliente de volta. Aqui ele faz o intermediário ali que ele recebe e manda de volta pro cliente. Tem dicas que esse cara está fazendo. Eu vou organizar o código, vou me arredar repassada nele aqui. É meio de charrevelação, entendeu? É meio de charrevelação. Acho uma engraçada pra gente charrevelação, cara. Fala logo, você acha que os pais não sabem? Local buffer, o remote buffer e aí eu finalizo. Cara, isso aqui porque ele está sendo obrigado a fazer isso aqui? Porque ele não tem o tal do... Cara, eu estou achando estranho esse break jogado aqui, bicho. Olha, esse break jogado, cara. Ah, tá, tá certo, é isso mesmo. Porque na hora que eu finalizo isso, que eu passe o fecho às variáveis e o outro para esse outro aqui. Eu só acho que está vendo aqui, ó. Ah, ele está recebendo como parâmetro. Tá bom. Poxa vida, hein? Legal. Ó, cd4 e a instância de Unicode. Cara, aqui ele está fazendo a questão de Unicode. Tá, ele transforma em xdump. Ele está fazendo todo aquele jabácula de Unicode nojento infernal. Cara, eu não vou nem mexer nisso aqui, bicho. Isso aqui é uma merda, cara. Eu tenho assim inveja dos caras que mexe com essa porra aí. Porque eu não tenho um saco isso aí não. Receive from, block. Então, global. E aí eu posso chegar aqui e meter esse cara aqui. E aqui é onde eu faço o recebimento. 7 timeouts, 2 segundos, ó. Se não respondem 2 segundos, ele dá um timeout. Baixa, hein, galera? Baixa. Isso é para rede local, cara. Se fosse uma internet aí, seria, por exemplo, um 5. 4, 5. Mas tão baixa assim para rede local. Se der algum accept, eu posso colocar o traceback.printexec. E meto um pass para cima e foda-se-lândia. Isso aqui é igual o trollabel, os trolls do Java. Vai ter um... Java. Podemos organizar no código do sujeito, bicho. Legal, cara. Agora vai ser meio que xarrevelação aqui, tá, galera? Não sei se vai rodar de primeira, não. Então funciona assim. Então vamos lá. Proxim.ba.proxim. 727.0.0.1 porta 9.000, certo? Com 1, 9, 2, 1, 8, 3.12. Porta 9.000. True. Engraçado. CHmod. Eu não coloquei para eles ser executáveis, né? Opa, esqueceu alguma coisa na linha 28 de colocar parênteses. Aqui galera, tem mais, tem mais. Eu acho que tem mais. Deixa eu dar uma olhada. Vamos lá. XAR REVELAÇÃO, vinha 37. Eu passei aqui, não fiz, cara. Aqui. Rapaz tem print aqui no projeto do cara, hein? Não, pô, print aqui. Rapaz, onde eu for, tem print nesse lugar, cara. Print, print, print, print, print, print, print, print, print, print, print, print, print, print, print, print, print. Peixou, print está certo. Olha, tem outros eus. Lembrando que, ah, foi, tá me escutando, hein? Tá me escutando. Quer dizer que toda conexão que eu localmente jogar contra a porta 99 mil, ele vai redirecionar para isso aqui e vai capturar lá no nosso amigo, vai capturar o trânsito da comunicação. Pô, legal, cara. Deixa eu fazer um salvo extrago aqui. Deu certo. Agora eu voltei aqui, naturalmente, criar um serviço lá na porta 99 mil e colocar para transmitir. Vai ser o nosso próximo vídeo. Até mais. Tchau.