IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Trier des adresses IP


Sujet :

Programmation et administration système Perl

  1. #1
    Membre du Club Avatar de blacksnake
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 69
    Points
    69
    Par défaut Trier des adresses IP
    Salut à vous,

    Iptables est alimenté toutes les heures avec les nouvelles tentatives de connexions sur le port ssh et les adresses prélevées vont directement dans un fichier de blacklist.

    Je voudrais que ces adresses soient triées par ordre croissant, or le bout de code trouvé chez PerlMonk ne tri pas correctement.

    Voici le fichier source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    192.168.2.7
    192.168.0.251
    172.18.2.34
    172.16.0.4
    10.10.10.10
    192.168.45.47
    10.116.102.89
    192.168.45.47
    192.168.34.47
    192.168.22.47
    192.168.15.123
    192.168.5.4
    192.168.34.7
    Le code perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    use Socket qw [inet_aton];
    sub squish {
      my($ip_lo,$ip_hi,$name) = split (//,$_[0]);
      return $name.inet_aton($ip_lo).inet_aton($ip_hi);
    }
     
    my @sorted = sort { squish($a) cmp squish($b) } @global;
    Le résultat du tri :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    10.10.10.10
    10.116.102.89
    172.18.2.34
    172.16.0.4
    192.168.2.7
    192.168.0.251
    192.168.45.47
    192.168.45.47
    192.168.34.47
    192.168.22.47
    192.168.15.123
    192.168.5.4
    192.168.34.7

    Merci

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne sais pas d'où sort ce code, mais visiblement il n'est pas destiné exactement à ce que tu demandes, ou il manque un bout d'explication.
    Ce que tu veux peut être obtenu simplement avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    use Socket qw(inet_aton);
     
    my @sorted = sort { inet_aton($a) cmp inet_aton($b) } @global;
    Mais comme on est un peu fou, on va te faire une Schwarzian transform (revisitée par Uri Guttman) pour accélérer tout ça, je pense pas que ça serve à grand chose (combien as-tu d'adresses à trier ?) mais allons-y :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use Socket qw(inet_aton inet_ntoa);
     
    my @sorted = 
      map {inet_ntoa($_)} 
        sort 
          map {inet_aton($_)} @global;
    Peut-être que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    use Socket qw(inet_aton inet_ntoa);
     
    my @sorted = 
      map {substr $_, 4} 
        sort 
          map {inet_aton($_).$_} @global;
    serait plus rapide, mais c'est difficile à dire sans Benchmark.


    --
    Jedaï

  3. #3
    Membre du Club Avatar de blacksnake
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 64
    Points : 69
    Points
    69
    Par défaut
    Merci Jedai

    J'ai pris le dernier exemple que tu as donné, cela convient exactement à mon attente.

    Il y a 130 adresses actuellement dans le fichier.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Est il possible de faire la même chose en php ? sachant que les ips se trouvent dans une base mysql ?
    D'avance merci
    Cordialement
    N


    ===
    Edit
    ===

    Je crois avoir trouvé il faut utiliser inet_aton sous mysql.
    Ma source pour ceux que ca interesse : http://www.jimgrill.com/pages/content/sortip

  5. #5
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Normalement tu aurais du poser la question sur les forums PHP, mais je suis touché de ta confiance en nous !

    Effectivement inet_aton() est la fonction clé pour trier des adresses IP : fondamentalement les adresses IPs ne sont que des entiers entre 0 et 2^32-1, et c'est ainsi qu'il faut les trier, comme c'est très bien expliqué dans le lien que tu donnes. Le fait que Mysql dispose de INET_ATON() est très intéressant et je te remercie pour l'avoir signalé.

    --
    Jedaï

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier Des Adresses IP Par Port ?
    Par benymypony dans le forum Débuter
    Réponses: 9
    Dernier message: 20/07/2011, 23h05
  2. Trier des adresses e-mail
    Par Aloneghost dans le forum Langage
    Réponses: 1
    Dernier message: 03/09/2010, 00h44
  3. Comparer et trier des adresses Internet
    Par rambc dans le forum Réseau/Web
    Réponses: 3
    Dernier message: 15/03/2009, 18h44
  4. [VB.NET] XML - Trier des noeuds
    Par nako dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/06/2004, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo