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

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

 » Programação Desktop » Java » [tutorial]criando scanner de port

[tutorial]criando scanner de port

Ver o tópico anterior Ver o tópico seguinte Ir em baixo  Mensagem [Página 1 de 1]

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

Sir.Rafiki

avatar
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: [Você precisa estar registrado e conectado para ver este link.]


_________________ASSINATURA_________________
Código:
True = False


F.Ramon escreveu:[Você precisa estar registrado e conectado para ver este link.]

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

Kodo no Kami

avatar
master
master
tuturial muito massa mano isso vai me ajudar muito aq


_________________ASSINATURA_________________
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]

Contato:
Spoiler:

Contato:
Facebook: [Você precisa estar registrado e conectado para ver este link.]
Skype: hackerfts315
http://endoffile.umforum.net

3 Re: [tutorial]criando scanner de port em Sab Nov 30, 2013 7:04 pm

yer123

avatar
avançado
avançado
Showww cara Very Happy Very Happy


_________________ASSINATURA_________________


"Não quero ser só mais um." - EU

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

Sun Tzu

avatar
colaborador
colaborador
Bueno ^^


_________________ASSINATURA_________________


 
Grupo no RaidCall - Xtreme Hacking: 7149047
  
"O sangue dos inocentes jamais deverá ser derramado. Contudo, o sangue dos maus deverá fluir como um rio."

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

susp3it0virtu@l

avatar
master
master
parabáns cara


_________________ASSINATURA_________________

[Você precisa estar registrado e conectado para ver esta imagem.]

Frases:

-"Ninguém baterá tão forte quanto a vida.Porém,não se trata de quão forte pode bater,se trata de quão forte pode ser atingido e continuar seguindo em frente.É assim que a vitória é conquistada" - Rocky Balboa

-"Um homem não está acabado quando enfrenta a derrota. Ele está acabado quando desiste." - Richard Nixon

-"Sometimes,you have to demo a threat to spark a solution" - Barnaby Jack

Conteúdo patrocinado


Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum