Programando sockets em python Jerônimo Feijó Noble da Rosa [email protected] Sumário • Apresentação • Programação de sockets em “baixo nível”; • Programação de sockets em alto nível; • Referências. 2 Apresentação • Graduado em Tecnologia em Redes de computadores pelo Senac Pelotas; • Graduado em Tecnologia em análise e desenvolvimento de sistemas pela UCPEL; • Trabalho no departamento de redes de computadores na UFPEL. 3 Vantagens da linguagem • Multiplataforma; • Extremamente fácil de utilizar; • Grande quantidade de bibliotecas prontas; • A linguagem está sempre sendo atualizada. 4 Programação em baixo nível • Fornece suporte para desenvolvimento de aplicações em rede; • Meio de campo entre camada de aplicação e camada de transporte; • Liberdade para o desenvolvedor criar uma aplicação do zero. 5 Criando Socket TCP - Cliente Família AF_INET AF_INET6 Protocolo SOCK_STREAM SOCK_DGRAM SOCK_RAW Exemplo de socket: sockobj=socket(AF_INET,SOCK_STREAM) sockobj.connect((‘127.0.0.1’,5000)) Endereço Porta a sockobj.send(‘senac 2012’)Mensagem ser enviada sockobj.shutdown(2) 1 - fecha o canal de transmissão 2 - fecha a conexão 6 Criando Socket TCP - servidor Exemplo de Socket: Porta a ser escutada interface sockobj=socket(AF_INET,SOCK_STREAM) sockobj.bind((‘’, 5000)) Quantidade de Endereço do conexões na fila Conexão sockobj.listen(5) cliente connection, address=sockobj.accept() Aceita conexão data=connection.recv(4096) connection.close() 7 Exemplo de código • Envio de arquivos – Transmissão utilizando TCP • DHCP – Identificando servidores DHCP piratas(broadcast) • Chat Multicast – Aplicativos simples de chat que envia mensagem sem necessidade de um servidor. 8 Envio de arquivos • Aplicativo que solicita um nome de arquivo baixa este do servidor remoto; • Utiliza um socket TCP para comunicação dos dados; • Mais garantias de entrega que uma aplicação UDP. 9 Envio de arquivos(exemplo) • Onde encontrar: http://192.168.200.3/Semana_academica_Sockets/LLS • Tarefas: – Solicitar que o colega ao lado disponibilize um arquivo – Utilizar o wireshark para acompanhar a transferência – Verificar integridade de dados 10 Criando Socket UDP - Cliente ExemploComunicação de socket: udpsock = UDP socket.socket(socket.AF_INET, socket.SOCK_DGRAM) Definindo comunicação udpsock.setsockopt(socket.SOL_SOCKET, broadcast Envia para Porta IP Remoto destino específico socket.SO_BROADCAST,1) remota udpsock.sendto(msg,('255.255.255.255',67)) mensagem 11 Criando Socket UDP - Servidor Exemplo de socket: udpsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) Reutilização do socket udpsock.setsockopt(socket.SOL_SOCKET, Retorna IP Dados Origem socket.SO_REUSEADDR,1)da origem Dados,endereco = udpsock.recvfrom(1024) 12 Dynamic Host Configuration Protocol (DHCP) • Definido na RFC 2131; • Utiliza endereço de BROADCAST 255.255.255.255 no lado cliente; • Pode ocasionar diversos problemas, no caso do uso ilegítimo. 13 DHCP Monitor • Ferramenta em Python que permite monitorar servidores DHCP; • Processa mensagens com destino a porta 68 UDP; • Informa na tela e em log, caso seja detectado um servidor não cadastrado. 14 DHCP Monitor(exemplo) • Onde encontrar: Desktop/LLS/DHCP/ • Tarefas: – Verificar funcionamento da aplicação – Verificar arquivo arquivo de log dhcpm.log 15 Multicast • Muito utilizado quando, é necessário que diversos computadores recebem um determinado conteúdo; • Mais eficiente que o Broadcast; • Fornece grande número de endereços. A faixa vai de 224.0.0.0 até 239.255.255.255 (RFC3171). 16 Chat Multicast • Ferramenta simples que permite várias pessoas se comuniquem através de um mesmo endereço multicast; • Não necessita de utilizar um servidor para gerenciar a comunicação; • Grande quantidade de ‘canais’ disponíveis. 17 Chat Multicast(exemplo) • Onde encontrar: Desktop/LLS/chat/ • Tarefas: – Executar o Sender.py e o Receiver.py – Utilizar o Wirshark para analisar a comunicação – Alterar o endereço multicast dentro da faixa de 224.0.0.0 até 239.255.255.255. 18 Programação de alto nível • Facilidade na implementação; • Fornece agilidade no desenvolvimento; • Fornece os principais protocolos utilizados, como HTTP, FTP, SMTP, entre outros. 19 Exemplo de código • Servidor HTTP – HTTP estático – HTTP dinâmico • Ataque de dicionário utilizando Telnet 20 HTTP • Permite a disponibilização facilmente de conteúdo via web através do SimpleHTTPServer; • Pode ser iniciado através de uma única linha python -m SimpleHTTPServer 8000; • Fornece páginas web ou navegação no diretório raiz do servidor. 21 HTTP(Exemplo) • Onde encontrar: Desktop/HLS/HTTP/HTTP1 • Tarefas: – Executar o serverHTTP.py e acessar: http://127.0.0.1:8000/ – Alterar a página e verificar resultado; – Remover a página e verificar o resultado; 22 HTTP - dinâmico • O SimpleHTTPServer permite a criação de páginas dinâmicas; • Utilização dos métodos POST ou GET; • Utilização da saída de scripts em python. 23 HTTP - Dinâmico(Exemplo) • Onde encontrar: Desktop/HLS/HTTP/HTTP2/ • Tarefas: – Executar o exemplo server.py e acessar: http://127.0.0.1:8001/ – Alterar o arquivo pages.py e verificar o resultado 24 Telnet • Serviço muito utilizado por dispositivos como roteadores e switchs; • No python utiliza a biblioteca telnetlib para se conectar a um servidor telnet; • O arquivo pass.txt serve como dicionário de senhas para tentar quebrar a senha do servidor; 25 Telnet(exemplo) • Onde encontrar: Desktop/HLS/TELNET/ • Alterar o arquivo passbreaker.py para o endereço correto do servidor Telnet; • Executar o programa e tentar quebrar a senha do dispositivo no endereço 192.168.201.157; 26 Referências • Foundation, P. S. (2011). Python documentation. http://www.python.org/doc/. último acesso em 01 outubro de 2012. • Goerzen, J. (2004). Foundations of Python Network programming. Apress, 1th edition. • Rhodes, B. and Goerzen, J. (2010). Foundations of Python Network programming. Apress, 2th edition. 27