GNU/Linux >> Tutoriels Linux >  >> Linux

Vérifier la validité IP

Utilisez ipcalc (testé avec le package de version dans RPM initscripts-9.49.49-1)

$ ipcalc -cs 10.10.10.257 && echo vaild_ip || echo invalid_ip
invalid_ip

Cette expression régulière unique ne doit valider que les adresses comprises entre 0.0.0.0 et 255.255.255.255 :

#!/bin/bash

ip="1.2.3.4"

if [[ "$ip" =~ ^(([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))\.){3}([1-9]?[0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))$ ]]; then
  echo "success"
else
  echo "fail"
fi

Si vous utilisez bash, vous pouvez faire une simple correspondance de regex pour le modèle, sans valider les quads :

#!/usr/bin/env bash

ip=1.2.3.4

if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
  echo "success"
else
  echo "fail"
fi

Si vous êtes bloqué avec un shell POSIX, vous pouvez utiliser expr pour faire essentiellement la même chose, en utilisant BRE au lieu de ERE :

#!/bin/sh

ip=1.2.3.4

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  echo "success"
else
  echo "fail"
fi

Notez que expr suppose que votre regex est ancré sur le côté gauche de la chaîne, donc le ^ initial est inutile.

S'il est important de vérifier que chaque quad est inférieur à 256, vous aurez évidemment besoin de plus de code :

#!/bin/sh

ip=${1:-1.2.3.4}

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  for i in 1 2 3 4; do
    if [ $(echo "$ip" | cut -d. -f$i) -gt 255 ]; then
      echo "fail ($ip)"
      exit 1
    fi
  done
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

Ou peut-être même avec moins de tuyaux :

#!/bin/sh

ip=${1:-1.2.3.4}

if expr "$ip" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  IFS=.
  set $ip
  for quad in 1 2 3 4; do
    if eval [ \$$quad -gt 255 ]; then
      echo "fail ($ip)"
      exit 1
    fi
  done
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

Ou encore, si votre shell est bash, vous pouvez utiliser une expression régulière encombrante pour la validation quad si vous n'aimez pas l'arithmétique :

#!/usr/bin/env bash

ip=${1:-1.2.3.4}

re='^(0*(1?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))\.){3}'
 re+='0*(1?[0-9]{1,2}|2([‌​0-4][0-9]|5[0-5]))$'

if [[ $ip =~ $re ]]; then
  echo "success"
else
  echo "fail"
fi

Cela pourrait aussi être exprimé en BRE, mais c'est plus typé que ce que j'ai entre les doigts.

Et enfin, si l'idée de mettre cette fonctionnalité... dans une fonction vous plaît :

#!/usr/bin/env bash

ip=${1:-1.2.3.4}

ipvalid() {
  # Set up local variables
  local ip=${1:-1.2.3.4}
  local IFS=.; local -a a=($ip)
  # Start with a regex format test
  [[ $ip =~ ^[0-9]+(\.[0-9]+){3}$ ]] || return 1
  # Test values of quads
  local quad
  for quad in {0..3}; do
    [[ "${a[$quad]}" -gt 255 ]] && return 1
  done
  return 0
}

if ipvalid "$ip"; then
  echo "success ($ip)"
  exit 0
else
  echo "fail ($ip)"
  exit 1
fi

Il existe de nombreuses façons de procéder. Je ne vous en ai montré que quelques-uns.


Le script Validating an IP Address in a Bash Scriptde Mitch Frazier fait ce que vous voulez faire :

function valid_ip()
{
local  ip=$1
local  stat=1

if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    OIFS=$IFS
    IFS='.'
    ip=($ip)
    IFS=$OIFS
    [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
        && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
    stat=$?
fi
return $stat
}

Linux
  1. Vérifier le processus si le même est en cours d'exécution ?

  2. Interroger la liste des serveurs pour la mémoire/processeur alloué ?

  3. Une doublure pour vérifier si le fichier existe ?

  4. Vérifier la base de données pour la corruption

  5. Comment vérifier openCV sur Ubuntu 9.10

Comment vérifier (scanner) les ports ouverts sous Linux

Comment vérifier les ports d'écoute sous Linux (ports utilisés)

Tutoriel de commande Linux echo pour débutants (5 exemples)

Le but du mot-clé "do" dans Bash For Loops ?

Que signifient les caractères spéciaux dans Echo {a..z} ?

Vérifier les fichiers de configuration Linux pour les erreurs de syntaxe