Auteur Sujet: Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6  (Lu 74360 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 #60 le: 07 mars 2016 à 18:28:44 »
J'ai l'impression que c'est une solution (jQuery) qui est certes plus compacte mais ne saurait être dépeinte comme objectivement plus intuitive. Certes, il y a plein de sucre syntaxique, mais est-ce que « $("# » est censé être autrement plus « parlant / profane / moins "ceux qui savent" » pour « donne-moi l'élèment dont l'attribut ID correspond à la sous-chaîne de caractères subséquente » que l'équivalent DOM ?
Je confirme : pour un ignorant comme moi, c'est du charabia.

On dirait des formules magiques, comme du Perl!

corrector

  • Invité
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #61 le: 07 mars 2016 à 18:37:18 »
Si on va dans ce sens, il faut carrèment ne pas faire de JS et de XHR non plus, peut-être une simple iframe ?
Oui pour moi une iframe était la proposition de base, mais à un moment on veut pouvoir indiquer si le client est en 6rd (ou 4rd ou que sais-je).

Apres personnellement  je n'aime pas JQuery ni JS d'ailleurs. Je trouve tout cet éco-systeme JS déplorable mais bon on n'a pas trop le choix en ce moment meme si les choses évoluent lentement.
Il n'est contestable que JS a été conçu par des californiens fumeurs de beuh complètement dérangés.

Enfin en tout c'est la seule explication que j'ai trouvé.


vivien

  • Administrateur
  • *
  • Messages: 47 075
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #62 le: 07 mars 2016 à 18:40:19 »
Le « <div id="ipv4"></div> » est en double. (C'est invalide, tu n'es pas censé avoir deux éléments avec le même id en HTML, si c'était voulu utiliser class="").
Le div id n'est plus en double, mais il y a toujours un retour à la ligne que je ne m'explique pas.


Il n'y a pas de raison d'utiliser une condition comme ça, il suffit de charger la ressource "//ipv4.lafibre.info/ip.php" et le navigateur s'adaptera automatiquement.
Effectivement, c'est plus simple comme ça. C'est étonnant car peu de sites disponible en http et https l'utilisent : quand on charge la version http du site, il y a de nombreux éléments https chargés.

Pourquoi appeler htmlspecialchars pour ensuite utiliser directement getenv("HTTP_USER_AGENT")?
C'est corrigé, le but est effectivement d'utiliser htmlspecialchars pour protéger d'une attaque via l'user-agent.

Merci pour avoir repéré le pb de sécurité.

corrector

  • Invité
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #63 le: 07 mars 2016 à 19:16:39 »
Le div id n'est plus en double, mais il y a toujours un retour à la ligne que je ne m'explique pas.
J'ai expliqué pourquoi div ici est essentiellement équivalent à p.

Effectivement, c'est plus simple comme ça. C'est étonnant car peu de sites disponible en http et https l'utilisent :
Moi aussi ça m'étonne.

Merci pour avoir repéré le pb de sécurité.
Je ne crois pas qu'une faille de sécurité exploitable existait.

Mais avoir htmlspecialchars partout :
- est plus régulier
- donc plus simple
- plus facile que de faire une analyse de sécurité en tenant compte de toutes les configurations imaginables

Donc pour moi avoir mis htmlspecialchars partout rend la vérification du code moins "prise de tête" et donc rend le code au final plus sûr même si certaines occurrences n'étaient pas indispensables.

vivien

  • Administrateur
  • *
  • Messages: 47 075
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #64 le: 07 mars 2016 à 19:34:29 »
Ou alors tu mets les données dans un JSON et tu les dispatches aux bons endroits avec un peu plus de JavaScript.
J'ai réalisé le php qui crée le json : https://ip.lafibre.info/json.php

<?php
if(strstr($_SERVER['REMOTE_ADDR'],":")) {
	
$IP "IPv6";
}
else {
	
$IP "IPv4";
}
$hostname htmlspecialchars(gethostbyaddr($_SERVER['REMOTE_ADDR']));
$useragent htmlspecialchars($_SERVER['HTTP_USER_AGENT']);

echo 
'{
    "ip_version": "'
,$IP,'",
    "ip": "'
,$_SERVER['REMOTE_ADDR'],'",
    "hostname": "'
,$hostname,'",
    "remote_port": "'
,$_SERVER['REMOTE_PORT'],'",
    "server_port": "'
,$_SERVER['SERVER_PORT'],'",
    "https": "'
,$_SERVER['HTTPS'],'",
    "server_protocol": "'
,$_SERVER['SERVER_PROTOCOL'],'",
    "user-agent": "'
,$useragent,'"
}'
;
?>


Je veut bien de l'aide pour le code qui récupérer les éléments.

Comme toujours en programmation il y a des compromis à  faire en fonction de plusieurs critères dont l'un des 1ers est l'objectif.
La on ne sait pas trop ou Vivien veut aller a terme, lui non plus surement. Ca commence par une simple page, puis des choses d'ajoutent au fur et a mesure. Demain ca serait peut-être la géoloc et les n° d'AS ? certe on peut tout faire en JS basique mais à  partir d'un certain seuil de complexité , un simple framework peut éventuellement améliorer les choses (ou les aggraver ... ca arrive).
L'objectif court terme est de :
- déterminer l'AS de l'IP
- déterminer le pays de l'IP
- 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
- 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.

Objectif final : faire un outil d'analyse de log Apache2 qui fait des logos IPv4 vs IPv6 par AS, par système d’exploitation et navigateur. Détecter le % de retour de port non conforme en IPv4 et en IPv6 afin de déterminer le % de connexion qui passent par un CG-Nat. Avoir des stats de flux non humain par AS,...

Vous savez tout !

vivien

  • Administrateur
  • *
  • Messages: 47 075
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #65 le: 07 mars 2016 à 19:54:42 »
Je me demande aussi comment faire proprement pour ne pas avoir systématiquement dans le logs :
PHP Notice:  Undefined index: HTTPS in /home/ip.lafibre.info/json.php on line 17quand la page est appelée en http.

$_SERVER['HTTPS'] => nul en http et 'ON' en https

jack

  • Professionnel des télécoms
  • *
  • Messages: 1 674
  • La Madeleine (59)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #66 le: 07 mars 2016 à 19:56:46 »
if(isset($_SERVER['HTTPS'])) ou un truc du genre

Idée: mettre le code sur github, par exemple

vivien

  • Administrateur
  • *
  • Messages: 47 075
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #67 le: 07 mars 2016 à 20:14:18 »
Oui, l'idée est de faire un truc open source utilisable par tous, par contre, il faut attendre d'avoir un peu avancé dans le projet pour le mettre sur github

if(isset($_SERVER['HTTPS'])) ou un truc du genre
C'est parfait, plus d'erreur dans mes logs en http

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 078
  • Paris (75)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #68 le: 07 mars 2016 à 20:25:53 »
Je veut bien de l'aide pour le code qui récupérer les éléments.
L'objectif court terme est de :
- déterminer l'AS de l'IP
- déterminer le pays de l'IP
- 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
- 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.

Objectif final : faire un outil d'analyse de log Apache2 qui fait des logos IPv4 vs IPv6 par AS, par système d’exploitation et navigateur. Détecter le % de retour de port non conforme en IPv4 et en IPv6 afin de déterminer le % de connexion qui passent par un CG-Nat. Avoir des stats de flux non humain par AS,...

Vous savez tout !

- quand tu parles des 'logs' ce sont que les logs de https://ip.lafibre.info/ ou tout tes logs, y compris ceux du forum (lafibre.info) ?

- "déterminer l'AS de l'IP & déterminer le pays de l'IP": coté client ou client serveur ? pour afficher sur la page https://ip.lafibre.info/ ou juste pour augmenter les logs coté serveur de 2 colonnes (AS et Pays ) ?

- idem pour l'OS et le CGNAT.

- en fait la principale question qui regroupe les 3 précédentes c'est : veux tu une solution 'coté serveur' (back-end)  qui va 'traiter' tes logs, les augmenter d'informations (AS,OS, Pays, CGNAT ou pas, etc) et ensuite faire des statistiques/analyses dessus OU une solution "full stack" qui va aussi, en live, renvoyer a l'utilisateur ces informations a l'instar de ce qu'il y a déjà dans https://ip.lafibre.info/ ?

c'est la question clé, parce que si l'objectif final c'est juste de "faire un outil d'analyse de log Apache2", alors tu peux te concentrer que sur ca et oublier l'aspect "web". Ca devient principalement un probleme de base de donnée/big data/BI et donc pas besoin de javascript,de programmation et les stack/framework web. Ca change énormèment l'envergure du projet.

- es tu prêt a utiliser des solutions "clé en main" comme ELK ou equivalent ou préférerais tu comprendre "tout ce qui se passe" , voir et appréhender tout le 'code' utilisé en partant d'aucun existant.


vivien

  • Administrateur
  • *
  • Messages: 47 075
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #69 le: 07 mars 2016 à 20:32:08 »
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 https://k-net-stats.lafibre.info/ 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.

Breizh 29

  • Client Bouygues Fibre +
  • Abonné Orange Fibre
  • *
  • Messages: 4 279
  • Guilers 29820 (29N)
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #70 le: 07 mars 2016 à 20:36:37 »
D'ailleurs pourquoi le port TCP s'affiche soit en rouge, soit en vert ?

vivien

  • Administrateur
  • *
  • Messages: 47 075
    • Twitter LaFibre.info
Script pour récupérer l'IP et indiquer si c'est une IPv4 ou une IPv6
« Réponse #71 le: 07 mars 2016 à 20:41:17 »
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.