Forum Linux.debian/ubuntu Iptable et adresse réseaux

Posté par  .
Étiquettes : aucune
0
11
déc.
2009
bonjour

je voudrais récupérer l'adresse ip et le /mask pour le mettre dans une regle iptables.

ex : LAN="192.168.27.0/24"
savez-vous comment je peux faire ?

j'ai essayé ceci : ifconfig eth0 | awk '/inet/ { sub("adr:","",$2);print $2}'
mais ca me retourne sont adresse ip hors moi je veux l'adresse du lan avec /nombre de bit à 1 du mask.


Merci
  • # avec awk -F"/"

    Posté par  (site web personnel) . Évalué à 2.

    je suppose qu'un simple print $1 va afficher ce que tu cherches.

    Désolé, j'ai pas de machine sous la main pour vérifier

    ifconfig eth0 | awk -F "/" '{ print $1 }'

    ウィズコロナ

    • [^] # Re: avec awk -F"/"

      Posté par  . Évalué à 2.

      Cette commande ne marche pas, par contre la suivante est fonctionnelle :
      ip a ls eth0 | awk '/[0-9]+\./{print $2}'
  • # Re: Iptable et adresse réseaux

    Posté par  (site web personnel) . Évalué à 2.

    Tu peux faire quelque chose de similaire pour extraire Mask: puis convertir de 255.255.255.0 vers /24 (un peu d'arithmétique bash, ça doit se faire). Sinon, regarder la table de routage du noyau :
    # ip route show | grep -o '^[[:digit:]\.]\+/:digit:\+'
    172.25.205.0/24
    172.25.126.0/24
    
    # ip route show | awk '/eth0/ { print $1 }'
    172.25.205.0/24
    • [^] # Re: Iptable et adresse réseaux

      Posté par  . Évalué à 1.

      merci ca fonctionne j'avais trouvé un truc plus compliqué mais qui marche seulement si le masque tombe juste /8 /16 / 24

      voici le code :

      inter="eth0"
      tmp=""
      nb=0
      for i in $(seq 4)
      do
      mask[$i]="$(ifconfig $inter|grep Masque|cut -d ':' -f4|cut -d '.' -f$i)"
      octet[$i]="$(ifconfig $inter|grep Masque|cut -d ':' -f2|cut -d '.' -f$i|cut -d ' ' -f1)"
      if [[ $(ifconfig $inter|grep Masque|cut -d ':' -f4|cut -d '.' -f$i) = 255 ]]
      then
      let "nb = $nb + 8"
      tmp="$tmp${octet[$i]}."
      else
      t="0"
      tmp="$tmp$t"
      fi
      done


      echo "$tmp/$nb"


      sinon Merci beaucoup :)
    • [^] # Re: Iptable et adresse réseaux

      Posté par  . Évalué à 1.

      par contre ta commande me retoune :
      192.168.27.0/24
      default

      comment je fais pour récupérer que la 1er ligne ?

      Merci
      • [^] # Re: Iptable et adresse réseaux

        Posté par  (site web personnel) . Évalué à 2.

        Effectivement, le default apparaît si ta passerelle par défaut passe par eth0. Pour la deuxième version, essaie en complétant le filtre de awk, peut-être en imposant que la première ligne commence par un chiffre :

        # ip route show | awk '/^[0-9].*eth0/ { print $1 }'
        172.25.205.0/24

        Bien sûr, des filtres plus complets sont peut-être préférables.

        Aussi, bien sûr, si eth0 appartient à plusieurs réseaux, tu auras plusieurs réponses. Je pense au cas où eth0 appartient à plusieurs VLANs (ou des topologies un peu bizarre avec eth0 présente dans plusieurs subnets différents), peut-être d'autres subtilités auxquelles je ne pense pas sur le moment.
  • # IPy (solution en Python)

    Posté par  (site web personnel) . Évalué à 2.

    Si Python ne te fait pas peur, tu peux utiliser la bibliothèque IPy (qui faut installer manuellement) :

    $ python
    >>> from IPy import IP
    >>> ip=IP('192.168.0.12/24', make_net=True)
    >>> ip.net()
    IP('192.168.0.0')
    >>> ip.prefixlen()
    24
  • # Vive IP

    Posté par  . Évalué à 3.

    Pourquoi pas tout simplement avec la commande ip ?

    ip addr show eth0 |awk '/inet /{ print $2 }'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.