Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Sockets e Porte Router
Forum - C/C++ - Sockets e Porte Router

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 16:47
Martedì, 16/08/2011
Mi ritrovo a dovervi di nuovo 'infastidire', poichè i miei semplici codici server.c e client.c si ritrovano ad affrontare un problema di fondo : l'apertura di una porta (impostandola su LISTEN) e l'effettiva apertura della stessa porta sul Router del PC Server.


Ho fatto numerose prove, scoprendo che il mio router non blocca le connessioni ad una qualsiasi porta impostata su listen. Con l'aiuto di un amico, invece, ho scoperto che il SUO router scherma l'apertura di porte impedendomi di connettermi. Abbiamo manualmente sbloccato la porta (in questo caso abbiamo usato la 1750) dalle impostazioni del suo router e la connessione è avvenuta.

La mia domanda è quindi la seguente : c'è qualcosa che io possa fare ? Mi tocca inserire un adv del tipo : "Assicuratevi che la porta del router sia aperta !" :rofl: o posso agire sul lato 'programmazione' ?

Grosso dilemma :S (Ah, sono su LINUX !)

Grazie mille ! :D :k:

Ultima modifica effettuata da Danyez il 16/08/2011 alle 16:50
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:22
Martedì, 16/08/2011
Se un'applicativo server si mette in ascolto su una porta che non e' aperta/reindirizzata dal router, non potrai connetterti (ovviamente, ti immagini che problema per la sicurezza se si potesse aggirare?).

L'alternativa e' far eseguire il client alla persona con il router e avere il server in una locazione centrale. Quando una richiesta di connessione parte in questa maniera la porta in uscita viene automaticamente aperta (solitamente).


Il mio blog: https://piero.dev
PM Quote
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 18:20
Martedì, 16/08/2011
Testo quotato

Postato originariamente da pierotofy:
L'alternativa e' far eseguire il client alla persona con il router e avere il server in una locazione centrale.



Sapevo che avrei ricevuto una risposta del genere ma allo stesso tempo speravo di non riceverla.
Beh, peccato .. :) Credo comunque che l'idea del server da intermezzo sia abbastanza lontana dallo scopo principale del programma, quindi vada per l'adv :P


Grazie mille ;)

Edit per una piccola domanda :
C'è modo di riconoscere (sempre in C) se la porta offre realmente un collegamento 'verso l'esterno' (cioè se è interfacciata dal router ?).

Ultima modifica effettuata da Danyez il 16/08/2011 alle 18:29
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:29
Martedì, 16/08/2011
Non ho capito la domanda... spiegati meglio.


Il mio blog: https://piero.dev
PM Quote
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 13:40
Mercoledì, 17/08/2011
Intendo :

C'è la possibilità di capire, in C, se quella porta è interfacciata dal router ? Perchè nonostante  il mio amico avesse la porta (in questo caso 1745) chiusa dal Router, l'applicativo non restituiva nessun errore e anzi impostava senza alcun problema la porta in listening (netstat -a).

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:27
Mercoledì, 17/08/2011
Testo quotato

Postato originariamente da Danyez:

Intendo :

C'è la possibilità di capire, in C, se quella porta è interfacciata dal router ? Perchè nonostante  il mio amico avesse la porta (in questo caso 1745) chiusa dal Router, l'applicativo non restituiva nessun errore e anzi impostava senza alcun problema la porta in listening (netstat -a).



Il programma non può restituire nessun errore perché non sa nulla del router.
Per farti capire, il programma attende che "da un tubo arrivi qualcosa" ma non sa che dopo c'è un "rubinetto chiuso" che non farà mai arrivare nulla al tubo.

Esiste la possibilità di interfacciarsi al router (con qualsiasi linguaggio) con uno dei protocolli previsti dal tool di amministrazione di ogni specifico router per aprire/chiudere le porte, sempre a patto di avere le credenziali adeguate (utente amministratore e password del router stesso).

E dovresti immaginare il perché ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Danyez (Normal User)
Newbie


Messaggi: 15
Iscritto: 28/01/2010

Segnala al moderatore
Postato alle 18:58
Mercoledì, 17/08/2011
Ovviamente per questioni di sicurezza. :P

Testo quotato

Postato originariamente da nessuno:

Per farti capire, il programma attende che "da un tubo arrivi qualcosa" ma non sa che dopo c'è un "rubinetto chiuso" che non farà mai arrivare nulla al tubo.



Difatti chiedevo se esistesse un metodo per 'entrare nel tubo' tramite programmazione e controllare se il rubinetto fosse chiuso o aperto :P


Grazie per l'aiuto tempestivo, anche se mi sono state date le risposte che in assoluto non volevo ricevere. xD

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 3:11
Venerdì, 19/08/2011
se il router è compatibile con tale tecnologia, e la relativa opzione si trova abilitata nel pannello di amministrazione, puoi aprire le porte usando il protocollo Universal Plug n Play.

Per scoprire se una porta è filtrata o meno ti serve un computer che provi a fare la connessione a tale porta, dall'esterno, e ti restituisca un messaggio di errore o di successo.

Ad esempio puoi mettere tale codice su un server web che, interrogando uno script (classica test_della_porta.php ad esempio), faccia partire il programma di test (tramite la chiamata system() del php) e in base al risultato dell'operazione mandi in output un echo("Ok bro!") oppure echo("Error, you suck").

In questo modo, dal programma, ti basta fare un get tramite http al server web di test, il quale chiamerà un programma che farà una connessione al tuo programma (prendendo l'ip dallo user agent http) e che stampi nell'html il risultato dell'operazione.

In base al contenuto della pagina html ricevuta tramite il get, saprai se la porta è aperta o no, e potrai decidere se dare un messaggio all'utente.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 3:25
Venerdì, 19/08/2011
E tieni in considerazione che non tutti gli hosting ti permetteranno di aprire una connessione verso una determinata porta... alle volte e' necessario fare richiesta per abilitare la porta sul firewall dell'hosting.


Il mio blog: https://piero.dev
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo