programando sockets em python jerônimo feijó noble da rosa [email protected]
TRANSCRIPT
Programando sockets em python
Jerônimo Feijó Noble da [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
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
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
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
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
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
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 de224.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