Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/04/2015, à 16:11

winner

TCP/IP redirection de port

Bonjour a tous ;

j'ai un projet de fin d'année en réseaux qui consiste a écrire un programme en c d'un multiplexeur de port je m'explique

j'ai accès à une machine dont seul le port 80 est accessible(tous les autres sont bloqués) ,je souhaitez à la fois avoir un serveur
WEB (protocole HTTP) sur cette machine ainsi qu’un serveur IRC. La manière normale de faire est de lancer un serveur pour chacun de ces services, chacun sur un port différent, mais ce n’est pas possible dans ce cas. il me daut donc une solution, cette solution est d’avoir chacun de
ces programmes qui écoutent localement sur un port différent et un programme qui écoute sur
le port 80 et redirige les paquets en fonction de leur type vers chacun des serveurs localement .
Le but de ce projet sera d’écrire un multiplexeur de port : un programme qui attend des
connexions en TCP sur un port et qui quand un client se connecte :
— Détecte le protocole utilisé par le client en analysant le début du traffic reçu.
Ouvre une connexion vers le serveur correspondant à ce protocole.
— Redirige tout le traffic de ce client sur cette connexion (y compris le premier paquet qui
a été analysé).
— -ftp hote:port où hote:port sera par défaut 127.0.0.1:21 si aucun hôte n’est spéci-
fié en option.
— -http hote:port où hote:port sera par défaut 127.0.0.1:8080 si aucun hôte n’est
spécifié.
— -irc hote:port où hote:port sera par défaut 127.0.0.1:6667 si aucun hôte n’est spé-
cifié.
Si on lance le programme comme ci-dessous, cela veut dire que celui-ci redirigera le traffic
HTTP vers le serveur 127.0.0.1:8080, le traffic IRC vers barjavel.freenode.net:6667 .

voila c'est un peu long désolé  donc toute idée programme exemple lien toute autre chose est la bien venu car je vous avoue ne pas savoir comment commencer ;


merci ;

Hors ligne

#2 Le 21/04/2015, à 01:13

ssdg

Re : TCP/IP redirection de port

C'est un peu ce que fait sslh, mais lui le fait pour ssh, openvpn et https. Peut être que tu trouvera des idées dans leur code. (mais il doit être violent)


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#3 Le 21/04/2015, à 14:44

winner

Re : TCP/IP redirection de port

Oui voila un peu dans le genre mais la c'est de la redistribution de port donc jai pensé un faire un fork un processus pére et un autre fils qui vont gerer les requettes envoyés /reçus  et les renvoyer vers le méme port méme venant de serveurs différents mais bon ... c'est pas gagner donc toute aide est la bienvenue vraiment wink

Hors ligne

#4 Le 21/04/2015, à 15:02

ssdg

Re : TCP/IP redirection de port

Pourquoi forker? Si je ne m'abuse : (mais mes connaissances en code réseau viennent de java et ne sont pas toutes jeunes, aussi il se peut que les concepts diffèrent)

Un client se connecte => ton code crée une socket sur laquelle arrivent les données envoyées par le client
Tu met de coté cette connection (dans un objet si tu es en mode semaphore (je crois que c'est le nom) ou dans un thread, si tu y tiens, un fork à partir du socket) ça te fera 1 sémaphore, un thread ou un processus par connection entrante.
Tu lit les premiers octets et détermine le serveur à appeller. (Il faut connaitre les protocoles, voire le premier mot envoyé à chaque fois)
Tu ouvre la connection vers le bon serveur, envoie les octets que tu as lu, tu attends que d'autres arrivent (la première fois, ça devrait être instantané) et tu les fait suivre dans la même connection.

Et dans l'autre sens tu fait suivre tout ce qui arrive.

Attention au cas de la fin de session, ça peut être un peu tricky.


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#5 Le 21/04/2015, à 15:44

winner

Re : TCP/IP redirection de port

merci infiniment moi je dois le faire en C ;
mais je crois que c'est plutot la partie reception qui m'interesse vraiment mon programme doit etre sur ecoute une fois lancer ( ça peut etre une requette envoyer a https://google.fr )

je dois detecter déja HTTP
si du traffic a comme protocole HTTP, il faut regarder si le début du traffic en-
voyé par le client contient une séquence ressemblant à GET /chemin/vers/fichier HTTP/1.1,
il faut en particulier essayer de voir si l’on trouve "HTTP/" suivi d’un numéro de la forme "M.n"
(le plus souvent 1.0 ou 1.1 dans une ligne commençant par une méthode HTTP, dont la liste se
trouve section 5.1.1 dans la RFC définissant HTTP http://abcdrfc.free.fr/rfc-vf/rfc2616.html

je dois detecter IRC
La RFC d’IRC peut être trouvée sur http://abcdrfc.free.fr/rfc-vf/rfc1459.html, il est indi-
qué qu’une connexion à un serveur IRC en TCP doit contenir une commande NICK pseudo-
nym

tester
Avec des serveurs locaux
Il suffit alors de se connecter avec un client IRC/HTTP sur localhost:80 et de voir si
la communication a lieu normalement. Vous pouvez utiliser n’importe quel client IRC comme
pidgin, irssi, et n’importe quel client HTTP comme firefox, chrome, lynx (il suffit de mettre
dans la barre d’adresse localhost :80). Il faudra alors tester si plusieurs client peuvent se connec-
ter simultanément à ces serveurs et que cela fonctionne toujours.


Avec des serveurs distants
différents serveurs en utilisant des serveurs HTTP et IRC publics comme par exemple :
— les serveurs IRC de freenode.net.
— n’importe quel serveur HTTP comme www.ubuntu.fr ou www.youtube.fr
Il suffit ensuite de lancer mon client encore une fois sur localhost:80 ou encore 127.0.0.1:80.

Dernière modification par winner (Le 21/04/2015, à 15:54)

Hors ligne