PDA

View Full Version : [JAVA] Socket con ip pubblici


Eddie96
24-02-2015, 18:42
Buonasera,
ho un server e un client che comunicano tramite socket tcp. La connessione funziona fin quando opero sulla stessa macchina (localhost) o in rete locale. Non funziona, invece, quando provo a stabilire una connessione tramite internet, utilizzando gli ip pubblici: mando in esecuzione sul mio PC il server, mentre il client viene mandato in esecuzione su un altro PC, che prova a stabilire una connessione con il server attraverso il mio IP (pubblico). Ho già disattivato il firewall del router. Ho pensato allora che fosse un problema di porte non aperte sul router. Ho tentato con un port forwarding, ma niente: le porte risultano sempre chiuse, anche attivando la DMZ. Dove sbaglio?
Ho Fastweb, il router è un Technicolor TG788vn v2.
Grazie in anticipo

lorenzo001
24-02-2015, 18:45
Hai attivato le porte sul router per il server o no?

Eddie96
24-02-2015, 18:48
Le ho attivate, però quando vado a fare il test, risultano sempre chiuse...

lorenzo001
24-02-2015, 18:52
Così non ti si può aiutare ... devi dare maggiori informazioni.

Quale ip privato ha il server? Come hai aperto l'ip sul router?

Quale ip pubblico e porta utilizzi?

Eddie96
24-02-2015, 18:56
Il mio ip privato è 192.168.1.67. Sul router ho provato ad aprire la porta 25568 e dopo la porta 4601.
Il mio ip pubblico è del tipo 93.5x.xx.xx
Vorrei che il client si connetta al server (in esecuzione sul mio pc), stabilisca la connessione utilizzando il mio ip pubblico.

Ho provato ad aprire le porte attraverso l'opzione (del router) Condivisione giochi e applicazioni (ora non so se conosci il mio router).

lorenzo001
24-02-2015, 18:59
Beh, non so cosa dirti ... deve funzionare ...

Su quale IP ascolta il software server?

Eddie96
24-02-2015, 19:04
Usando la classe ServerSocket, il server rimane in ascolto sulla porta. Che io ho provato ad aprire (la 25568). Il problema, secondo me, è il router, dato che, effettivamente, la porta non la apre.

lorenzo001
24-02-2015, 19:06
Mostra una schermata di quello che hai fatto sul router

Eddie96
24-02-2015, 19:35
http://i60.tinypic.com/54vqmv.png

lorenzo001
24-02-2015, 19:49
Secondo me

1) UDP non ti serve

2) Registro deve essere Acceso

3) Protocollo e porta di attivazione Nessuno

Eddie96
24-02-2015, 19:52
Niente, sempre chiuso.

Comunque, per vedere se le porte sono aperte, utilizzo il servizio di questo sito http://www.yougetsignal.com/tools/open-ports/

lorenzo001
24-02-2015, 20:44
Quel servizio non ti dice se la porta del router è aperta. Nulla te lo potrebbe dire se dall'altra parte il server non risponde.

Quindi, probabilmente il server non è impostato correttamente.

Eddie96
24-02-2015, 20:49
Quando faccio il test, lascio il server (scritto in java) in esecuzione. Non basta?

lorenzo001
24-02-2015, 20:54
Sì, dovrebbe. Ma se il server non funziona bene o non è configurato correttamente e non risponde, la porta apparirà chiusa al servizio che stai usando.

Sei sicuro che il server lavori correttamente?

Usi Windows? Puoi controllare il risultato di NETSTAT -an ?

Eddie96
24-02-2015, 21:07
Comunque il codice è molto semplice:


try {
ServerSocket receiveSocket = new ServerSocket(25568);
System.out.println("SERVER: Running...");

Socket client = receiveSocket.accept();
} catch (IOException ex)
{
ex.printStackTrace();
}

lorenzo001
24-02-2015, 21:35
Non farlo ascoltare su 0.0.0.0 ma sull'IP privato che hai impostato sul router (per intenderci il corrispondente di vincenzo-desktop)

Eddie96
24-02-2015, 21:39
Come faccio a fare una cosa del genere?

lorenzo001
24-02-2015, 21:45
Devi indicare l'ip in ServerSocket

Vedi la documentazione del metodo

Eddie96
24-02-2015, 21:57
Fatto, la netstat ora mi da l'indirizzo privato. Ma il test da sempre lo stesso risultato :muro:

lorenzo001
24-02-2015, 23:07
Hai fatto anche quelle modifiche nel router?

