Modification d'expression régulière

Bonjour à tous CCMien et merci de me lire

J'ai un souci avec une expression régulière ( encore :-( )
je recherche un peu d'aide si possible.

J'explique le problème :

j'ai actuellement une expression régulière utiliser dans un fichier de conf exim4 pour faire tourner un serveur mail, cette expression régulière fait en sorte d'envoyer chaque mail avec une ip différente (9 IP disponible au total)

La voici :
xxx.xxx.xxx.3${eval:${substr{-2}{1}{$tod_zulu}}%7+0}


il prend donc l'ip xxx.xxx.xxx.30 jusque xxx.xxx.xxx.39

j'aimerais "simplement" réduire le nombre d'ip a 5, le problème c'est que cette fois les 5 ip ne ce suives pas, voici un exemple :

158.33.17.232
158.33.17.234
158.32.163.112
158.32.163.115
158.32.163.118

Quelqu'un aurait une solution ?

lami20j t'es dans le coin ?

Merci d'avance pour toute intervention
Cordialement
Jhoni

13 réponses

Résumé de la discussion

Une expression régulière utilisée dans la configuration d'Exim4 permettait d'envoyer chaque mail depuis une IP différente sur un pool de 9 adresses, mais l'utilisateur souhaite réduire ce pool à 5 IP non consécutives. Des échanges soulignent des difficultés comme l'erreur main option 'interface unknown' dans /var/lib/exim4/config.autogenerated.tmp et la vérification de l'expansion d'une chaîne plutôt que d'une vraie regex. Plusieurs messages expliquent que $tod_zulu et substr jouent un rôle dans l'obtention de l'index IP et qu'il s'agit d'une expansion de chaîne, pas d'une construction regex. D'autres remarques demandent le fichier complet et indiquent d'examiner les logs mainlog et paniclog pour clarifier le diagnostic et tester une approche alternative avec une seule barre oblique.

