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
Ulrich Vachon
Salut,

Bien sur que c'est possible ! Seulement, tu n'as pas à "snifer" toutes
ltrames du reso. puisqu'un NAT est une "passerelle". Pour être simple, le
but est de faire une table de correspondance entre paquets inbound et
paquets outbound, qui viennent sur ton serveur socket.

Analyse bien le principe d'un NAT et tu verras que tu as les outils à ta
disposition.

Bon code,
Ulrich.


"Sébastien X" a écrit dans le message de news:
3f84970b$0$27577$
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/



Avatar
Seb X
Salut,

Bien sur que c'est possible ! Seulement, tu n'as pas à "snifer" toutes
ltrames du reso. puisqu'un NAT est une "passerelle". Pour être simple, le
but est de faire une table de correspondance entre paquets inbound et
paquets outbound, qui viennent sur ton serveur socket.


J'ai étudié le principe de la NAT. Je sais comment faire des correspondances
d'ip ou de port via des sockets et Inpustream en Java.
La table de correspondance ne me semble pas le soucis majeur, mais plutôt le
routage des paquets : les routeurs travaillant sur la couche réseau du
modèle OSI (niveau plus bas que les sockets).
Or il me semble que Java ne peut travailler sur un aussi bas niveau de la
couche OSI, donc il me semble que Java ne peut créer de passerelle. Me
trompe je?

Avatar
Nicolas Repiquet
"Seb X" a écrit dans le message news:
3f858101$0$28907$

J'ai étudié le principe de la NAT. Je sais comment faire des
correspondances

d'ip ou de port via des sockets et Inpustream en Java.
La table de correspondance ne me semble pas le soucis majeur, mais plutôt
le

routage des paquets : les routeurs travaillant sur la couche réseau du
modèle OSI (niveau plus bas que les sockets).
Or il me semble que Java ne peut travailler sur un aussi bas niveau de la
couche OSI, donc il me semble que Java ne peut créer de passerelle. Me
trompe je?


Il faut que tu trouve une lib pour forger des paquets directement. Je suis
pas sur que ça existe en java, il va peut-être faloir que tu fasse le
binding avec JNI.

Bonne chance

-- Nicolas Repiquet

Avatar
Seb X
Il faut que tu trouve une lib pour forger des paquets directement. Je suis
pas sur que ça existe en java, il va peut-être faloir que tu fasse le
binding avec JNI.


Il y a jpcap qui s'interface avec la librairie libpcap mais je ne suis pas
sur que ca réponde bien aux besoins de la NAT.

En fait, je me demande pourquoi Sun n'a pas créer un package générique
d'acces aux différentes couches OSI du protocole TCP/IP puisque le modèle
TCP/IP est sensiblement le meme d'un OS à l'autre.


Bonne chance

-- Nicolas Repiquet




Avatar
Nicolas Repiquet
"Seb X" a écrit dans le message news:
3f859d37$0$28882$

Il y a jpcap qui s'interface avec la librairie libpcap mais je ne suis pas
sur que ca réponde bien aux besoins de la NAT.


Tu va bien être obligé d'en passer par là je pense...


En fait, je me demande pourquoi Sun n'a pas créer un package générique
d'acces aux différentes couches OSI du protocole TCP/IP puisque le modèle
TCP/IP est sensiblement le meme d'un OS à l'autre.


Typiquement je pense pas que java soit fait pour ça. En plus, les couches en
dessous de socket son pas mal dépendante de la plateforme.

-- Nicolas Repiquet

Avatar
Cédric Chabanois

Il faut que tu trouve une lib pour forger des paquets directement. Je suis
pas sur que ça existe en java, il va peut-être faloir que tu fasse le
binding avec JNI.

Bonne chance

-- Nicolas Repiquet




Jpcap peut-être peut faire l'affaire ou au moins donner une idée de ce
qu'il y a à faire.

http://jpcap.sourceforge.net/


En fait je ne suis pas sûr que Java soit le langage le plus adapté pour
faire cela néanmoins ...

Cédric

Avatar
Cédric Chabanois
Ulrich Vachon wrote:
Salut,

Bien sur que c'est possible ! Seulement, tu n'as pas à "snifer" toutes
ltrames du reso. puisqu'un NAT est une "passerelle". Pour être simple, le
but est de faire une table de correspondance entre paquets inbound et
paquets outbound, qui viennent sur ton serveur socket.

Analyse bien le principe d'un NAT et tu verras que tu as les outils à ta
disposition.

Bon code,
Ulrich.


J'ai l'impression que tu t'avances un peu quand même ...

Comment tu fais en java pure pour récupérer les packets qui passent ?
Comment tu fais pour les reémettre ?

Avatar
Seb X
Il y a jpcap qui s'interface avec la librairie libpcap mais je ne suis
pas


sur que ca réponde bien aux besoins de la NAT.


Tu va bien être obligé d'en passer par là je pense...


Apparemment, libpcap sert juste à capturer les packets et non à les
forger....

La simple capture des packets est peut être suffisante pour réaliser une
passerelle basique (puisque les "paquets outbound" sont crées avec de
simples sockets) mais risque de poser problème pour certains protocole
(Ping, https....)

Une autre iddée?

En fait, je me demande pourquoi Sun n'a pas créer un package générique
d'acces aux différentes couches OSI du protocole TCP/IP puisque le
modèle


TCP/IP est sensiblement le meme d'un OS à l'autre.


Typiquement je pense pas que java soit fait pour ça.


Pas encore :-)
J'ai pourtant réussit à trouver un petit prog écrit en VB qui faisait ca en
utilisant aucun driver particulier

En plus, les couches en
dessous de socket son pas mal dépendante de la plateforme.


libpcap est pourtant indépendante des plateformes


Avatar
Cédric Chabanois
Il y a jpcap qui s'interface avec la librairie libpcap mais je ne suis



pas

sur que ca réponde bien aux besoins de la NAT.


Tu va bien être obligé d'en passer par là je pense...



Apparemment, libpcap sert juste à capturer les packets et non à les
forger....


Je ne sais pas pour libpcap et Jpcap mais winpcap peut créer des paquets.



Avatar
Ulrich Vachon
Si ton log Java est passerelle, tu peux écouter via des serverSocket sur
tous les ports, par exemple et assumer ton rôle de passerelle ?


"Cédric Chabanois" a écrit dans le message de news:
3f859c28$0$28909$
Ulrich Vachon wrote:
Salut,

Bien sur que c'est possible ! Seulement, tu n'as pas à "snifer" toutes
ltrames du reso. puisqu'un NAT est une "passerelle". Pour être simple,
le


but est de faire une table de correspondance entre paquets inbound et
paquets outbound, qui viennent sur ton serveur socket.

Analyse bien le principe d'un NAT et tu verras que tu as les outils à ta
disposition.

Bon code,
Ulrich.


J'ai l'impression que tu t'avances un peu quand même ...

Comment tu fais en java pure pour récupérer les packets qui passent ?
Comment tu fais pour les reémettre ?




1 2