Newsgroup: it.comp.programmare.win32
Titolo: [Lungo] Gateway per le porte di localhost... :-)

Salve.
Mi servirebbe una mano per la fase di start-up di un progetto che ho in
mente, poi in genere me la cavo da solo. :-) Dovrei creare un programma
che faccia da, subject docet, "gateway per le porte di localhost".
Non c'avrete capito niente, immagino. ;-) Mi spiego.
Mi servirebbe un programma che esegua queste operazioni:
a) si metta in ascolto su una o più porte (per es. sulla 80),
intercettando non solo le richieste di connessione verso quelle porte,
ma anche le richieste, da parte di altri programmi, di mettersi in
ascolto su tali porte [cioè, dopo averlo avviato e bindato alla porta
80, il mio programma dovrebbe intercettare anche la richiesta di un
eventuale web server che vuole mettersi in ascolto su tale porta]
b) gestisca i due diversi tipi di richieste in modo trasparente
all'applicazione richiedente. E cioè:
  b1) se è una richiesta di messa in ascolto su una porta (es. web
server di prima), deve dire al server: "ok, ti ho bindato alla porta
80", ma in realtà deve bindare il web server su un'altra porta (es.
10080)
  b2) se è una richiesta di connessione (es. client che vuole
connettersi al web server), deve rigirare la richiesta alla porta reale
(continuando l'esempio, la 10080), prendere l'output e rigirarlo al
client, come se nulla fosse anormale.
Il tutto dev'essere possibile, sia chiaro, su una singola macchina.
Inoltre, molto importante, non c'è rischio che le applicazioni che
chiedano di bindarsi su una certa porta siano più d'una. (cioè non è
possibile che arrivino due richieste di bind sulla stessa porta; be', al
limite, le richieste successive le si rifiutano com'è normale che sia)
E' possibile far tutto ciò? Immagino di sì, dal momento che la gestione
del NATting dovrebbe funzionare in un modo simile. Solo che qui siamo su
un'unica macchina, abbiamo a disposizione solo l'indirizzo di loopback.
L'ambiente è Win2k/WinXP.
Non vorrei programmare in C/C++/Visual C++, perché ho sempre ritenuto
troppo macchinoso gestire il tutto con le API o le MFC. Preferirei
sviluppare il tutto in C# (lo preferisco a Java). Credo sia l'unico
programma adatto alla programmazione nei meandri di Windows, dopo VC++.
Altrimenti quali altri linguaggi potrei utilizzare?
Perl offre molto per il network, ma non è molto legato a Win.
Purtroppo in ambiente Windows non vedo molte alternative valide...
Sarei disposto anche ad imparare Python (che comunque ho in programma di
imparare in un futuro prossimo, l'ho già installato), se mi assicurate
che è possibile fare quel che ho detto quissù col pitone. :-)
Grazie mille per qualsiasi suggerimento!
Maurizio

 all'applicazione richiedente. E cioè:
Una delle due non mi sembra sia una richiesta...
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Una delle due non mi sembra sia una richiesta...
Be', nell'ottica del sistema operativo è una richiesta di binding. Io
dovrei sostituirmi al sistema operativo. Forse dovrei scrivere un device
driver?
In alternativa, non potrei simulare un altro indirizzo ip sulla stessa
macchina? Ad esempio, è possibile, sulla stessa macchina, far comunicare
un programma che invii pacchetti con ip 127.0.0.1 con un altro che li
invii dall'ip 10.0.0.1 (altro indirizzo privato) ? Mah...
Il problema è che non saprei da dove cominciare a cercare...
Grazie lo stesso!
M.

 Be', nell'ottica del sistema operativo č una richiesta di binding.
Se cambi "ottica" il discorso cambia, ovviamente. A livello di applicazione,
non arriva una "richiesta" di alcun tipo (almeno credo).


Potresti provare NETCAT per fare ciò che ti serve.
Ciao

 Potresti provare NETCAT per fare ciň che ti serve.
Purtroppo, almeno da quel che ricordo, netcat NON fa quello che chiedevo
io, e cioč mettersi in ascolto su determinate porte ed intercettare «non
solo le richieste di connessione verso quelle porte, ma anche le
richieste, da parte di altri programmi, di mettersi in ascolto su tali
porte». Dubito che nella versione per Windows abbiano aggiunto una tale
miglioria, senza fare altrettanto nella versione per Linux.
In pratica, vorrei creare un programma che sia padrone non solo della
porta in sé, ma anche della relativa gestione. Gestione che, di norma, č
delegata al sistema operativo.
Grazie, comunque!
M.