Java, servlet et IPv6

Java, servlet et IPv6 - Java - Programmation

Marsh Posté le 12-04-2009 à 15:04:54    

Bonjour a toutes et a tous
 
Je bidouilledéveloppe un servlet, que je fait tourner sous tomcat 6, et c'est parfaitement fonctionnel dans un environnement IPv4.
 
Par un pur hasard, j'ai tenté des connexions en IPv6, et sa marche aussi parfaitement: IPv4/IPv6 c'est transparent (chouette).  :wahoo:  
 
Sauf que les adresses IPv6 font foirer mes scripts de vérification d'IPv4 (si l'IP du client a le droit de ce connecter...), car évidement, les adresses IPv6 sont pas foutues comme les IPv4, c'est même le principe.  :p  
 
Bref, et j'en vient a ma question: comment savoir si mon client se pointe sur mon serveur en environnement IPV4 ou IPv6 ? J'ai rien trouvé de valable avec HttpServletRequest...
 
request.getRemoteAddr() me renvoi une belle IP, v4 ou v6 selon le contexte. Faut-il que je détecte des ":" pour dire que c'est une IPv6 et des "." pour dire que c'est une IPv4 ? Je trouve sa super moyen pour un contexte de sécurité...
 
Pour élargir la question, est-que quelqu'un connait de bonnes librairies Java libres, pour traiter l'IPv6 (comme le calcul des sous réseau, la validité d'une adresse...).
 
Et pour lancer un débat, carrément, j'ai l'impression que tout le monde pense que l'IPv6 c'est comme la mort et les impots, on n'y échappera pas, mais vaux mieux y avoir a faire le plus tard possible...  :kaola: Alors que perso, je trouve que sa résous bien plus de problème que cela en pose.
 

System.out.println("Merci pour vos avis et/ou vos idées." );

:hello:  
HDSDI

Reply

Marsh Posté le 12-04-2009 à 15:04:54   

Reply

Marsh Posté le 12-04-2009 à 15:13:52    

L'idée est dans la mesure du possible de ne pas avoir de différence d'exécution/traitement particulier en fonction du type d'adresse.
 
Faut se demander si c'est réellement indispensable d'avoir ce comportement distinct.
 
Après en IPv6 il n'y a pas de sous réseau (comme on l'entend en IPv4) : les 64 premiers bits indiquent le réseau, les 64 derniers l'hôte dans le réseau. La validité d'une adresse il y doit y avoir des classes qui font ça mais sinon suffit de jouer avec des regexps sur tous les cas qui existent. Tu peux regarder ça : http://java.sun.com/j2se/1.5.0/doc [...] index.html et en particulier http://java.sun.com/j2se/1.5.0/doc [...] dress.html où avec getByName tu peux checker la validité de l'ip

Reply

Marsh Posté le 12-04-2009 à 15:39:09    

Merci pour le petit éclaircissement.
 
Au niveau des sous réseaux, ce que je veut pouvoir faire, c'est d'autoriser toutes les IP provenant d'un sous réseau donné. Par exemple, en IPv4 je dit que j'autorise 192.168.0.0/1. En ipv4 on a le cidr et les masques, sa reste relativement simple.
 
Mais pour l'ipv6 sa reste pour moi le trou noir. Faut-t'il que je teste, pour une ipv6 donnée, si ses 64 premiers bits correspondent aux 64 premiers bits du sous réseau donné ?
J'ai vu que java me traduit ::1 en 0:0:0:0:0:0:0:1, donc je devrai avoir un String toujours formé de la même façon. Enfin j'espère.
 
Et de toute façon il y aura 2 algo: un pour v4 et un pour v6, et je devrait quand même détecter si je suis en v4 ou en v6.
 
Bref, j'ai peur de faire un code bancale, mal sécurisé et difficile a tester. :cry:

Reply

Marsh Posté le 14-04-2009 à 11:25:05    

Code :
  1. InetAddress address = InetAddress.getByName(request.getRemoteAddr());
  2. if(address instanceof Inet6Address) {
  3. } else if(address instanceof Inet4Address) {
  4. } else {
  5. }


Message édité par bugsan le 14-04-2009 à 11:26:59
Reply

Marsh Posté le 14-04-2009 à 18:53:26    

Ohhhhhh !  :ouch:  
 
Respect.
C'est simple et génial.  :jap:  
 
Merci.
 
Je vais essayer.  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed