Zoom Icon

Portscanner in Java

From UIC Archive

Portscanner in Java

Contents


Portscanner in Java
Author: dlrm9m
Email: m9m [at] tiscali.it
Website:
Date: 11/07/2006 (dd/mm/yyyy)
Level: Luck and skills are required
Language: Italian Flag Italian.gif
Comments:



Introduzione

Ci imbatteremo oggi nella progettazione di un port scanner in jsp .Io do per scontato che qualcosa sul java la sappiate ma cmq farò qualche accenno nel corso del tutorial


Tools usati

Oracle jdev 10.0g http://www.oracle.com La documentazione sul java della sun http://java.sun.com


Essay

Per prima cosa ci servono due file.Una classe java e un file.jsp Creiamoli dal menù e cominciamo a lavorare sulla classe java.Cosa fa un port scanner? Bè semplice prova a stabilire una connessione con la porta del l'host tramite un socket.Bene in java abbiamo un costruttore che fa proprio questo lavoro Il costruttore lo troviamo java.net.Socket .Ma per capire come funziona consultiamo la documentazione http://java.sun.com/j2se/1.4.2/docs/api/index.html. Come vediamo il costrutto Socket Socket(String host, int port) ammette 2 valori .Uno String per l'host e uno Integer per la porta.Come vediamo il costruttore può funzionare anche in altri modi ma a noi gli altri nn interessano.Cominciamo a buttar giù un po' di listato:

   package project1;       // questo indica il progetto di cui fa parte la classe
   import java.net.Socket; // include il costruttore Socket

Prima di andare avanti vi ricordo un po' di teoria sui metodi Un metodo è formato così: attributo tipo dato di ritorno nome del metodo(eventuali parametri in ingresso) attributo:Public o Private tipo di dato di ritorno:Può essere Int String Void... nome del metodo:È il nome che volete dare al metodo (eventuali parametri in ingresso): sono parametri che arrivano da altre classi, esempio: public int Uno (int a, int b) Questo è un metodo che restituisce un valore int avendo in ingresso 2 parametri int. Ora dopo questa breve parentesi andiamo avanti:
creiamo la nostra classe e la chiamiamo port con la p maiuscola e dentro incorporiamo il nostro costruttore Socket che è formato così: public Socket(String host,int port) throws UnknownHostException, IOException Come vediamo troviamo pure un throws cioè la possibilità che il costrutto non vada .Infatti può generare 2 errori .L'host che abbiamo inserito non esiste oppure c'è stato un 'errore di I/O .Per ovviare a questo problema usiamo il Throwable per gestire più errori http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Throwable.html
Infine usiamo un try per verificare se la connessione avviene . OK continuiamo con il listato class Port{

  public String Socket(String host, int port) {
    try
    {
      Socket a = new Socket(host, port);
      return ris.toString();
    }
    catch(Throwable e)
    {
    }
  }

} Come vediamo viene creata una connessione con il Socket Tralasciamo per un po' la parte java e passiamo al jsp.In pratica a noi serve un pagina in jsp in cui ci sia un form con 2 textbox [una per l'host e una per la porta da esaminare] e infine un button che premuto mandi al costrutto Socket l'host e la porta. Vediamo come possiamo fare.
Teoria sui tag jsp: il jsp hai i tag che si indicano con <% %> per includere si usa <%@ %> per stampare a video <%= %> Ok cominciamo a costruire la pagina jsp includiamo prima di tutto i Packages <%@ page import ="java.util.*,java.lang.*,project1.Port,java.lang.Integer.*" %> Vediamole in dettaglio java.util.*,java.lang.* servono per caricare gli Object ,la classe Socket e tutto quello che ci può servire project1.Port ->>Questa inclusione serve per includere la classe Port che nel mio caso fa parte del Package project1. Creiamo un'stanza alla classe: <% Port a; a= new Port(); %> D'ora in poi a rappresenterà il nostro riferimento alla classe Port. Cosa importante che dimenticavo di dire Il nome della pagina jsp non ve lo scordate: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"/> <title>Portscanner</title> </head> Questa me la risparmio.... Passiamo al body.
Ricordavate che dovevamo creare un form con 2 textbox e un button? Bene eccole qua <body> <form action="ilnomedellavostrapagina.jsp" method="post"> Host<input type="text" name="host" /><br /> Port<input type="text" name="porta" /><br /> <input type="submit" name="invia" value="invia" /> </form> Non penso ci siano commenti da fare no? Ora arriva la parte bella....ihih
Facciamo un piccolo algoritmo sui nostri STEP:

  1. l'utente immetterà l'host ,la porta e premerà il button
  2. Il form invierà le informazioni a questa stessa pagina quindi dobbiamo prepararla a ricevere le info
  3. Richiamiamo la classe java
  4. Restituiamo all'utente il risultato

Premesso che la fase 1) la farà l'utente passiamo alla 2)
Prepariamo la pagina all'arrivo dei dati con il metodo request.getParameter che riceve i parametri inviati dal form: <% String host =request.getParameter("host"); String port =request.getParameter("porta"); MA se notate bene c'è una cosa che nn và: public Socket(String host,int port) -->accetta un int e uno String Come facciamo??? Bene ecco perché abbiamo incluso java.lang.Integer.* FAremo una conversione da String a int. C'è da dire una cosa però prima.La funzione che andremo a richiamare parte subito all'apertura della pagina e se non trova valori và in errore.Quindi dobbiamo mettere un controllo che verifichi che la variabile da trasformare nn sia nulla.Così dopo la conversione mandiamo i dati alla classe Port if(port!=null) { int portint = Integer.parseInt( port ); %> <%= a.Socket(host,portint) %> <% } %> </body> </html> Esaminiamo questa parte: <%= a.Socket(host,portint) %> Inviamo i dati e aspettiamo un risultato che stamperemo con "<%=" Con la jsp abbiamo terminato. Torniamo alla classe java: allora la classe Port ha ricevuto i valori e deve restituire il risulato della connessione alla jsp. Per far questo possimao sfruttare usiamo la funzione StringBuffer http://java.sun.com/j2se/1.4.2/docs/api/java/lang/StringBuffer.html StringBuffer risultato = new StringBuffer(); Creiamo cosi una StringBuffer con nome risultato.Il metodo di questo costruttore che useremo sarà:

  • append(String str) che restituirà una stringa

Ma vediamolo in atto, ometto la parte iniziale della classe: try { Socket a = new Socket(host,port); StringBuffer risultato = new StringBuffer(); risultato.append("si ok è aperta");

return risultato.toString(); } Come vediamo lo StringBuffer risultato contiene "si ok è aperta". Siccome dobbiamo far tornare una valore stringa lo convertiamo in string con il toString. Abbiamo quasi finito.... Ora implementiamo la stessa cosa nel catch catch(Throwable e) { StringBuffer male = new StringBuffer(); male.append("no,no"); return male.toString(); Quindi la classe Port completa è questa: public class Port {

  public String Socket(String host,int port) {
  try
  {
     Socket a = new Socket(host,port);
     StringBuffer risultato = new StringBuffer();
     risultato.append("si ok è aperta");
     return risultato.toString();
  }
  catch(Throwable e)
  {
     StringBuffer male = new StringBuffer();
     male.append("no,no");
     return male.toString();
  }
 }

} FiNE


Note finali

Grazie a tutta la UIC. Al forum e a tutti quanti!!!!


Disclaimer

Divertitevi a smanettare sempre.