Socket Server e Socket Client em Python

Aula 3 · Python Programming for Hackers and Pentesters
Socket Server e Socket Client em Python

Transcrição do áudio

o nosso livro lá do curso de Python ele ele não vai para o básico tá ele acredita que você já manja tudo de redes de computadores e você já sabe programar em Python, né? Então é Python, é programação para hackers, então ele acredita que você sabe pra caramba e o mundo Python e o mundo hacker na verdade desculpe ele é um mundo que ele acredita no conhecimento máximo ou seja aqui não é lugar para pessoas que não querem estudar bom para você chegar nesse capítulo nesse livro você tem que assistir todas essas aulas para poder ter a chance de entender o que o cara está fazendo aqui e é uma coisa interessante porque as pessoas acreditam que a inteligência artificial vai aprender por eles a inteligência artificial não vai aprender por eles a inteligência artificial vai aprender por ela para ela você não vai aprender nada você nada nada nada então comece a pegar o livro começa a estudar não fale assim e aprenda para mim não tem esse papo não então vamos lá vou fazer um seguinte vou levar vocês para o meu mega vou passar para vocês esse link desse livro que eu vou fazer vamos um como posso ser o resumo do que você tem que saber a primeira coisa o livro já começa falando de comunicação de processos e aí ele utiliza IPC comunicação entre processos e ele utiliza o tipo socket que a única comunicação entre processos que pode ser realizado em processos ou em computadores diferentes ou nozes diferentes tem que ser só que beleza aí eu falo sobre encoding sobre tabela ASCII sobre o TF8 eu garanto para você utilize o TF8 que você nunca vai se decepcionar beleza eu explico mostra que o caso do TF8 legal bom então conforme eu falei tá no botão de sistemas operacionais modernos tá no livro de redes de computadores o socket é uma comunicação entre processos a no qual eu tenho um server e um cliente cliente aquele que faz a requisição server aquele que recebe a requisição e dá uma resposta não necessariamente não necessariamente somente isso a brincadeira pode ali cliente manda recebe e manda manda recebe recebe não importa tá aqui no meio tem todo toda a dinâmica do protocolo de comunicação de alto nível aqui ó mas tudo começa assim o server ele abre um socket o objeto do tipo socket e estou imaginando que eu estou em uma programação orientada objetos esse objeto do tipo socket vai ter uma função bind que vai associar esse processo a uma porta no sistema operacional conforme eu já falei pra vocês você pode ter 65536 portas em seu computador da porta 0 a 1023 somente o que pode manipular da porta 1024 pra frente qualquer usuário pode manipular beleza bom e aí é que está eu vou me associar uma porta de camada 4 do modelo oze e supondo que ela não está aberta eu vou abrir e vou usar se ela está aberta vai dar pau logo em seguida eu entro em listening e começa a contar o número naturalmente concorrente de clientes se conectando pra cada cliente eu vou destravar o acept então até listem ele executa uma única vez aqui em acept por cliente o cliente então ele inicia o objeto do tipo socket passo pra ele os parâmetros de conexão com o servidor que se conecta fazendo o rende shake de três vias então isso aqui é uma comunicação tcp ou seja ela precisa do rende shake de três vias o tomlinson aonde eu mando sim recebo sim a que não o de retorno aqui não o de pra que eu tenha a comunicação estabilizada se isso é certo então eu posso fazer o meu laço de a de repetição pegando aqui criando uma thread pau na máquina vamos lá então o servidor seria sim importe socket socket IPv4 socket tcp ss o bind porta quando eu coloco aqui binding no server eu coloco 0000 quer dizer que eu vou aceitar de qualquer IP cliente local host da rede de fora da rede não importa eu só vou aceitar a concorrência de um os demais cair negação de serviço de os eu tenho que ser muito rápido para executar o acepto eu tirece um que chegou simples assim então o de os é quando é quando vamos lá chega mais cliente aqui do que eu sou capaz de tirar com acepte então ele vai ir enfleirando a fila lá é de uma por é de um elemento mas você pode colocar como esse exemplo 500 quer ver ó cadê a que tá pra baixo desculpa e que ó listem 500 tá criou que concorrência de 500 vem chegando eu vou tirando a cada vez que eu tiro eu vou limpando essa estrutura de que eles tem cadeada de no máximo 500 posições tá e aí quem disse que não precisa de saber reestrutura de dados em eu tenho os caras assim eu dou a alguns caras fala esse tipo de coisa cara assim surreal cara surreal cd barra tem p legal mkdir exemplo cd exemplo legal nano server com o local opa pps legal aqui é legal então vamos lá é a minha laza vamos lá ó foi mal galera e não estava preparado então eu pensei vou colocar o corte deixa eu dar um zoom aqui fazer o código aqui mesmo aqui na hora aqui beleza viu e legal bom eu preferi usar quatro espacinhos bom em port socket já tá built no python e o e se essa estrutura faz o seguinte ó essa estrutura vai criar com isso aqui isso aqui vai criar essa variável s quer dizer que quando eu terminar essa última linha aqui eu caí para essa vai ser destruído a variável s será destruída vai ser colocada em garba de coleto é a forma mais segura de você criar uma variável muito complexa é bem parecido com o usin do c sharp contra o x y ok legal e aí python 3 opa o server e ele vai ficar um para aí ou eu acho que escreve errada em cara bisnain a s ponto e aí é isso aí e a vacilão em naquilo de apagar os números apaguei a ler a letra e s da variável o server ele estão está aqui rodando em modo bloqueado como assim bom sempre quando você roda uma chamada bloqueante aí você tem que ler o livro do tannin bolt somos operacionais modernos e ele estava em pronto e ele foi a não desculpe ele estava executando e ele foi para bloqueado ele está aqui então estava executando quando eu executei a linha que eu entro em listem listem me bloqueia esperando um evento da placa de rede sempre que um processo bloqueado é porque está esperando alguma coisa algum recurso tá quando chegar a placa de rede o ele vai para pronto que é uma fila de processos pronto aí você ler o livro do tannin bolt e também assiste meus vídeos de linux ele vai falar que vai chegar ali vai ser classificado em uma priori te lembra priori te o meu na e se e aí você vai chegar o seu momento de ser executado depois que chegar o evento da placa de rede que seria a conexão de um cliente com você beleza tá bom então aqui é o server repara que ele é no python uma estrutura idiota né e poucas linhas vamos pegar que um clientzinho que o povo já explico sobre isso aí tá então vamos lá aqui um clientzinho bobo idiota copia copiei beleza então vamos lá e estava aqui no nano legal serve daqui beleza o file new table tá bom nano cliente ponto e aí vamos colar aqui beleza vou ficar aqui digitando não cara vou ficar aqui digitando não cara te garanto eu fiz um curso de digitação na verdade né digitação dat lografo lá no início da década de 90 cara se não falha foi na ano de 90 a minha memória né então tá aqui socket aqui é o cliente tá pv4 tcps e aí eu me conecto ao local host máquina local teoria de redes teórico lá do tânnabon é x y ok clear então python 3 cliente do seu pressionar isso aqui e aqui vai atender com o listening e vai destravar vai fazer aquele fluxo que eu mostrei para você e vai destravar e vai terminar a execução que vê aqui ó ele terminou o fluxo de execução dele porque ele estava bloqueado em listening então listening ele é uma chamada bloqueante ele vai bloquear atende somente um cliente povx e somente um cliente porque não tem o outro como assim legal então vamos lá vamos fazer uma mudança no nosso código para atender para atender o i o certo então aqui eu teria um aço de repetição simplesmente ele vem aqui cria adres conector aceita e sai simples tá bom mesmo assim ele vai atender um cliente por vez contra x e só ok beleza deixa ele rodando aqui vamos lá e vamos destravar olha só ele continua rodando viu ele não soltou na verdade você não está vendo ele fez o laço de repetição ele fez todo o laço de repetição bonitinho você quer ver print a ddr é o print a ddr contra x y ok e vamos rodar aqui então novamente vamos ver olha aqui ele vai colocar o endereço que eu cliente usei e a porta que eu cliente usei o cliente sempre usa portas altas e dinâmicas tá cliente ele tem essa particularidade portas altas e dinâmicas e na camada 4 viu olá beleza tá bom show mas ele não seria capaz de atender múltiplos clientes naturalmente por um motivo simples é eu só tenho a possibilidade cadê eu só tenho uma lista cara eu só tenho uma lista encadeada de um único elemento de apenas um então se eu quero atender múltiplos clientes e que eles fiquem aguardando nessa lista encadeada a vez deles seri attendidos é só você colocar mais posições aqui vem o de os né o de os ele nasce como eu posso dizer dessa benção porque uma benção essa limitação porque se não existe a limitação no programa server e o a negação de serviço começa a vir quem tomaria a negação de serviço seria o sistema personal ele que daria todos os recursos e cairia em negação de serviço então eu prefiro que um programa que está sendo atacado caia a negação de serviço do que todo o sistema operacional por isso que essa limitação é muito importante a negação de serviço na verdade ela é muito importante embora seja tão fácil de ser explorada porque a negação de serviço é a própria como eu posso dizer assim motivo de sua existência né é é é dá para fazer um poema então aqui eu poderia ter naturalmente uma trad disparando trouxenta as requisições aqui em paralelo cara e meu daria certo legal daria muito certo beleza entender o que que é né bom esse aqui é só que nós estamos programando em cima da camada quatro como assim vou pegar aqui uma ferramenta para desenhar então eu tenho modelo os camada um camada dois camada três que não nos importa nenhuma dessa que nos importa beleza camada quatro camada sede suas camadas que nos importa você pode programar usando aqui em cima e você pode programar usando aqui em cima nesse exemplo dessa aula nós estamos aqui ó aqui e nós estamos usando um protocolo chamado TCP aqui da camada quatro simples assim legal então nós temos que ser rápido o suficiente lembrando que é onde há a transmissão realmente que pode ser como essa daqui essa que é do SMTP veja que sequência depois do connect que ele realiza entre cliente servidor bom os dados no mundo só que eles estão em pedaços mas aí o sistema operacional une eles os pedacinho tudinho em uma sequência binária e nos entrega nós temos um aço de repetição o outro aqui ó temos um ai outro aqui um ai outro aqui constante pegando e lendo bom vamos ver um exemplo só que te serve vimos binding qualquer porta ou 0.0.0.0 listem um poderia ser 100 200 300 não importa o connectom e aí eu vou colocar a conexão e então com a conexão aberta eu então faço um oi outro está vendo essa linha ou é 12 13 14 na verdade a 11 12 13 14 né 11 12 13 14 é essa bola vermelha aqui ó você está espantando os bits que estão sendo injetados aqui então os bits são injetados entregues para o seu programa do tipo só que estrange por isso a palavra estrange os bits estão sendo injetados nessa pequena área de memória em que você vai lendo com o ai outro e retirando você vai lendo e retirando tá e os bytes estão sendo injetados ali na verdade bits né se você olhar o pedaça né é que nós acabamos lendo em baix então se não for possível mais ler nenhuma informação simplesmente recebi tudo né então vamos lá pegar isso aqui por exemplo e o porto 81 legal copia aqui vamos jogar lá eu não vou de tatuça não cara idade que eu tô idade avançadíssima e idade avançadíssima vamos colar aqui eu só mato os números e aí e sim eu quero porta 81 caramba olha só ai ai e aí legal menos menos que está na boa cara e aqui ele está lendo somente de um clínio certo e aí e aí e aí você já virou a minha meu padrão de espaçamento em cara e aí e aí e aí e aí e aí e aí e aí e aí é que você tem que programar cara é que o cara quer vender um curso mesmo para você cara ser você tem que saber tudo o caramba você tem que ser foda para caramba você não pode ser um zero ela essa verdade mas falar verdade é difícil porque aí é como eu posso dizer de cliente. Sent ao. Eu poderia muito bem fazer isso aqui ó assim ó quer ver? Faça o curso do BENTV. Não sei se você sabe né? O hacker BENTV. Encode. Encode ou decode cara. Eu acho que encode. Eu sempre faço confusão. O TF8, certo? Força ao encode de o TF8. Os bytes em o TF8. Legal. Contra o x, y ou ok. E aí você vem cá e manda. E chegou aqui olha só. Ah, deu problema aqui. E aí esqueci de colocar bloco né? Bloco M24. Ura. Eu esqueci de fazer isso aqui ó. Criar uma constante. É igual a 1.024. Deixa eu ver se eu não esqueci mais nada cara. Aí eu acho que é só isso. Contra o x, y ou ok. Aí chegou cara. Fala ó. Aqui ó. Esse recebi fazer o curso do BENTV. Por que que chegou assim? Encode cara. Encode. Esse cara que mandou em o TF e esse aqui, bom, escrever os bytes simplesmente. Legal? Você pode muito bem chegar aqui. Como ele vai chegar um array de bytes. Você pode decode o TF8 e fazer um<|pt|><|zh|> sought de um TF8. Pode pôr o server pra funcionar. Beleza? Opa! Ah cara, é escrever errado não acredito. Decode. Tá economizando letras aqui meu teclado. Eu acho que eu preciso fazer um curso da etilografia depois de 40 anos. Fala ó. Faça o curso do BENTV inclusive você se dirlerado conforme eu mandei aqui no texto. Certo? Olha só. Aqui ó. Viram? O uso do encode decode. Cara, você pega muita informação bicho, né? É impressionante. Impressionante. Recebi do cliente. Viram? Beleza. Isso aqui é o básico de programação socket. O texto aqui é muito mais complexo que isso. Mas é o que você precisa saber na próxima aula. Recomendo que você faça todas as práticas. De mais. Tchau.
Voltar ao curso