Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Prelevare dati da una porta

    Ciao a tutti! sto cercando di costruire un prg in java per riuscire ad acquisire dati che arrivano sulla porta 1680 da un server aaa.com:3234.

    Ho scritto il seguente prg, ma mi dà le seguenti eccezioni:
    Exception in thread "main" java.net.ConnectException: Connection refused: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl .java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSoc ketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.j ava:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.j ava:364)
    at java.net.Socket.connect(Socket.java:507)
    at java.net.Socket.connect(Socket.java:457)
    at java.net.Socket.<init>(Socket.java:365)
    at java.net.Socket.<init>(Socket.java:178)
    at Sniffer.main(Sniffer.java:5)

    Ecco il codice che ho trovato in giro:
    import java.io.*;
    import java.net.*;
    public class Sniffer {
    public static void main(String[] args) throws Exception {
    Socket clientSocket = new Socket("127.0.0.1" , 1680);
    InputStream input = clientSocket.getInputStream();
    BufferedReader buffer = new BufferedReader(new InputStreamReader(input));
    PrintStream ps = new PrintStream(clientSocket.getOutputStream());
    ps.println("GET / HTTP/1.0\n\n");
    String read = "";
    int line = 0;
    while ((read = buffer.readLine()) != null) {
    System.out.println(Integer.toString(line++) + " " + read);
    }
    }
    }


    Qualche idea?
    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Prelevare dati da una porta

    Originariamente inviato da crash_tension
    Ciao a tutti! sto cercando di costruire un prg in java per riuscire ad acquisire dati che arrivano sulla porta 1680 da un server aaa.com:3234.

    Ho scritto il seguente prg, ma mi dà le seguenti eccezioni:
    Exception in thread "main" java.net.ConnectException: Connection refused: connect

    Socket clientSocket = new Socket("127.0.0.1" , 1680);
    InputStream input = clientSocket.getInputStream();
    No alt! ... Forse stai facendo un po' di confusione. La classe java.net.Socket serve per creare un "client" socket. Cioè serve per connettersi ad un host (il primo parametro del costruttore) ad una porta (il secondo parametro) su cui chiaramente ci deve essere un "server" socket in ascolto.

    Come hai fatto tu, stai cercando di connetterti sul localhost (il tuo stesso PC) sulla porta 1680 ... dalla eccezione si evince che sul tuo PC non c'è ovviamente alcun servizio in ascolto sulla porta 1680.

    Ora ... se quel aaa.com:3234 è, come hai detto, un server allora è lui ad essere in "ascolto" sulla porta 3234. Quindi usa il Socket per collegarti a quel server su quella porta!

    new Socket("aaa.com" , 3234);

    Quale sia la porta "locale" da cui "esci" dal tuo PC, lo sceglie il sistema ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie per la dritta! Ho corretto con quei dati e almeno si collega: ho inserito la stampa
    System.out.println(clientSocket.isConnected());
    per vedere se si collega e mi restituisce true. Il problema è che poi come output mi restituisce:
    0 ERROR :Closing Link: by conn1.aaa.com.2 (Ping timeout for [D])
    quindi suppongo che, per quanto hai detto, ciò è dovuto al fatto che lato server non c'è un serversocket che "parli" con il mio client (ping timeout).

    E se invece scartassi il binomio client-server, mettendomi ad ascoltare cosa arriva sulla porta locale del mio pc? In questo caso che classi potrei usare?

    grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da crash_tension
    Il problema è che poi come output mi restituisce:
    0 ERROR :Closing Link: by conn1.aaa.com.2 (Ping timeout for [D])
    quindi suppongo che, per quanto hai detto, ciò è dovuto al fatto che lato server non c'è un serversocket che "parli" con il mio client (ping timeout).
    Se la connessione ha avuto successo, è chiaro che a quell'indirizzo/porta c'è un server in ascolto.
    La questione semmai è: che servizio fornisce? È un web server? Perché la porta 3234 non mi dice nulla ... non è di qualche protocollo preciso .. almeno che io sappia.

    Tu mandi in output la richiesta GET su HTTP (a parte che non è corretta per il newline ... HTTP richiede che una linea sia terminata da CR+LF). Ma sei sicuro che dall'altra parte ci sia un server HTTP???

    Originariamente inviato da crash_tension
    E se invece scartassi il binomio client-server, mettendomi ad ascoltare cosa arriva sulla porta locale del mio pc? In questo caso che classi potrei usare?
    Se vuoi che il tuo PC sia in ascolto su una certa porta, allora c'è ServerSocket. Ma la questione è che dovresti essere tu a fornire un "servizio" e quasi sicuramente non è quello che serve a te.

    Probabilmente non ti è chiara la questione sui socket. È sempre concettualmente un client-server. Ci deve essere un socket "server" già aperto su una porta e a quel punto N client posso connettersi a quella porta. Quindi è sempre solo una questione di "chi ascolta" e "chi si connette".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ok, taglierò la testa al toro e spiego bene a cosa dovrebbe servire il prg che voglio fare: gioco ad un videogame su internet, è un mmorpg. In pratica scarichi un client con cui t colleghi ai loro server e quindi puoi giocare. Mentre giochi ti vengono mandate info riguardanti il territorio circostante. Tramite il prompt di ms-dos e il comando netstat -b -n ho visto che l'indirizzo del server a cui il gioco si collega è xxx:8802 . Sotto la colonna proto in corrispondenza di quel server c'è scritto TCP. Riporto la linea da dos:

    TCP 192.168.1.2:2889 x.x.x.x:8801 ESTABLISHED 2244
    Impossibile ottenere informazioni sulla proprietà
    TCP 192.168.1.2:2890 x.x.x.y:8802 ESTABLISHED 2244
    Impossibile ottenere informazioni sulla proprietà

    2244 è il pid del processo del gioco.
    Io vorrei prendere le informazioni che mi arrivano e capire come son fatte. Tutto qui...

    Grazie per la disponibilità!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da crash_tension
    gioco ad un videogame su internet, è un mmorpg. In pratica scarichi un client con cui t colleghi ai loro server e quindi puoi giocare.
    .
    Io vorrei prendere le informazioni che mi arrivano e capire come son fatte. Tutto qui...
    Dovresti conoscere perfettamente il protocollo di comunicazione, cioè le caratteristiche e il formato dettagliato dei dati che client e server si scambiano.

    Quasi sicuramente la azienda che ha realizzato il gioco non ha di certo reso pubbliche le specifiche del protocollo (è "proprietario"). E fare del "reverse-engineering" (in qualunque modo ... con sniffer di rete o altro) non credo affatto che sia "legale". E quindi mi fermo qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    ok, quindi dici che non sapendo cosa si scambiano mi è impossibile interpretare i dati...ma non posso sapere cosa mi arriva sulla porta del mio pc??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.