Portscanner in Java
From UIC
Portscanner in Java
Contents |
| Infos | |
|---|---|
| Author: | dlrm9m |
| Email: | m9m [at] tiscali.it |
| Website: | |
| Date: | 11/07/2006 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| 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
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:
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: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:
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ì:
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
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
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:
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:
<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
<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:
- l'utente immetterà l'host ,la porta e premerà il button
- Il form invierà le informazioni a questa stessa pagina quindi dobbiamo prepararla a ricevere le info
- Richiamiamo la classe java
- 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 port =request.getParameter("porta");
MA se notate bene c'è una cosa che nn và:
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
{
int portint = Integer.parseInt( port );
%>
<%= a.Socket(host,portint) %>
<%
}
%>
</body>
</html>
Esaminiamo questa parte:
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
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:
{
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
StringBuffer male = new StringBuffer();
male.append("no,no");
return male.toString();
Quindi la classe Port completa è questa:
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.
Categories: Java | Dlrm9m | 2006