Brandon Rhodes John Goerzen Novatec
Original English language edition published by Apress, Copyright 2014 by Apress, Inc.. Portugueselanguage edition for Brazil copyright 2015 by Novatec Editora. All rights reserved. Edição original em inglês publicada pela Apress, Copyright 2014 by Apress, Inc. Edição em português para o Brasil copyright 2015 pela Novatec Editora. Todos os direitos reservados. Copyright 2015 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates Tradução: Aldir José Coelho Corrêa da Silva Assistente editorial: Priscila A. Yoshimatsu Revisão gramatical: Viviane Oshima Editoração eletrônica: Carolina Kuwabata ISBN: 978-85-7522-437-3 MP20150528 Histórico de impressões: Junho/2015 Primeira edição Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 São Paulo, SP Brasil Tel.: +55 11 2959-6529 E-mail: novatec@novatec.com.br Site: novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec MP20150528
Sumário Sobre os autores... 13 Sobre os revisores técnicos... 14 Agradecimentos... 15 Introdução... 16 Python 3... 16 Melhorias desta edição...17 Playground da rede...19 Capítulo 1 Introdução à rede cliente-servidor... 21 Os alicerces: pilhas e biblliotecas... 22 Camadas de aplicativos... 26 Conversando com um protocolo... 27 Comunicação de rede bruta... 29 Um suportando o outro até o fim... 32 Codificação e decodificação... 35 Internet Protocol... 37 Endereços IP... 38 Roteamento... 40 Fragmentação de pacotes... 42 Aprendendo mais sobre o IP... 44 Resumo... 45 Capítulo 2 UDP... 47 Números de porta... 48 Soquetes...51 Vinculando-se a interfaces... 67 Fragmentação no UDP... 70 Opções dos soquetes... 73 Broadcast...74 Resumo... 77 7
8 Programação de Redes com Python Capítulo 3 TCP... 79 Como o TCP funciona... 79 Quando usar o TCP...81 O que são os soquetes TCP... 83 Cliente e servidor TCP simples... 84 Vinculando-se a interfaces... 93 Deadlock... 95 Conexões fechadas, conexões semiabertas... 101 Usando fluxos TCP como arquivos...103 Resumo...104 Capítulo 4 Nomes de soquete e o DNS...106 Nomes de host e soquetes... 106 Resolução de endereços moderna...111 Protocolo DNS... 121 Resumo...132 Capítulo 5 Dados e erros de rede...133 Bytes e strings...133 Framing e aspas...143 Pickles e formatos autodelimitadores...150 XML e JSON... 151 Compactação...153 Exceções de rede...154 Resumo... 160 Capítulo 6 TLS/SSL...162 O que o TLS não protege...162 O que pode dar errado?...164 Gerando certificados...167 Deixando o TLS para terceiros...170 Contextos padrão de Python 3.4...172 Codificações escolhidas a dedo e segurança futura perfeita... 181 Suporte dos protocolos ao TLS...184 Conhecendo detalhes...186 Resumo...194 Capítulo 7 Arquitetura do servidor...196 Algumas palavras sobre implantação...197 Protocolo simples...199 Servidor de thread única... 204
Sumário 9 Servidores com várias threads e processos... 208 Servidores assíncronos... 212 Execução do inetd...224 Resumo... 227 Capítulo 8 Caches e filas de mensagens...229 Usando o Memcached... 230 Hashing e Sharding...235 Filas de mensagens... 238 Resumo...247 Capítulo 9 Clientes HTTP...249 Bibliotecas clientes Python...249 Portas, criptografia e framing...252 Métodos...255 Caminhos e hosts... 256 Códigos de status...257 Cache e validação...261 Codificação de conteúdo... 265 Negociação de conteúdo... 266 Tipo de conteúdo... 269 Autenticação HTTP...270 Cookies...272 Conexões, sua reutilização e o httplib...274 Resumo...275 Capítulo 10 Servidores HTTP...277 WSGI...278 Frameworks de servidores assíncronos... 280 Proxy de encaminhamento e proxy reverso...281 Quatro arquiteturas... 283 Plataformas como serviço... 288 Padrões de GET e POST e a questão do REST... 290 WSGI sem um framework... 293 Resumo... 298 Capítulo 11 World Wide Web...301 Hipermídia e URLs... 301 Hypertext Markup Language... 309 Lendo e gravando em um banco de dados... 313 Aplicativo web inadequado (em Flask)... 315
10 Programação de Redes com Python Dança dos formulários e métodos HTTP...322 Aplicativo de pagamentos no Django... 338 Escolhendo um framework web... 344 WebSockets... 346 Web Scraping...347 Resumo... 363 Capítulo 12 Construindo e analisando emails...365 Formato dos emails... 366 Construindo um email... 369 Adicionando HTML e multimídia...372 Adicionando conteúdo...379 Analisando emails... 380 Percorrendo as partes MIME... 383 Codificações de cabeçalhos... 386 Analisando datas... 388 Resumo... 389 Capítulo 13 SMTP...391 Clientes de email versus serviços de webmail... 391 Como o SMTP é usado...397 Introduzindo a biblioteca SMTP... 403 Manipulação de erros e depuração da comunicação... 406 Obtendo informações a partir de EHLO... 409 Usando o Secure Sockets Layer e o Transport Layer Security... 412 SMTP autenticado...416 Dicas sobre o SMTP... 418 Resumo... 419 Capítulo 14 POP...420 Compatibilidade do servidor POP... 421 Conexão e autenticação... 421 Obtendo informações da caixa de correio...425 Baixando e excluindo mensagens... 427 Resumo... 430 Capítulo 15 IMAP...432 Entendendo o IMAP em Python... 434 Resumo...461
Sumário 11 Capítulo 16 Telnet e SSH...462 Automação da linha de comando... 463 Telnet...478 SSH: o shell seguro... 484 Resumo... 503 Capítulo 17 FTP...504 O que usar em vez do FTP... 505 Resumo...523 Capítulo 18 RPC...524 Recursos do RPC...526 Resumo...550