java net: interagindo com a internet

40
Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet Ricardo Terra rterrabh [at] gmail.com Java NET: Interaja com a Internet 1

Upload: ricardo-terra

Post on 22-Jul-2015

134 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Java NET: Interaja com a Internet

Ricardo Terra rterrabh [at] gmail.com

Java NET: Interaja com a Internet 1

Page 2: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

CV

Nome: Ricardo Terra Email: rterrabh [at] gmail.com www: ricardoterra.com.br Twitter: rterrabh Lattes: lattes.cnpq.br/ 0162081093970868

Ph.D. (UFMG/UWaterloo), Post-Ph.D. (INRIA/Université Lille 1)

Background Acadêmico: UFLA (desde 2014), UFSJ (1 ano), FUMEC (3 anos), UNIPAC (1 ano), FAMINAS (3 anos)

Profissional: DBA Eng. (1 ano), Synos (2 anos), Stefanini (1 ano)

Java NET: Interaja com a Internet 2 Maio, 2011

Page 3: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Objetivo do Mini-curso

§  Entendendo o Funcionamento da Web §  HTTPS

§  Entendendo File e Stream

§  API Java Net §  Baixar o conteúdo de um recurso (página, imagem etc) §  Submeter formulários

§  Ataque por Força Bruta

§  Desenvolvimento de Aplicações §  MyDownload §  MyPageChecker

3

Page 4: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Entendendo o Funcionamento da Web

Java NET: Interaja com a Internet 4

Page 5: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Funcionamento da Web – HTTP e HTML

§  A maioria das conversas que ocorre na web entre clientes e servidores são mantidas através do protocolo HTTP, que possibilita conversas de requisição e resposta

§  O cliente envia uma requisição HTTP e o servidor retorna uma resposta HTTP §  Enfim, se você é um servidor web você fala HTTP

§  Portanto, uma conversação HTTP é uma sequência de requisição/resposta §  Isto é, o cliente pede uma coisa, o servidor responde, o cliente pede

outra coisa, o servidor responde...

5

Page 6: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Funcionamento da Web

§  Requisição e resposta:

6

Page 7: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Cliente e Servidor / HTTP e HTML

§  Quando um servidor responde a uma solicitação, ele geralmente envia algum tipo de conteúdo para o browser, para que esse possa exibí-lo §  O formato HTML é o formato mais comum enviado como resposta

para um cliente pelo Servidor, pois esse é facilmente lido pelo browser no cliente

§  Informação presente no content-type no cabeçalho HTTP §  text/html!§  text/plain!§  application/pdf!§  image/jpeg!§  ... !

7

Page 8: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Cliente e Servidor / HTTP e HTML

§  O HTTP é um protocolo da camada de aplicação que tem características específicas para a web, mas ele depende de toda a arquitetura TCP/IP para garantir que tanto a solicitação e quanto a resposta sejam transmitidas entre o cliente e o servidor

TOPO DO TCP/IP

8

Page 9: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Requisição e resposta

§  Principais elementos do fluxo de requisição: §  método HTTP §  endereço da página (URL) que está sendo acessada §  parâmetros do formulário

§  Principais elementos do fluxo de resposta: §  cabeçalho

§  código de status §  Método HTTP §  tipo do conteúdo (texto, imagem, HTML...)

§  conteúdo (o texto, a imagem, o HTML...)

9

Page 10: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Requisição e resposta

§  Requisição HTTP §  A primeira coisa que você encontrará é o nome do método HTTP

§  O nome do método informa ao servidor o tipo de solicitação que está sendo feita e como o resto da mensagem será formatada.

§  O protocolo HTTP possui diversos métodos, mas usaremos e aprenderemos os mais comuns: GET e POST

10

Page 11: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Requisição e resposta

§  Método GET §  É o método mais simples do HTTP e seu principal trabalho é pedir

um recurso §  Pode ser qualquer tipo de recurso: uma página, uma imagem, um PDF,

etc

§  O caminho até o recurso e quaisquer parâmetros adicionados à URL serão incluídos na própria barra de endereços

§  Podemos usar o GET para formulários, porém com desvantagens: §  O total de caracteres do GET é limitado §  Os dados que você envia utilizando HTTP GET são anexados à URL,

portanto, seja o que for que você estiver transmitindo, ficará exposto

11

Page 12: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Requisição e resposta

