2012-10-16 12 views
5

Se un programma è in esecuzione su una macchina Linux, esiste un modo per tale programma di cercare le porte consentite attraverso il firewall? per esempio, se un programmatore vuole creare un sistema di chat, ma il programma deve sapere quali porte non vengono rifiutate l'accesso alle connessioni in entrata dal firewall di un utente, c'è un modo per verificarlo nel tuo codice? Un programma potrebbe non riuscire a collegare un socket a una porta anche se il firewall sta bloccando quella stessa porta dalle connessioni in entrata. C'è un modo per controllare le porte del firewall aperte?Accesso alla porta TCP e C++

Nota a margine: Questo è puramente per scopi didattici e privo di cattive intenzioni, per essere chiari Sto scrivendo un sistema di chat, e durante i test, sono stato in grado di connettersi desktop-> computer portatile fino a quando ho aperto manualmente una porta via permettendogli attraverso il mio firewall. Questo mi è sembrato un po 'diverso, e diversamente da qualcosa che il codice di un programmatore dovrebbe richiedere a un utente. Per non parlare del fatto che non voglio lasciare le poche persone che usano questo codice a rischio (se lasciare una porta permanentemente aperta lo fa). Quindi sembra che sarei più adatto a trovare un modo per utilizzare le porte che sono già aperte alle connessioni TCP in arrivo.

sidesidenote: tutti i clienti sono in esecuzione fedora

+1

Controlla [UPnP] (http://en.wikipedia.org/wiki/Universal_Plug_and_Play). –

+1

Scegli una porta con un numero elevato e esegui l'avvicinamento alla porta in un altro modo. I firewall non devono bloccare roba superiore a 32000. Un metodo basato su UDP per il binding a una porta comune (ad esempio 1900) utilizzato da altri servizi consente di eseguire il bootstrap di una porta nota probabilmente aperta per fornire la scoperta della porta dinamica utilizzata per il TCP. –

+1

Non penso che questo possa essere fatto in modo affidabile solo sul server stesso. Senza utilizzare alcun tipo di proxy remoto, il server non è in grado di testare la connessione attraverso il firewall perimetrale. – Barmar

risposta

4

Sei incappato sul secondo più grande problema che disciplina la creazione di nuove applicazioni Internet al giorno d'oggi. Il primo, naturalmente, è il NAT, che è un tema fortemente correlato (e speriamo di andare via alla fine a causa di IPv6).

E non c'è una risposta facile. Una buona risposta è UPnP, ma non è una risposta facile, e in nessun caso universale. La mia rete non lo esegue.

Un'altra risposta è in qualche modo eseguire il tunneling di tutto ciò che fai su https (o http se devi). Ma questo è un enorme dolore per qualcosa come un'applicazione di chat.