Eddie96
25-02-2015, 15:45
Sì, niente da fare. Sul forum della fastweb dicono che ciò che vorrei fare, non è possibile, perché ho un IP nattato e non pubblico :muro:

lorenzo001
26-02-2015, 12:35
Sì, niente da fare. Sul forum della fastweb dicono che ciò che vorrei fare, non è possibile, perché ho un IP nattato e non pubblico :muro:

Ah ... ma tu NON hai un IP pubblico? Potevi dirlo prima ...

Eddie96
26-02-2015, 14:51
Scusa, solo ora ci ho pensato :doh:

[Kendall]
26-02-2015, 15:57
Se hai un IP dinamico puoi impiegare un servizio come DynDNS (o similare), e stabilire la connessione tramite nome dns anzichè tramite indirizzo ip.

Eddie96
26-02-2015, 17:55
Sto provando DynDNS, ma visitando un po' il sito ho notato questa precisazione:

Il vostro provider deve utilizzare indirizzo IP pubblici e non locali. Se l’indirizzo non è pubblico, non c’è modo di raggiungerlo direttamente da Internet.
Ad esempio Fastweb fornisce ai propri clienti indirizzi IP locali e quindi generalmente i dispositivi non possono essere raggiunti dall’esterno della rete Fastweb.

Quindi? Cosa potrei fare?
Tra le impostazioni dell'hag, ho notato questa:

Servizio DNS dinamico
Il DNS dinamico può essere utilizzato per far puntare l'indirizzo IP pubblico (o WAN) assegnato dal Provider di servizi Internet (generalmente un indirizzo IP dinamico) a un nome di host fisso (es. host.a-dominio.com). Questo consente ai server che si trovano nella rete locale (configurati tramite Condivisione giochi e applicazioni) di essere accessibili utilizzando un alias invece dell'indirizzo IP assegnato dal Provider di servizi Internet.

Inizio ad essere un po' confuso... :confused:

lishi
26-02-2015, 18:53
Sto provando DynDNS, ma visitando un po' il sito ho notato questa precisazione:



Quindi? Cosa potrei fare?
Tra le impostazioni dell'hag, ho notato questa:



Inizio ad essere un po' confuso... :confused:

Se fastweb non ti da gli indirizzi pubblici c'è poco da fare.

Puoi però (se il client ha un ip pubblico) mettere li il server.
Comprare da fastweb un indirizzo IP pubblico.

Eddie96
26-02-2015, 19:59
Avrei bisogno di un chiarimento. L'IP che appare quando apro il sito http://www.whatismyip.com/ è un IP pubblico, ma dinamico. Per realizzare quello che ho in mente, dovrei averne uno statico. Giusto?

[Kendall]
26-02-2015, 20:08
Servizio DNS dinamico
Il DNS dinamico può essere utilizzato per far puntare l'indirizzo IP pubblico (o WAN) assegnato dal Provider di servizi Internet (generalmente un indirizzo IP dinamico) a un nome di host fisso (es. host.a-dominio.com). Questo consente ai server che si trovano nella rete locale (configurati tramite Condivisione giochi e applicazioni) di essere accessibili utilizzando un alias invece dell'indirizzo IP assegnato dal Provider di servizi Internet.

Inizio ad essere un po' confuso... :confused:

Ma l'hag in questione è quello di fastweb no?
Perché il DNS dinamico è proprio quello che serve a te.
In quella pagina dell'hag immagino potrai impostare alcuni parametri per agganciarti a qualche servizio di dyndns (come dyndns.com, no-ip.com, dnsdynamic.com, ecc..). Di solito i servizi supportati variano in base al router/hag in questione.

C'è da capire a questo punto se la tua linea fastweb ha un ip dinamico.
Prova a chiamarli e chiedere loro delucidazioni.

Eddie96
26-02-2015, 20:26
;42194230']Ma l'hag in questione è quello di fastweb no?
Perché il DNS dinamico è proprio quello che serve a te.
In quella pagina dell'hag immagino potrai impostare alcuni parametri per agganciarti a qualche servizio di dyndns (come dyndns.com, no-ip.com, dnsdynamic.com, ecc..). Di solito i servizi supportati variano in base al router/hag in questione.

C'è da capire a questo punto se la tua linea fastweb ha un ip dinamico.
Prova a chiamarli e chiedere loro delucidazioni.

Se non è un IP statico, sarà sicuramente dinamico, no? Dato che è del tipo 93.xx.xx.xx e varia ad ogni accesso ad internet.

