270 likes | 421 Views
Programando sockets em python. Jerônimo Feijó Noble da Rosa kastanho@gmail.com. Sumário. Apresentação Programação de sockets em “baixo nível”; Programação de sockets em alto nível; Referências. Apresentação. Graduado em Tecnologia em Redes de computadores pelo Senac Pelotas;
E N D
Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com
Sumário • Apresentação • Programação de sockets em “baixo nível”; • Programação de sockets em alto nível; • Referências.
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.
Vantagens da linguagem • Multiplataforma; • Extremamente fácil de utilizar; • Grande quantidade de bibliotecas prontas; • A linguagem está sempre sendo atualizada.
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.
Criando Socket TCP - Cliente Protocolo SOCK_STREAM SOCK_DGRAM SOCK_RAW Família AF_INET AF_INET6 Exemplo de socket: sockobj=socket(AF_INET,SOCK_STREAM) sockobj.connect((‘127.0.0.1’,5000)) sockobj.send(‘senac 2012’) sockobj.shutdown(2) Endereço Porta Mensagem a ser enviada 1 - fecha o canal de transmissão 2 - fecha a conexão
Criando Socket TCP - servidor Exemplo de Socket: sockobj=socket(AF_INET,SOCK_STREAM) sockobj.bind((‘’, 5000)) sockobj.listen(5) connection, address=sockobj.accept() data=connection.recv(4096) connection.close() Porta a ser escutada interface Quantidade de conexões na fila Conexão Endereço do cliente Aceita conexão
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.
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.
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
Criando Socket UDP - Cliente Exemplo de socket: udpsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udpsock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST,1) udpsock.sendto(msg,('255.255.255.255',67)) Comunicação UDP Definindo comunicação broadcast Envia para destino específico IP Remoto Porta remota mensagem
Criando Socket UDP - Servidor Exemplo de socket: udpsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1) Dados,endereco = udpsock.recvfrom(1024) Reutilização do socket Dados Origem Retorna IP da origem
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.
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.
DHCP Monitor(exemplo) • Onde encontrar: Desktop/LLS/DHCP/ • Tarefas: • Verificar funcionamento da aplicação • Verificar arquivo arquivo de log dhcpm.log
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).
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.
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.
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.
Exemplo de código • Servidor HTTP • HTTP estático • HTTP dinâmico • Ataque de dicionário utilizando Telnet
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.
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;
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.
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
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;
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;
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.