Bobot (l’IA à votre service)
  1. fichier modifier avec ta regexp :
    root@servm:/etc/exim4# grep interface exim4.conf.template
    # listen on all all interfaces?
    local_interfaces = MAIN_LOCAL_INTERFACES
    # where you define the interface to your scanner. This example is typical
    # For spam scanning, there is a similar option that defines the interface to
    interface = 158\\.3[23]\\.1(7|63)\\.(11[258]|23[24])


    fichier d'origine :
    # listen on all all interfaces?
    local_interfaces = MAIN_LOCAL_INTERFACES
    # where you define the interface to your scanner. This example is typical
    # For spam scanning, there is a similar option that defines the interface to
    interface=158.33.17.232


    fichier modifier avec la regexp trouver sur un forum :
    # listen on all all interfaces?
    local_interfaces = MAIN_LOCAL_INTERFACES
    # where you define the interface to your scanner. This example is typical
    # For spam scanning, there is a similar option that defines the interface to
    interface=105.230.233.3${eval:${substr{-2}{1}{$tod_zulu}}%7+0}
    1. Modérateur
      Je ne peux plus rester.
      On va continuer demain si ça ne te dérange pas.

      fichier modifier avec la regexp trouver sur un forum :
      En tous cas ce n'est une regex mais string expansion.
      Essai la regex avec un seul slash.
    2. ;-) thanks
    3. interface = 158\\.3[23]\\.1(7|63)\\.(11[258]|23[24])
      a quel moment un seul slash ?

      a demain ;-)
    4. petit UP cordial....
  2. 158\.3[23]\.1(7|63)\.(11[258]|23[24])" is not a valid IP address for the "interface" option for remote_smtp transport

    :-(
    1. Modérateur
      Affiche le résultat de
      grep interface ton_fichier_config_exim
  3. Modérateur
    Essai

    interface = 158\\.3[23]\\.1(7|63)\\.(11[258]|23[24])
    1. :-(

      J'essaye de faire plus simple.

      Cette ligne dans le fichier de conf d'exim4 permet de stipuler l'adresse IP du serveur envoyeur du mail :
      interface = xxx.xxx.xxx.xxx

      Afin de pouvoir envoyer des mails depuis plusieurs IP on la modifie comme ceci :
      interface = xxx.xxx.xxx.3${eval:${substr{-2}{1}{$tod_zulu}}%7+0}

      Je pense que cette ligne fait un décompte en ordre croissant ou bien un tri aléatoire et envoie chaque mail avec une IP différente comme ceci :
      1er mail envoyer depuis l'IP    : xxx.xxx.xxx.30
      2em mails envoyer depuis l'IP : xxx.xxx.xxx.31
      3em mails envoyer depuis l'IP : xxx.xxx.xxx.32
      

      et ainsi de suite jusqu'au 10em mails qui sera donc envoyer avec l'IP xxx.xxx.xxx.39

      Le but est d'envoyer les mails comme ceci :
      1er mail envoyer depuis l'IP : 158.33.17.232
      2em mails envoyer depuis l'IP : 158.33.17.234
      3em mails envoyer depuis l'IP : 158.32.163.112
      4em mails envoyer depuis l'IP : 158.32.163.115
      5em mails envoyer depuis l'IP : 158.32.163.118

      J'espère que c'est plus claire comme ça.

      Merci ;-)
      1. Modérateur
        Je pense que cette ligne fait un décompte en ordre croissant ou bien un tri aléatoire et

        Il ne faut pas penser, mais s'informer ;-)
        http://www.exim.org/exim-html-current/doc/html/spec_html/ch11.html

        $tod_zulu 
        
            This variable contains the UTC date and time in "Zulu" format, as specified by ISO 8601, for example: 20030221154023Z.


        Prenons la valeur en gras

        ${substr{-2}{1}{$tod_zulu}}%7+0} =>
        $tod_zulu = 20030221154023Z
        ${substr{-2}{1}{20030221154023Z} donne 3 (on commence à partir de la fin -2 et la longueur 1
        3%7 égal 3
        3 + 0 = 3
        ensuite eval c'est pour convertir 3 en numérique

        Donc ce n'est pas un tri mais une recherche d'IP par rapport au time donné par la variable $tod_zulu
    2. par google

      c'est une astuce que j'ai trouver sur deux ou trois forums et qui marche bien
      1. Modérateur
        Alors je ne comprends pas ce que tu veux ;-(
    3. a mon avis et ce n'est que mon avis...

      ce fichier de conf d'exim4 cherche la variable "interface" qui doit suivre d'une adresse IP comme l'exemple plus haut.

      Normalement le fichier de conf d'origine est comme ceci :

      interface = xxx.xxx.xxx.xxx

      pour une rotation de 9 IP il a été transformé comme ceci :

      interface = xxx.xxx.xxx.3${eval:${substr{-2}{1}{$tod_zulu}}%7+0}


      1. Modérateur
        pour une rotation de 9 IP il a été transformé comme ceci :

        Par qui?
    4. Je pense que pour que cette regexp fonctionne il faut un fichier "IP" ou stocker les IP et la c'est pas le cas ....
      1. Modérateur
        Tu utilises un fichiers de configuration qui contient les IP dans une variable et les IP cherchées sont seulement les 5 que tu as définies.

        La regex devrait être adaptée à ton cas en effet, mais il faut connaître un peu mieux ton cas.
    5. Salut lami20j

      Je viens de testé et je reçois :

      "'158.3[23].1(7|63).(11[258]|23[24])'" is not a valid IP address for the "interface" option for remote_smtp transport


      1. Modérateur
        Salut,

        L'exemple en dur

        lami20j@debian-acer:~$ cat ip
        73.25.100.32
        158.33.17.232
        158.33.17.234
        158.32.163.112
        158.32.163.115
        158.32.163.118
        192.168.0.1
        10.0.0.200
        lami20j@debian-acer:~$ egrep -o '158\.3[23]\.1(7|63)\.(11[258]|23[24])' ip
        158.33.17.232
        158.33.17.234
        158.32.163.112
        158.32.163.115
        158.32.163.118

        1. les 5 IP dans l'exemple plus haut sont en faite les bonnes IP mise a part les 3 premiers chiffres (158) de départ afin de masquer les IP sur le forum


          petit a petit !!
          1. Salut :-)

            oui 5 IP qui ne se suive pas comme l'exemple plus haut
            1. Modérateur
              Salut,

              Il s'agit bien des 5 ip que tu as affichées ou c'est aléatoire?

              lami20j