[Kendall]
26-02-2015, 20:28
Avrei bisogno di un chiarimento. L'IP che appare quando apro il sito http://www.whatismyip.com/ è un IP pubblico, ma dinamico. Per realizzare quello che ho in mente, dovrei averne uno statico. Giusto?

Se hai un indirizzo pubblico statico, puoi fare un collegamento diretto client-server come era stato spiegato nella pagina addietro. Il tuo server quindi ascolta dalla porta x, e il tuo client stabilisce una connessione verso l'indirizzo ip statico, alla porta x data.
Il vantaggio di questo approccio è che essendo statico l'indirizzo non cambia mai, quindi puoi sempre fare riferimento allo stesso medesimo indirizzo ip pubblico (proprio perché non cambia mai).

Se invece l'indirizzo pubblico è dinamico, andrà a variare in continuazione, quindi non puoi sfruttare sempre lo stesso indirizzo ip per far connettere il tuo client al tuo server.
Puoi raggirare il tutto tramite i suddetti servizi di dynamic DNS.
Come funzionano questi servizi? In questa maniera:

Registri presso uno di questi servizi un tuo nome DNS. Ad esempio pincopallino.no-ip.org
Se il tuo router/hag supporta tale servizio nativamente nel suo firmware, immetti le credenziali del tuo account direttamente lì. Altrimenti installi l'applicativo del servizio sul tuo server.
Il servizio, o l'applicativo desktop funzionano andando a fare un check periodico sul tuo attuale indirizzo pubblico e lo "sparano" ai server del servizio di dynamic DNS in questione che potrà quindi legarlo al tuo nome DNS.
Succederà quindi che ora il tuo nome DNS pincopallino.org risolverà sempre al tuo attuale indirizzo ip pubblico, e quindi al tuo server se hai configurato correttamente le porte.


Quindi, in questo caso, quando tu crei il tuo client socket non andrai più a specificare l'indirizzo ip pubblico (es° 95.128.89.5), ma gli darai direttamente il tuo nome DNS (pincopallino.no-ip.org).
Il socket, quando tenterà di stabilire la connessione, ed avendo un nome DNS e non un indirizzo IP, andrà a chiedere ai server DNS (che sono impostati nel router/hag, o anche sul tuo pc se gli hai impostati manualmente) di risolvere quel nome, il server DNS troverà che al nome pincopallino.no-ip.org è associato l'indirizzo ip pubblico 95.128.95.5, e stabilità la connessione (se dall'altra parte c'è un server ad ascoltare).

Scusa se sono stato un po' troppo prolisso, spero di non averti fatto più confusione che altro.

Eddie96
26-02-2015, 20:40
Anzi, sei stato chiarissimo. Grazie! :D

Eddie96
26-02-2015, 21:22
Leggendo in giro e guardando bene le impostazioni del mio router, ho capito che in realtà nemmeno con il DNS riuscirò a risolvere. Infatti tra le impostazioni del router è presente un IP diverso (del tipo 100.xx.xx.xx) dall'IP pubblico visibile sul sito whatismyip.com (del tipo 93.xx.xx.xx). Il primo IP è quello associato al mio router collegato alla "rete interna e privata" di Fastweb, che mi permette di collegarmi ad internet, tramite il secondo IP. Quindi, in poche parole, dall'esterno è "impossibile" raggiungere il mio computer dall'esterno, dunque l'unica alternativa è l'indirizzo IP pubblico e statico :boh:

lorenzo001
26-02-2015, 22:43
Secondo me c'è un po' di confusione ...

Una cosa è l'IP pubblico/privato e un'altra se è statico/dinamico.

Puoi averne uno pubblico e statico/dinamico o uno privato e statico/dinamico.

Il presupposto per fare quello che vuoi è che sia "pubblico". E per quanto riguarda fastweb, se non lo richiedi esplicitamente, ne hai solo uno privato.
Questo - a prescindere dallo statico/dinamico - non ti permette di fare quello che vuoi.

Se ti viene concesso l'IP pubblico (e solo in questo caso) allora puoi utilizzare un servizio come no-ip e l'opzione apposita del router di fastweb in tuo possesso per registrare automaticamente i nomi host DNS che vuoi al tuo IP, anche se questo dovesse cambiare.

Anch'io utilizzo fastweb e il tuo stesso router, ho l'ip pubblico e tutto funziona come ti ho detto.

Eddie96
27-02-2015, 14:14
Era quello che volevo dire nel messaggio precedente. L'IP pubblico è a pagamento?