seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial]criando scanner de port

5 participantes

Ir para baixo  Mensagem [Página 1 de 1]

1[tutorial]criando scanner de port Empty [tutorial]criando scanner de port Qua Nov 27, 2013 3:02 pm

Sir.Rafiki

Sir.Rafiki
avançado
avançado

e ai pessoal, agora irie monstra um passo a passo de como criar um Scanner de port em java (coisa simples pessoal Very Happy)

bem antes de qualquer coisa vamos criar um class principal

Código:
public class portscanner {

           public static void main (String argv[]){


          }// end main

}//end class
feito isso vamos pensa em o que vamos precisa para criar nossa conexão, muitos de vocês com certeza já ouviram fala do API da  Berkeley  chamado Socket, ele serve basicamente para comunicação via protocolos.
no java em especifico o socket fica dentro da Biblioteca java.net , e sua chamada funciona da seguinte maneira :

Código:
Socket variavel = new Socket(ip,port);  
bem como nosso objetivo é criar um scanner, o nosso ip, será o host a ser scanneado , e a porta será alternada ,para ver se retorna ou não uma conexão...

bem nosso host terá que ser inserido pelo usuário,eu usarei o método scanner para isso...

eu costumo tratar erros com o Try/catch , acho mas simples, para que não usar funciona assim:
OBS>ele se encontra na biblioteca Input/output =
java.io.IOException;

Código:
try{
   tentei e deu certo
}
catcha(que_tipo_de_erro  variavel_do_erro){
            System.err.println(e );//imprimir o erro
}

que tal colocamos isso em um código ?let's go

Código:
import java.net.*;
import java.io.IOException;
import java.util.Scanner;

public class portscanner {
    
         public static void main(String[] args)
         {
           
      Scanner ms = new Scanner(System.in);
           
         InetAddress alvo=null;
        
         try {
            
             System.out.println("Insira o Alvo:");
             String host = ms.nextLine();
                
             if(host!=null)
                {
                 alvo = InetAddress.getByName(host);
             scan(alvo);
                
                 }//if end
            }//try end
            
         catch (UnknownHostException e)
         {
             System.err.println(e );
        
         }//catch end
        
        
         System.out.println("Scanner Finalizado");

     }//main end
    
        public static void scan(final InetAddress remote)
    {
            int porta,numero_de_portas;

            String hostname = remote.getHostName();
            
                 for (porta=0;  porta < numero_de_portas ; porta++) {
                    
                    try {
                      
                       Socket s = new Socket(alvo,porta);
                                            
                       System.out.println("A porta " + porta + " do Host " + hostname + " Esta Aberta ");
                      
                       s.close();
                   
                    }//try end
                   
                    catch (IOException ex) {
                        continue
                    }//catch end
            
            }//for end
    
    }//função scan end


}//class teste end
simples né?

primeiro vamos a uma analise por linha Very Happy

depois do main temos a chamada do scanner Very Happy
Código:
Scanner ms = new Scanner(System.in);
é atribuível a ele uma variável com o nome "ms"

Código:
         InetAddress alvo=null;
inetAddress é o nosso ip, eu defini ele numa variavel alvo, que recebe valor fazio

temos agora o Try que ira testa execultar o que ta lá dentro,no caso:

Código:
 try {
            
             System.out.println("Insira o Alvo:");
             String host = ms.nextLine();
                
             if(host!=null)
                {
                 alvo = InetAddress.getByName(host);
             scan(alvo);
                
                 }//if end
            }//try end
bem não tem muito segredo agora

primeiro eu peço para o usuário inserir o alvo do scanner, depois uso o scanner para captura a string digita pelo usuário, e guardo seu conteúdo na variável host,agora se o usuário digitou alvo valido , eu pego a minha variável alvo e igualo a ao ip do host, por exemplo se o usuário digita o domínio dns do alvo: exemplo.com.br , essa linha vai pega o ip,uma especie de ping Very Happy

depois eu passo a variável para minha função scan, então vamos a nossa função *---*

