OVH Cloud OVH Cloud

NAT possible en Java?

20 réponses
Avatar
Sébastien X
bonjour,

Je m'interrogeais sur le fait de savoir s'il était possible de réaliser un programme
de NAT en Java.

La translation d'adresse fonctionne apparemment un peu à la manière d'un sniffer
(je récupère toutes les trames réseau et je modifie les adresses IP originales et
destinataires pour créer la NAT). Ce travail me semble difficile à faire en Java
qui apparemment ne prend pas en charge d'aussi "bas niveau" dans les réseaux. Me
trompe je?

Sébastien

--
Message monitoré par axinews : http://www.axinews.com/

10 réponses

1 2
Avatar
Seb X
Il y a apparement 2 versions complètement différentes de Jpcap (meme si elle
ont le meme nom...) dont une permettant d'envoyer des packets via les
rowsockets
Avatar
TestMan
Bonjour,
Je m'interrogeais sur le fait de savoir s'il était possible de réaliser un programme
de NAT en Java.


C'est relativement simple ;-)
Relativement, car pour NATter les protocoles style TCP et UDP cela est
simple ... mais NATer les services style particulier style FTP et H323,
c'est plus compliqué.

La translation d'adresse fonctionne apparemment un peu à la manière d'un sniffer
(je récupère toutes les trames réseau et je modifie les adresses IP originales et
destinataires pour créer la NAT). Ce travail me semble difficile à faire en Java
qui apparemment ne prend pas en charge d'aussi "bas niveau" dans les réseaux. Me
trompe je?


Je te conseille le JPCap (la version japonaise pas celle de SF), qui
marche trés bien:
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html

Construire un NAT en Java est vraiment une bonne idée ;-)

A+
TestMan

Avatar
Seb X
C'est relativement simple ;-)
Relativement, car pour NATter les protocoles style TCP et UDP cela est
simple ... mais NATer les services style particulier style FTP et H323,
c'est plus compliqué.


Nan pas si simple car la jpcap ne permet pas d'écouter sur plusieurs
interfaces (en java du moins) et je ne sais pas encore si il sera possible
de remédier à cela.
Quelqu'un s'est déjà penché sur la question en fait :
http://arm.gobelins.fr/users/gpaul/ITIN_MEMOIRE/Firewall.pdf

Je pense que la solution serait de porter la librairie libdnet en java via
JNI

Avatar
TestMan
Nan pas si simple car la jpcap ne permet pas d'écouter sur plusieurs
interfaces (en java du moins) et je ne sais pas encore si il sera possible
de remédier à cela.


sûr ?! faudra que je teste ça à l'occaze, remarque, je l'utilise que
pour une interface à la fois, pas etonnant que cela ne me pose pas de PB
;-)

Quelqu'un s'est déjà penché sur la question en fait :
http://arm.gobelins.fr/users/gpaul/ITIN_MEMOIRE/Firewall.pdf


Trés interessant <:o)

Je pense que la solution serait de porter la librairie libdnet en java via
JNI


jpcap, est tout de même un bon début ... mais si t'es motivé ;-)

A+
TestMan

Avatar
Seb X
C'est relativement simple ;-)
Relativement, car pour NATter les protocoles style TCP et UDP cela est
simple ... mais NATer les services style particulier style FTP et H323,
c'est plus compliqué.


Pourquoi NATer les services FTP ou autre serait difficile?
La translation d'adresse a justement pour intérêt d'éviter d'encapsuler tous
les protocoles de plus haut niveau que la couche réseau.

La translation d'adresse fonctionne apparemment un peu à la manière d'un
sniffer


(je récupère toutes les trames réseau et je modifie les adresses IP
originales et


destinataires pour créer la NAT). Ce travail me semble difficile à faire
en Java


qui apparemment ne prend pas en charge d'aussi "bas niveau" dans les
réseaux. Me


trompe je?


Je te conseille le JPCap (la version japonaise pas celle de SF), qui
marche trés bien:
http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html


