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

    Realizzare http tunnel

    Ciao a tutti,
    Ho realizzato un semplice programma in C per scambiare file tramite la rete.
    C'è un client che si connette ad un server con ip noto, dopo ciò inizia il trasferimento di comandi e dei dati.
    Il client se dietro un NAT funziona perfettamente dato che è LUI a connettersi al server, il problema sorge se è dietro ad un firewall.
    In questo caso ho provato a connettermi tramite la porta 80 al server pensando che il firewall lasciasse passare il traffico sulla 80 ma non funziona...
    Però ho scoperto una cosa: questo client che ho realizzato prima di connettersi al server scarica una pagina web (cioè usa il protocollo http) e ho scoperto che, pur essendo dietro un firewall, riesce a scaricare la pagina web!
    Pertanto credo che il firewall lascia passare il traffico sulla porta 80 ma effettua molto probabilmente uno "Stateful Inspection" analizzando appunto i pacchetti in uscita e bloccando quelli che NON sono pacchetti HTTP.
    Per bypassare questo firewall ho pensato ad un HTTP Tunnel che mi permetta di "far credere" al firewall che i pacchetti scambiati siano richieste http ...cioè far credere che quei pacchetti li sta inviando un browser!
    Adesso mi chiedo: come realizzo praticamente questo tunnel? In pratica devo far credere al firewall che sto facendo richieste http e visualizzando pagine web... seguire il protocollo HTTP (cioè connessione, invio comando get, attendo risposta server, chiudo) è sufficiente?

    naturalmente la risposta da parte del server sarà sempre la stessa ma con l'aggiunta del classico header di sever web...

    Chiedo vostri consigli

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: Realizzare http tunnel

    Originariamente inviato da xes_user
    In questo caso ho provato a connettermi tramite la porta 80 al server pensando che il firewall lasciasse passare il traffico sulla 80 ma non funziona...
    Ma nel server era il tuo programma ad "ascoltare" sulla porta 80, o il server web?

    Però ho scoperto una cosa: questo client che ho realizzato prima di connettersi al server scarica una pagina web (cioè usa il protocollo http) e ho scoperto che, pur essendo dietro un firewall, riesce a scaricare la pagina web!
    Non ho capito molto ...

    Prima di continuare, spiega meglio la situazione ... ti faccio qualche domanda ...

    1) tu hai un "tuo programma client" su PC e un "tuo programma server" installato nel server per lo scambio di file?

    2) il tuo programma server e' installato in un computer server in cui e' gia' installato un server web funzionante?


    P.S. Devi indicare il linguaggio e leggere il regolamento ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il linguaggio che ho usato è C.
    Mi spiego meglio:
    Ho un programma server e un client. Il server accetta connessioni su una certa porta.
    Il client si connette al server e attende che gli venga comunicato il nome del file da trasferire (da client a server).
    Dimenticate il fatto del server web che confonde le idee...
    Diciamo che il server si trova nel PC-A (mio pc) e il client nel PC-B. Il PC-A è connesso a internet e dispone di ip pubblico.
    Ora vi illustro diversi casi:
    1. PC-B nella stessa rete locale di PC-A: tutto funziona correttamente
    2. PC-B remoto dietro un router NAT: funziona correttamente
    3. PC-B remoto dietro un NAT e firewall: qui sorge il problema, praticamente non ricevo alcuna connessione su PC-A.
    Per fare una prova quindi ho provato a usare la porta 80 e la situazione non è cambiata.
    Così ho scritto un programmino che scarica una pagina web e facendolo connettere a un server web (esempio: google.it) sempre dal PC-B in configurazione (3) ho notato che riesce a scaricare la pagina, quindi passa il firewall!

    Molto probabilmente l'unico modo per connettersi al "mondo esterno" stando dietro questo firewall è usare il protocollo HTTP...sicuramente il firewall usa un controllo di tipo "Stateful Inspection" e blocca i pacchetti in uscita perchè, pur usando la porta 80, i pacchetti non vengono riconosciuto come pacchetti http e quindi bloccati.
    Credo sia questo il problema! Comunque così dovrebbe essere più chiaro...
    L'unica idea che mi viene in mente per bypassare il firewall e far funzionare tutto è quella del tunnel HTTP...ecco volevo sapere in pratica come realizzare questo meccanismo.
    Cioè...dovrei praticamente far "sembrare" la comunicazione col mio server come una comunicazione con protocollo HTTP?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da xes_user
    ...
    Molto probabilmente l'unico modo per connettersi al "mondo esterno" stando dietro questo firewall è usare il protocollo HTTP...
    Mi pare sia scontato che non possiate intervenire sul firewall, per autorizzare la porta che utilizzate in uscita ...

    L'unica idea che mi viene in mente per bypassare il firewall e far funzionare tutto è quella del tunnel HTTP...ecco volevo sapere in pratica come realizzare questo meccanismo.
    Cioè...dovrei praticamente far "sembrare" la comunicazione col mio server come una comunicazione con protocollo HTTP?
    Beh ... sì. Quindi devi creare (praticamente) un piccolo "web server" che risponda fornendo il file come se fosse, appunto, scaricato dal web (ovviamente rispettando il protocollo HTTP).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ok, farò qualche prova...soltanto che c'è un problema: cercavo un firewall software che effettuasse proprio questo sistema di controllo sui pacchetti per poter fare delle prove in locale!
    Ho trovato dei firewall ma alcuni bloccano tutti pacchetti e altri fanno passare tutto anche se non sono richieste http...insomma non si comportano come il firewall che devo bypassare.
    Avete qualche consiglio?

    Quindi, devo realizzare praticamente un mini web server (lato server) e lato client devo realizzare un client http in poche parole.
    Soltanto che c'è un problema: il protocollo HTTP prevede che, dopo il trasferimento della pagina, la connessione venga chiusa dal client. Quindi io dovrei chiuderla dopo ogni trasferimento (di file, o di comando)?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.