§  Método POST §  É um método mais poderoso. É um GET++. Com o POST, você

pode solicitar algo e, ao mesmo tempo, enviar os dados de um formulário para o servidor

§  Os dados a serem enviados ao servidor estão localizados na carga útil (payload) da mensagem e podem ser bem extensos

Pacote IPv4

§  Por isto, o POST é considerado mais seguro que o GET

12

Page 13: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Requisição e resposta

§  Enfim, para acesso a recursos utiliza-se GET e aplicações que utilizam formulários utiliza-se POST

13

Page 14: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Requisição e resposta

§  Resposta HTTP §  uma resposta HTTP é composta de um cabeçalho (header) e o

corpo §  o cabeçalho informa ao browser o método que está sendo utilizado, se

a solicitação obteve êxito (código) e o tipo de conteúdo está incluído no corpo

§  corpo possui o conteúdo (por exemplo, HTML) que o browser exibirá

§  o código pode ser: §  1xx: Informativa: requisição recebida, processo em continuidade… §  2xx: Sucesso: a ação foi recebida, entendida e aceita com sucesso §  3xx: Redirecionamento: ação futura ainda deve ser tomada para

completar a requisição §  4xx: Erro no cliente: requisição contém sintaxe incorreta ou não pode

ser resolvida §  5xx: Erro no servidor: O servidor falhou ao responder uma aparente

requisição válida

14

Page 15: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 15 Java NET: Interaja com a Internet

HTTPS

§  E o HTTPS? Se utilizarmos, nossa aplicação é segura?!

Page 16: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Entendendo File e Stream

Java NET: Interaja com a Internet 16

Page 17: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

API Java Net

§  Antes de entrarmos na API Java Net, os seguintes pré-requisitos devem ser abordados: §  Classe File

§  Streams

§  Assim, esta seção apresenta uma visão geral desses assuntos

17

Page 18: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Classe java.io.File!

§  Classe responsável em realizar métodos em arquivos físicos. Para se construir um objeto do tipo File, deve saber o nome completo do arquivo. Caso o arquivo esteja na raiz do workspace pode apenas passar o nome do arquivo

§  Caso se passe o nome de um arquivo que não existe, este é criado na primeira necessidade