Oui, sauf que le lecture sur une seule interface empêche pour le moment
d'aller plus loin.... Je pense que le problème vient de Jpcap et non de
libcap. Je vais essayer la version de sourceforge qui permet peut être de
lire sur plus d'une interface réseau à la fois

Construire un NAT en Java est vraiment une bonne idée ;-)

A+
TestMan




Avatar
Seb X
Pourquoi NATer les services FTP ou autre serait difficile?
La translation d'adresse a justement pour intérêt d'éviter d'encapsuler
tous


les protocoles de plus haut niveau que la couche réseau.


Non, il a raison. Le ftp n'est pas évident à traiter comme tous les
protocoles qui passent l'adresse IP ou le port du client dans les
données.


En ftp, quand le client fait un FTP port, il indique son adresse et un
port où le serveur va pouvoir se connecter pour envoyer les données. Le
routeur NAT doit analyser les paquets ftp envoyés pour mettre à jour sa
table sinon le serveur va avoir du mal à se connecter ...


Hummm, je soupçonnai ce genre de problème. J'avais remarqué que je ne
pouvais utiliser le FTP lorsque mon firewall était allumé (malgré que je ne
bloquais aucune connexion que j'initiais et bloquais toute celle que je
n'initialisais pas)

J'espère qu'il n'y a pas trop de protocoles utilisant ce principe car j'ai
moyennement envie d'éplucher toutes les RFC


Avatar
Cédric Chabanois
Pourquoi NATer les services FTP ou autre serait difficile?
La translation d'adresse a justement pour intérêt d'éviter d'encapsuler tous
les protocoles de plus haut niveau que la couche réseau.


Non, il a raison. Le ftp n'est pas évident à traiter comme tous les
protocoles qui passent l'adresse IP ou le port du client dans les données.

En ftp, quand le client fait un FTP port, il indique son adresse et un
port où le serveur va pouvoir se connecter pour envoyer les données. Le
routeur NAT doit analyser les paquets ftp envoyés pour mettre à jour sa
table sinon le serveur va avoir du mal à se connecter ...


Cédric

Avatar
Cédric Chabanois
Hummm, je soupçonnai ce genre de problème. J'avais remarqué que je ne
pouvais utiliser le FTP lorsque mon firewall était allumé (malgré que je ne
bloquais aucune connexion que j'initiais et bloquais toute celle que je
n'initialisais pas)

J'espère qu'il n'y a pas trop de protocoles utilisant ce principe car j'ai
moyennement envie d'éplucher toutes les RFC


Les firewalls savent gérer ce genre de problèmes, surtout pour le ftp ...
Pour le H323 c'est le même genre de problème aussi


Cédric

Avatar
Erwan David
"Seb X" écrivait :

C'est relativement simple ;-)
Relativement, car pour NATter les protocoles style TCP et UDP cela est
simple ... mais NATer les services style particulier style FTP et H323,
c'est plus compliqué.


Pourquoi NATer les services FTP ou autre serait difficile?
La translation d'adresse a justement pour intérêt d'éviter d'encapsuler tous
les protocoles de plus haut niveau que la couche réseau.


Parceque en ftp ou H323 la payload TCP contient des informations du
genre "connecte toi à l'IP truc, port machin". La NAT doit donc ouvrir
un tunnel de son côté pour cette IP interne et ce port et modifier la
payload pour donner l'IP de la NAT et le port du tunnel.


Avatar
Erwan David
Cédric Chabanois écrivait :

Hummm, je soupçonnai ce genre de problème. J'avais remarqué que je ne
pouvais utiliser le FTP lorsque mon firewall était allumé (malgré que je ne
bloquais aucune connexion que j'initiais et bloquais toute celle que je
n'initialisais pas)
J'espère qu'il n'y a pas trop de protocoles utilisant ce principe
car j'ai
moyennement envie d'éplucher toutes les RFC


Les firewalls savent gérer ce genre de problèmes, surtout pour le ftp ...
Pour le H323 c'est le même genre de problème aussi


C'ets même pire pour le H323 parcequ'il faut faire un décodage ASN.1
pour retrouver les ports et IP, tandis qu'en FTP c'est directement de
l'ASCII.


1 2