Código:
   public static void scan(final InetAddress ip)
    {
            int porta;
            int numero_de_portas = 65536;

            String hostname = ip.getHostName();
            
                 for (porta=0;  porta < numero_de_portas ; porta++) {
                    
                    try {
                      
                       Socket s = new Socket(alvo,porta);
                                            
                       System.out.println("A porta " + porta + " do Host " + hostname + " Esta Aberta ");
                      
                       s.close();
                   
                    }//try end
                   
                    catch (IOException ex) {
                        continue
                    }//catch end
            
            }//for end
    
    }//função scan end


}//class teste end
a função é publica e estática ,e recebe um variável de ip, que será guardado no argumento com o nome ip

depois eu declaro duas variáveis  porta e numero_de_portas
são do tipo inteiro...
mas o que diabo é numero de portas Ramon?
numero_de_portas é a variável que usaremos que defini nosso for, já já eu explico >.<

bem , se você lembra que mas acima eu peguei o domino e converti em ip, agora farei o inverso,é o que temos na próxima linha
Código:
String hostname = ip.getHostName();
ok,como prometido irei explica o por que do for , e do numero_de_portas

o for vai fazer um loop de 0, até o valor da nossa variável numero_de_portas, bem irei coloca o numero 65536, é o numero máximo recebido por uma porta

ok, então irei declarar agora os valor para as variaveis e testa no for

 
Código:
 int porta;
   int numero_de_portas = 65536;
então nosso for vai trabalhar alternado o valor da variavel porta de 0 até 65536....
enquanto isso dentro do for...

depois disso outro try,e então caímos no socket Very Happy

Código:
Socket s = new Socket(alvo,porta);
ok, se tudo der certo,e a  socket conectar a mensagem que será exibida é a seguinte :

Código:
 System.out.println("A porta " + porta + " do Host " + hostname + " Esta Aberta ");
Aporta 0 do Host exemple.com.br Esta Aberta
ai o socket fecha
               
Código:
 s.close();
dai o loop fica rodando...
mas se não conectar na porta?
ai temos um caso de catch
Código:
 catch (IOException ex) {
                        continue
                    }//catch end
            
            }//for end
    
    }//função scan end
*--* dai eu coloquei para ele não fazer nada, afinal exibir 65536 mensagens, tem que ser meio ninja para ler kkk

ok... mas e se o usuário não digita um host valido quando for pedido?

dai nos entremos no catch da função main :
Código:
catch (UnknownHostException e)
         {
             System.err.println(e );
        
         }//catch end
que exibirá o erro, dai depois do loop roda tudo ,teremos a mensagem :
Código:
 System.out.println("Scanner Finalizado");
Scanner Finalizado
e ai fechamos a função main e o programa ta pronto

eiii Ramon temos um problema, isso é muito lerdo :S

concordo com você , querem uma ideia para deixa-lo mas rápido?hehehe

não faça o for contar numeros em ordem, afinal nem todo numero é uma porta, e geralmente buscamos portas de serviços exclusivos,então que tal fazemos um array de porta para passa os elementos do array no for?
não é má ideia né!

então vamos as melhoras....

primeiro vamos mudar as variaveis de :

 
Código:
 int porta;
   int numero_de_portas = 65536;
para:
Código:
int i;//quase que um padrão para o for
int[] porta = {7,20,21,23,25,53,67,68,69,79,80,88,106,110,111,113,119,123,137,138,139,143,143,161,192,311,122,389,427,443,445,464,500,514,515,532,548,554,587,600,1023,623,625,626,631,660,687,749,985,993,995,1099,8043,1640,1649,1701,1723,1900,2049,2196,2336,3004,3031,3283,3306,3478,3497,3632,3659,3689,4111,4398,4488,4500,5003,5009,5060,5100,5190,5222,5223,5269,5298,5350,5351,5353,5432,5678,5897,5898,5900,5988,6970,9999,7070,7777,8000,8999,8005,8008,8080,8087,8089,8096,8170,8171,8175,8443,8800,8843,8821,8826,8891,9006,9100,11211,16080,16384,16403,16393,16402,16403,16472,24000,24999,42000,42999,49152,65535,50003,50006};//principais portas
note que eu criei um array de inteiros Very Happy