§  Exemplo: §  new File("C:\\pasta\\meuArquivo.txt")!§  new File("meuArquivoNoWorkspace.txt")!§  new File(”/dev/etc/xpto.txt”)!§  new File(”/bin")!

Java NET: Interaja com a Internet 18

Page 19: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Classe java.io.File

§  Trabalhando com um arquivo: File fileTexto = new File("arquivoTexto.txt");!!System.out.println("Nome do arquivo: " + fileTexto.getName());!!System.out.println("O arquivo existe? " + fileTexto.exists());!!System.out.println(”Diretório? " + fileTexto.isDirectory());!

!if (fileTexto.isFile()) {!! !System.out.println("É um arquivo do diretório: " !! ! !+ fileTexto.getAbsolutePath());!!}!!System.out.println("Posso ler? " + fileTexto.canRead());!!S y s t e m . o u t . p r i n t l n ( " P o s s o e s c r e v e r ? " + fileTexto.canWrite());!

§  Enfim, classe File não manipula arquivos... §  Então, quem manipula?! Streams...

!Java NET: Interaja com a Internet 19

Page 20: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Streams

§  Java fornece uma interface consistente ao programador, independente do dispositivo real que é acessado

§  Essa abstração é chamada stream e o dispositivo real pode ser: §  arquivo (file) §  impressora §  socket §  Internet §  …

§  Em outras palavras, você trabalha com qualquer dispositivo do mesmo modo (com certas limitações)

Java NET: Interaja com a Internet 20

Page 21: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Streams

§  Basicamente, existem dois principais tipos de streams: §  stream de texto

§  Manipula caracteres

§  Leitura: Reader!§  Escrita: Writer!

§  stream binário §  Manipula bytes

§  Leitura: InputStream!§  Escrita: OutputStream

Java NET: Interaja com a Internet 21

Page 22: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Streams!

Java NET: Interaja com a Internet 22

Page 23: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Streams

§  Devido ao foco do curso, não colocarei exemplos de uso

§  O conhecimento necessário será absorvido durante as explicações da próxima seção (on-the-fly)

Java NET: Interaja com a Internet 23

Page 24: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

API Java Net

Java NET: Interaja com a Internet 24

Page 25: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

API Java Net

§  API completa desenvolvida pela Oracle / Sun para acessos à Internet

§  Com essa API podemos: §  Buscar recursos web (página HTML, por exemplo) §  Submeter formulários

§  Nos próximos slides veremos alguns exemplos básicos da utilização dessa API

Java NET: Interaja com a Internet 25

Page 26: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

API Java Net

§  Acessando um site §  Lendo do InputStream da URLConnection!

§  Projeto JavaNet: com.terra.exemplos.RecursoHTML!

§  O conteúdo retornado é uma HTML, isto é, texto!

§  Logo, qual o papel de um browser?

Java NET: Interaja com a Internet 26

Page 27: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

API Java Net

§  Só com o que já sabemos, podemos baixar qualquer conteúdo e salvá-lo em disco (espécie de um programa de download)

§  Baixando um recurso (imagem ou pdf, por exemplo): §  Lendo do InputStream da URLConnection §  Escrevendo no OutputStream de um arquivo!

§  Projeto JavaNet: com.terra.exemplos.SalvarRecurso!

Java NET: Interaja com a Internet 27

Page 28: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

API Java Net

§  Submetendo um formulário §  Descobrir url do formulário e nome dos seus campos

§  Antes da submissão §  Uso de URLEncoder para passagem de parâmetros §  Escrita no OutputStream da URLConnection!

§  Depois da submissão §  Lendo do InputStream da URLConnection!

§  Projeto JavaNet: com.terra.exemplos.Formulario! Java NET: Interaja com a Internet 28

Page 29: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Ataque por Força Bruta

Java NET: Interaja com a Internet 29

Page 30: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Força Bruta

§  Tentar todas as possibilidades...

30

Page 31: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Força Bruta

§  Exemplo Motivador: SINEF

§  Técnicas para evitar §  Limite de Tentativas

§  Você utilizou 5 tentativas. Usuário bloqueado.

§  Tempo de Ociosidade §  Você utilizou 5 tentativas. Usuário bloqueado por 30 minutos.!

§  Imagem

31

Page 32: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Força Bruta

§  Como fazer? §  Descobrir o formulário e o nome do seus campos §  Bolar um algoritmo para gerar todas as combinações §  Ir tentando…

§  Tome cuidado que é possível descobrí-lo pelo seu IP

§  Não use para o mal: §  www.peladeiro.com.br §  qualquer outro... deixo com vocês...

Java NET: Interaja com a Internet 32

Page 33: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Desenvolvimento de Aplicações

Java NET: Interaja com a Internet 33

Page 34: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Desenvolvimento de Aplicações

§  Acho que já foi possível notar que o mais legal da API Java Net não é acessar à Internet, mas sim, as aplicações que pode gerar

§  Nesta seção, faremos a criação de dois aplicativos: §  MyDownload

§  Programa para fazer download pela Internet

§  MyPageChecker §  Programa para verificar se houve alterações em

uma determinada página

Java NET: Interaja com a Internet 34

Page 35: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Desenvolvimento de Aplicações

§  MyDownload §  Programa para fazer download pela Internet

§  Algo como:

§  Pacotes: §  com.terra.mydownload.{thread,gui,main}!

Java NET: Interaja com a Internet 35

Page 36: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Desenvolvimento de Aplicações

§  MyPageChecker §  Programa para verificar se houve alterações em uma

determinada página

§  Algo como:

§  Pacotes: §  com.terra.mypagechecker.{thread,gui,main}!

Java NET: Interaja com a Internet 36

Page 37: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011

Considerações Finais

Java NET: Interaja com a Internet 37

Page 38: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Considerações Finais

§  Use para o BEM!!!

38

Page 39: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Dúvidas?

???

39

Page 40: Java Net: Interagindo com a Internet

Ricardo Terra (rterrabh [at] gmail.com) Maio, 2011 Java NET: Interaja com a Internet

Ricardo Terra rterrabh [at] gmail.com

Apresentação e projeto Java disponíveis em:

www.ricardoterra.com.br/palestras

Principais referências bibliográficas: HORSTMANN, C; CORNELL, G. Core Java: Volume 1 – Fundamentos. 8 ed. São Paulo: Pearson, 2010.

DEITEL, P; DEITEL, H. Java: Como Programar. 8 ed. São Paulo: Pearson, 2010.

Obrigado!

40