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
Download

Programando sockets em python