Auteur Sujet: Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6  (Lu 74958 fois)

0 Membres et 1 Invité sur ce sujet

corrector

  • Invité
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #72 le: 07 mars 2016 à 20:54:50 »
Ou bien un autre OS que Windows!

corrector

  • Invité
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #73 le: 07 mars 2016 à 21:01:41 »
D'ailleurs pourquoi le port TCP s'affiche soit en rouge, soit en vert ?
Parce que soi-disant utiliser un port "bas" est "contraire aux normes", ce qui est de l'enfumage évidemment.

vivien

  • Administrateur
  • *
  • Messages: 47 284
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #74 le: 07 mars 2016 à 21:06:09 »
A terme utiliser Windows XP affichera du vert si < 5000 et du rouge si > 5000.

L'idée est de voir si le % de rouge est plus important chez certains FAI, ce qui signifie que les paquets IP sont plus triturés que chez d'autres où on garde le port d'origine.

C'est une info important qu'on arrive à  avoir quand il y a de nombreuses connexions, cas des log apache2.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 103
  • Paris (75)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #75 le: 07 mars 2016 à 23:52:57 »
L'idée est d'afficher ces informations sur la page https://ip.lafibre.info pas dans les logs.

L'outil d'analyse de log, l'étape suivante est pour analyser les logs de lafibre.info (mettre en base de donnée les infos par AS et pouvoir les afficher avec un outil php / MySQL comme k-net-stats crée par TiTiDu01 qui permet de voir le trafic K-Net et le ratio IPv4/IPv6 par AS.
Le script PHP (ou autre, mais pourquoi pas utiliser PHP, même si c'est pas exécuter sur une page web) passe chaque log Apache2 et incrèmente des compteur dans la base SQL (nb de hits et taille pour chaque AS et chaque type de navigateur / OS)
=> Analyser la progression d'IPv6 via les logs Apache2

La taille en base de données est donc relativement indépendante du nombre de Go de log analysés et la recherche d'info est extrêmement rapide, contrairement à une solution big data qui va tout conserver.

hum y'a donc bien deux projets A et B distincts et ca introduit de la confusion de mélanger les 2 ici.

A: https://ip.lafibre.info et ce qu'il affiche c'est un projet a part entiere et ce sujet ci.

B: L'analyse des logs apache et l'outil d'affichage des stats qui en découle c'est un autre projet discuté sur ce sujet: https://lafibre.info/ipv6/analyser-la-progression-dipv6-via-les-logs-apache2

Il serait plus clair de ne pas faire de mélange/croisement entre les 2.

Quelque sont les infos qu'il te faut afficher dans: https://ip.lafibre.info ?
-AS
-Pays
-
Citer
déterminer avec précision le système d'exploitation (via le user-agent) pour déterminer si le port de retour est en adéquation et donc mieux détecter le CG-NAT
CG-NAT de Free j'imagine ou en général?
si c'est que pour Free, ca doit donc afficher a l'utilisateur un truc du style: 'vous utilisez du CG-NAT Free (4rd) - port X a Y' ?
Ca ne semble pas dur à  faire, on n'a pas besoin de l'user-agent et l'OS: si on a l'IPv6 et l'IPv4 (via le xhr) du visiteur et si on applique la formule de Marin, on peut savoir si c'est un client CG-NAT Free. Ca peut se faire coté client en JS si le serveur renvoi via xhr l'ipv4 et le port et l'IPv6 on l'a par la page web (le n° port sert juste a valider la formule).

Le 'travail' à  faire est donc assez simple: tu as déjà la réponse en json avec le n° de port , il suffit donc juste de faire des calculs en JS coté client. Tu peux aussi vouloir 'logger' ca coté serveur (et/ou faire les calculs coté serveur) donc on peut passer l'ipv6 en paramètre a l'xhr.

voila un code simple pour dispatcher les infos json sur les éléments :

HTLM:
ip_version: <div id="ip_version"></div><br>
ip: <div id="ip"></div><br>
hostname: <div id="hostname"></div><br>
remote_port: <div id="remote_port"></div><br>
server_port: <div id="server_port"></div><br>
https: <div id="https"></div><br>
server_protocol: <div id="server_protocol"></div><br>
user-agent: <div id="user-agent"></div><br>

JS:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://ipv4.lafibre.info/json.php', true);
xhr.onload = function() {
  var response = JSON.parse(xhr.responseText);
  for (var k in response) {
    if (response.hasOwnProperty(k)) {
      document.getElementById(k).innerHTML = response[k];
    }
  }
};
xhr.send(null);
en gros: tu transforme la  réponse json reçue au format texte (xhr.responseText) en objet JS (response) avec JSON.parse.
Ensuite tu accedes directement aux propriétés de cet objet:  response["remote_port"] donne le n° port par exemple.
La je fais une boucle sur tout les propriétés de l'objet et je remplis les éléments du DOM qui ont pour id le nom d'une propriété.
demo ici: https://jsfiddle.net/kgersen/1ewyex58/

Citer
- déterminer avec précision le navigateur et déterminer ce qui ne vient pas d'un navigateur, mais d'un robot : cela se fait via le user-agent et en combinant la version du protocole http : un navigateur moderne qui fait du http1.0 on sait que c'est un robot.
ca ne concerne pas le projet A je présume ? donc c'est pas ce sujet.

Breizh 29

  • Client Bouygues Fibre +
  • Abonné Orange Fibre
  • *
  • Messages: 4 277
  • Guilers 29820 (29N)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #76 le: 08 mars 2016 à 08:25:46 »
Rouge => 32000 ports dans la partie inférieure donc soit c'est Windows XP, soit un CG-Nat, soit une configuration modifiée de Windows.

Une fois analysé le type d'OS, cela serait rouge si c'est hors de la page par défaut de l'OS.
Les OS sont des WIN 10 Pro non modifier, sur un routeur en DMZ sur la Livebox.
Il y a aussi un oint d'accès Wifi.

Tous mes PC en Win 10 Pro, un en Win 8.1 Pro. Ceux de mes enfants sont encore en Seven mais parce que jamais allumé.

Là je suis en rouge:
Vous utilisez IPv4 avec le port TCP 29537 (Plus d'informations)

vivien

  • Administrateur
  • *
  • Messages: 47 284
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #77 le: 08 mars 2016 à 13:20:49 »
demo ici: https://jsfiddle.net/kgersen/1ewyex58/
C'est parfait.

C'est normal que si je ne demande pas le 1er élèment de la liste sur ma page, les autres éléments ne se chargent pas ?
(Concrètement, si je ne fait pas référence à "ip_version" dans ma page, alors les autres éléments sont vides)

Autre question, comment éviter un retour à la ligne avant et après ? (cela se voit bien sur ton exemple https://jsfiddle.net/kgersen/1ewyex58/ )

hum y'a donc bien deux projets A et B distincts et ca introduit de la confusion de mélanger les 2 ici.

A: https://ip.lafibre.info et ce qu'il affiche c'est un projet a part entiere et ce sujet ci.

B: L'analyse des logs apache et l'outil d'affichage des stats qui en découle c'est un autre projet discuté sur ce sujet: https://lafibre.info/ipv6/analyser-la-progression-dipv6-via-les-logs-apache2

Il serait plus clair de ne pas faire de mélange/croisement entre les 2.

ca ne concerne pas le projet A je présume ? donc c'est pas ce sujet.

Là effectivement c'est spécifique au projet A, par contre récupérer la localisation d'une IP, déterminer le système d’exploitation et si le port est correct, le navigateur et savoir si c'est un vrai navigateur ou un robot, c'est commun entre A et B.

Dans le projet B, le script va tourner pour chaque ligne Apache2 et incrèmenter les compteurs d'une base de donnée My-SQL au lieu d'afficher les informations.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 103
  • Paris (75)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #78 le: 08 mars 2016 à 13:37:40 »
C'est parfait.

C'est normal que si je ne demande pas le 1er élèment de la liste sur ma page, les autres éléments ne se chargent pas ?
(Concrètement, si je ne fait pas référence à "ip_version" dans ma page, alors les autres éléments sont vides)

oui la boucle (for) ne fait pas de controle d'erreur. c'etait juste une démo.
soit tu fais un controle si il n'y a pas d'element du DOM de ce nom la, soit du met explicitement les noms un par un.

boucle avec contrôle: https://jsfiddle.net/kgersen/1ewyex58/1/
a la main: https://jsfiddle.net/kgersen/vxgfhz27/3/

dans tout les cas, utilise la console du navigateur (F12) pour voir les erreurs.


kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 103
  • Paris (75)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #79 le: 08 mars 2016 à 13:52:07 »
Autre question, comment éviter un retour à la ligne avant et après ? (cela se voit bien sur ton exemple https://jsfiddle.net/kgersen/1ewyex58/ )
c'est le comportement d'un div.
pareil c'est une demo. il te faut faire du formatage HTML normal, avec ou sans fichier CSS . 'div' c'est un exemple. tu peux utiliser toute balise HTML qui supporte un ID (sur les TD d'une table par exemple). c'est très lié a ta mise en page.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 103
  • Paris (75)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #80 le: 08 mars 2016 à 14:25:54 »
Là effectivement c'est spécifique au projet A, par contre récupérer la localisation d'une IP, déterminer le système d’exploitation et si le port est correct, le navigateur et savoir si c'est un vrai navigateur ou un robot, c'est commun entre A et B.

donc il faut en plus:
l'AS
le Pays
determiné l'OS
estimé si le port ok en fonction de l'OS -> c'est quoi l'utilité de ca?
robot ou pas (y'a un intérêt ici ?)

pour l'AS et le Pays il te faut faire de la géoloc coté serveur ou coté client avec la fonction geoloc des navigateurs (mais si le client refuse t'aura rien et c'est pas forcement universel donc pas recommandé ici).
Coté serveur , soit c'est ton serveur web qui le fait: https://github.com/maxmind/mod_maxminddb par exemple
ou faut développer du code et l'interfacer.

user-agent -> OS: il te faut un module coté serveur qui fait cela. sert a rien de réinventer la roue donc il faut en trouver un d'interfaçable facilement avec apache/php.-> google it

estimé si le port en fonction de l'OS: la c'est un petit code spécifique à  faire.

Si tu gardes une base apache+php je ne vais pas pouvoir t'aider plus que cela, j'ai abandonné ces technos et ca ne m’intéresse plus de passer du temps sur ces "vieilleries". Mais y'a surement d'autres personnes ici qui peuvent intervenir.

perso si devais faire un projet pareil, en partant de rien, je ferais un truc "server-side only", full back-end donc, qui renvoi du HTML simple sans JS et xhr:

le client appelle ip.lafibre.info, le serveur regarde l'ip du client:
 A. si ca arrive en IPv6 via ip.lafibre.info il redirige (http redirect) sur ip4.lafibre.info/?ip6=<@ipv6 du client codée et compactée>
 B. si ca arrive en IPv6 via ipv6.lafibre.info/tov4 idem

ipv4.lafibre.info a toutes les infos coté serveur pour faire les calculs et renvoi une simple page HTML toute remplie.

 C .si ca arrive en IPv4 on  traite ipv4.lafibre.info sans paramètre ip6 et y rajoute un bouton 'tester en IPv6' qui va vers ipv6.lafibre.info/tov4. si le client click sur le bouton et a de l'IPv6 fonctionnel ca va arriver en B.

L’inconvenient c'est que ca ne marche pas si le client n'a que de l'IPv6 sans IPv4 ou si la connectivité IPv4 est en carafe a ce moment la (le redirect échoue) mais bon c'est rare et le client peut toujours explicitement demander ipv6.lalibre.info (y'a pas le /tov4 donc ca redirige pas).

corrector

  • Invité
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #81 le: 08 mars 2016 à 19:21:01 »
oui la boucle (for) ne fait pas de controle d'erreur. c'etait juste une démo.
soit tu fais un controle si il n'y a pas d'element du DOM de ce nom la, soit du met explicitement les noms un par un.
Il y a surtout zéro sécurité.

Ici ça va puisque la page vient du même éditeur (vivien), mais il ne faut surtout pas partager un tel code!

vivien

  • Administrateur
  • *
  • Messages: 47 284
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #82 le: 08 mars 2016 à 19:29:12 »
si c'est pas sur le meme domaine il faut activer cors ou utiliser JSONP.
J'ai activé CORS en limitant au domaine : https://ip.lafibre.info

Concrètement, Apache2 rajoute l’entête suivant aux pages en http :
Header set Access-Control-Allow-Origin "http://ip.lafibre.info"et l'entête suivant pour les pages https :
Header set Access-Control-Allow-Origin "https://ip.lafibre.info"
Dans les différents nom de domaines proposé, seul https://ip.lafibre.info permet de voir IPv4 et IPv6 sur une même page.

Exemple avec Orange FTTH :


Un grand merci kgersen, marin, corrector et jack pour l'aide apportée.

Quand j'aurais un peu de temps, je rajouterais l'AS IPv4 et  l'AS IPv6, via les bases Maxmind. (cf Analyser la progression d'IPv6 via les logs Apache2)
Le but progresser doucement pour mon outil d'analyse des logs.

corrector

  • Invité
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #83 le: 08 mars 2016 à 19:44:14 »
J'ai activé CORS en limitant au domaine : https://ip.lafibre.info

Concrètement, Apache2 rajoute l’entête suivant aux pages en http :
Header set Access-Control-Allow-Origin "http://ip.lafibre.info"et l'entête suivant pour les pages https :
Header set Access-Control-Allow-Origin "https://ip.lafibre.info"
OK mais tu ne craignais vraiment pas l'abus de ressources AMA.

Pendant ce temps là, tu tolères le hotlinking des images du forum non seulement d'autres sites Web mais de logiciels lourds!