programando sockets em python jerônimo feijó noble da rosa [email protected]

27
Programando sockets em python Jerônimo Feijó Noble da Rosa [email protected]

Upload: internet

Post on 22-Apr-2015

115 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

Programando sockets em python

Jerônimo Feijó Noble da [email protected]

Page 2: 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.

2

Page 3: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 4: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

Vantagens da linguagem

• Multiplataforma;

• Extremamente fácil de utilizar;

• Grande quantidade de bibliotecas prontas;

• A linguagem está sempre sendo atualizada.

4

Page 5: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 6: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

Criando Socket TCP - Cliente

Exemplo de socket:sockobj=socket(AF_INET,SOCK_STREAM) sockobj.connect((‘127.0.0.1’,5000)) sockobj.send(‘senac 2012’) sockobj.shutdown(2)

Família AF_INETAF_INET6

ProtocoloSOCK_STREAMSOCK_DGRAMSOCK_RAW

PortaEndereço

Mensagem a ser enviada

1 - fecha o canal de transmissão2 - fecha a conexão

6

Page 7: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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()

interfacePorta a ser escutada

Quantidade de conexões na fila

Aceita conexão

Conexão Endereço do cliente

7

Page 8: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 9: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 10: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 11: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

broadcastEnvia para destino

específicoIP Remoto Porta

remota

mensagem

11

Page 12: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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)

Retorna IP da origem

OrigemDados

Reutilização do socket

12

Page 13: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 14: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 15: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

DHCP Monitor(exemplo)

• Onde encontrar: Desktop/LLS/DHCP/

• Tarefas:– Verificar funcionamento da aplicação

– Verificar arquivo arquivo de log dhcpm.log

15

Page 16: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 17: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 18: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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 de224.0.0.0 até 239.255.255.255.

18

Page 19: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 20: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

Exemplo de código

• Servidor HTTP– HTTP estático

– HTTP dinâmico

• Ataque de dicionário utilizando Telnet

20

Page 21: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 22: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 23: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 24: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 25: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 26: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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

Page 27: Programando sockets em python Jerônimo Feijó Noble da Rosa kastanho@gmail.com

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