Newsgroup: it.comp.lang.c++
Titolo: socket attraverso router

Ho fatto un piccolo programma in C++ che tramite
le socket permette il talk tra 2 PC della stessa LAN.
Il programma funziona anche su Internet, a patto che
i 2 PC siano connessi direttamente tramite modem
(basta impostare sul programma gli IP dinamici
assegnati dal provider).
Non riesco a fare nulla quando invece si usano dei
PC connessi a Internet tramite router, perche`
l'indirizzo dinamico assegnato del provider e` del
router e non del PC interno alla LAN.
Nessuno ha idee su come fare?
Ciao e grazie.
Miche.

 router e non del PC interno alla LAN.
O usi un DNS dinamico tipo DNS2GO per poter trovare
gli IP dei due PC in rete, oppure ricorri all'aiuto di un
terzo computer (con IP fisso o comunque rintracciabile con
facilità) che in qualche modo comunichi a ciascuno l'IP
dell'altro.
Oppure fai un portscan su tutto il blocco di IP dinamici
del tuo provider... ihihih 8->

 router e non del PC interno alla LAN.
Guarda che qualunque connessione ad internet è tramite router. Magari il
modem si trova fra il PC e il router invece che fra un router e un'altro
router, ma questo è ininfluente.
Se la tua connessione è tramite un router che funziona SOLO da router
non dovresti avere problemi. I problemi non te li da mai un router ma
semmai un proxi, un firewall o un sistema di NAT. Ci sono router che
fanno anche queste cose (oltre il routing). E credo che sia di questo
che stai parlando.
Se c'è un firewall l'unica soluzione è cambiare la configurazione del
firewall e aprire i canali che ti interessano.
Se c'e' un proxy o un NAT il problema lo trovi solo sul lato del sistema
che sta in listen, non sul lato di quello che fa la chiamata. E la
soluzione sta nel modificare le configurazioni del NAT e/o del proxy in
maniera che sappiano quale è la porta che usi e ridirezionino chiamate a
quella porta verso il tuo indirizzo un rete privata.
Nel caso di un proxy è possibile che tu debba installare un piccolo SW
nel sistema ricevente ed è anche possibile che tu debba mettere un file
di configurazione nella directory del tuo eseguibile (ma questo dipende
da come è fatto il proxy).
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

 wrote in message
news:N2rS7.2126$7%3.4...@twister1.libero.it...

Guarda che l'IP di un PC lo puoi sapre facilmente. Non credo che il suo
problema fosse quello ma piuttosto, come ho detto, la presenza di un NAT
o di un PROXY e il fatto che i due PC non hanno un indirizzo IP pubblico
(e quindi conoscere il loro IP privato non serve a nulla dato che
certamente i pacchetti con destinazione in una subnet non pubblica non
vengono routati attraverso internet).


 quella porta verso il tuo indirizzo un rete privata.
Non sono un espertissimo di router.
So solo che il router fa da gateway e ogni PC della LAN usa il router
ISDN come default gateway.
Io ho installato uno di quei router, ma sicuramente non ho installato un
NAT, tantomeno un proxy.
Spero di essermi spiegato bene.
Ciao, Miche.

 Spero di essermi spiegato bene.
Se stai usando solo la funzionalità di router allora tutti i PC che si
collegano a internet hanno un IP pubblico (ciascuno ne ha uno). Quello
che invece probabilmente stai facendo è collegarti con un router che ha
anche la funzione di NAT incorporata. Quindi non fo solo da router ma
anche da NAT. In questo caso l'IP pubblico è uno solo (quello del
router) mentre i tuoi PC hanno IP privato (di solito nella rete
192.168.x.y). I tal caso la "listen" la deve fare il NAT (che sta nel
router) e non il PC. Perchè questo accada devi modificare i settaggi del
NAT (router) in modo che esegua la listen sulla porta pubblica e, in
caso di chiamata, esegua il forward della stessa sul tuo PC.
In generale quando hai un NAT o Proxy tutto quello che sta dietro al NAT
o al Proxy può funzionare solo da "origine" di una connessione e non
come "destinazione". Se hai un server (ovvero un PC che "riceve"
chiamate) devi configurare il Proxy e/o NAT di conseguenza (o meglio,
spostare ul server a monte del NAT/Proxy).



OK.
Secondo quello che dici tu, configurare il NAT in modo che faccia un forward
al mio PC per le chiamate che arrivano alla porta xxx vuol dire spostare il
mio
PC a monte del NAT?
E quindi se il mio PC salta il NAT vuol dire che si presenta su Internet con
un suo
IP?
Ma io di IP ne ho uno solo (quello dinamicamente associatomi dal provider).
Quindi dove e` che ho capito male?
Ciao e grazie.
Miche.

 Quindi dove e` che ho capito male?
Nel tuo caso hai due opzioni: o cambi il modo con il quale ti colleghi
al provider, o vai a cambiare la configurazione del NAT sul tuo
integrato router/modem/NAT in modo che la listen sull'IP pubblico la
faccia lui.


 PC a monte del NAT?
[...]
No, vuol dire andare nella configurazione del tuo router/firewall e
modificare la tabella di port mapping, in modo da mappare le porte di tuo
interesse sul PC che intendi usare. Una rete locale sotto NAT è vista da
internet come un singolo computer (un singolo indirizzo IP), quindi se vuoi
effettuare un listen su un particolare computer, devi mappare la porta
desiderata su quel computer, in modo che le richieste di connessione
provenienti dall'esterno (solo su quella porta!) vengano inoltrate a quel PC
specifico.
Ciao,
Marco

Non e' che vi cercate un newsgroup piu' consono agli argomenti di cui
state discutendo? Qui siete OT.
Ciao,
Nicola