bem apos isso , nosso for fica assim:
Código:
for (i=0;  i < porta.length; i++)
e o conteudo fica assim:

Código:
Socket s = new Socket(alvo,porta[i]);
System.out.println("A porta " + porta[i] + " do Host " + hostname + " Esta Aberta ");
isso melhora a velocidade, mas continua lerdo...
que tal colocar um timeout(é o tempo de tentativa)

mas como fazer isso é simples é so declara o socket vazio e depois usar a função connect(),que receber
connect(new InetSocketAddress(ip,porta), timeout);
o timeout é em milisegundos
e no nosso código fica assim:

Código:
Socket s = new Socket();
 s.connect(new InetSocketAddress(remote,porta[i]), 1000);
se você coloca um numero menor que 1000 milisegundo(1 segundo), isso pode afetar a precisão do seu código, deixando de retorna portas abertas...

bem no geral nosso código ficou
Código:
import java.net.*;
import java.io.IOException;
import java.util.Scanner;

public class portscanner {
    
         public static void main(String[] args)
         {
           
        @SuppressWarnings("resource")
      Scanner ms = new Scanner(System.in);
           
         InetAddress alvo=null;
        
         try {
            
             System.out.println("Insira o Alvo:");
             String host = ms.nextLine();
                
             if(host!=null)
                {
                 alvo = InetAddress.getByName(host);
             scan(alvo);
                
                 }//if end
            }//try end
            
         catch (UnknownHostException e)
         {
             System.err.println(e );
        
         }//catch end
        
        
         System.out.println("Scanner Finalizado");

     }//main end
    
        public static void scan(final InetAddress remote)
    {
            int i;

            String hostname = remote.getHostName();
    
            int[] porta = {7,20,21,23,25,53,67,68,69,79,80,88,106,110,111,113,119,123,137,138,139,143,143,161,192,311,122,389,427,443,445,
                           464,500,514,515,532,548,554,587,600,1023,623,625,626,631,660,687,749,985,993,995,1099,8043,1640,1649,1701,1723,
                         1900,2049,2196,2336,3004,3031,3283,3306,3478,3497,3632,3659,3689,4111,4398,4488,4500,5003,5009,5060,5100,5190,
                         5222,5223,5269,5298,5350,5351,5353,5432,5678,5897,5898,5900,5988,6970,9999,7070,7777,8000,8999,8005,8008,8080,
                         8087,8089,8096,8170,8171,8175,8443,8800,8843,8821,8826,8891,9006,9100,11211,16080,16384,16403,16393,16402,16403,
                         16472,24000,24999,42000,42999,49152,65535,50003,50006};
            
                 for (i=0;  i < porta.length; i++) {
                    
                    try {
                      
                       Socket s = new Socket();
                       s.connect(new InetSocketAddress(remote,porta[i]), 1000);
                      
                       System.out.println("A porta " + porta[i] + " do Host " + hostname + " Esta Aberta ");
                      
                       s.close();
                   
                    }//try end
                   
                    catch (IOException ex) {
                    }//catch end
            
            }//for end
    
    }//função scan end


}//class teste end
olha link no meu github: [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

2[tutorial]criando scanner de port Empty Re: [tutorial]criando scanner de port Qua Nov 27, 2013 3:25 pm

Kodo no Kami

Kodo no Kami
master
master

tuturial muito massa mano isso vai me ajudar muito aq

https://endoffile.umforum.net

3[tutorial]criando scanner de port Empty Re: [tutorial]criando scanner de port Sáb Nov 30, 2013 7:04 pm

yer123

yer123
avançado
avançado

Showww cara Very Happy Very Happy

4[tutorial]criando scanner de port Empty Re: [tutorial]criando scanner de port Seg Dez 02, 2013 1:10 pm

Sun Tzu

Sun Tzu
colaborador
colaborador

Bueno ^^

5[tutorial]criando scanner de port Empty Re: [tutorial]criando scanner de port Ter Dez 03, 2013 8:59 am

susp3it0virtu@l

susp3it0virtu@l
master
master

parabáns cara

Conteúdo patrocinado



Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos