GNU/Linux >> Belajar Linux >  >> Linux

Periksa validitas IP

Gunakan ipcalc ( diuji dengan paket versi di RPM initscripts-9.49.49-1)

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

Regex tunggal ini harus memvalidasi hanya alamat antara 0.0.0.0 dan 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

Jika Anda menggunakan bash, Anda dapat melakukan pencocokan regex sederhana untuk pola tersebut, tanpa memvalidasi paha depan:

#!/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

Jika Anda terjebak dengan shell POSIX, maka Anda dapat menggunakan expr untuk melakukan hal yang pada dasarnya sama, menggunakan BRE alih-alih 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

Perhatikan bahwa expr mengasumsikan bahwa regex Anda berlabuh ke sisi kiri string, jadi ^ awal tidak perlu.

Jika penting untuk memverifikasi bahwa setiap kuad kurang dari 256, Anda jelas membutuhkan lebih banyak kode:

#!/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

Atau mungkin bahkan dengan lebih sedikit pipa:

#!/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

Atau lagi, jika shell Anda adalah bash, Anda dapat menggunakan ekspresi reguler yang rumit untuk validasi quad jika Anda tidak menyukai aritmatika:

#!/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

Ini juga bisa diekspresikan dalam BRE, tapi itu lebih banyak mengetik daripada yang saya miliki di jari saya.

Dan terakhir, jika Anda menyukai ide menempatkan fungsi ini ... dalam sebuah fungsi:

#!/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

Ada banyak cara Anda bisa melakukan ini. Saya telah menunjukkan beberapa saja kepada Anda.


Skrip Memvalidasi Alamat IP dalam Bash Scriptoleh Mitch Frazier melakukan apa yang ingin Anda lakukan:

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. Apa Arti Karakter Khusus Dalam Echo {a..z}?

  2. Cara memeriksa openCV di Ubuntu 9.10

  3. Periksa apakah ada variabel dalam daftar di Bash

  1. Bash mengabaikan kesalahan untuk perintah tertentu

  2. Skrip Bash Shell - Periksa bendera dan ambil nilainya

  3. Periksa keberadaan wget/curl

  1. Cara memeriksa file besar di konsol

  2. fsck:Opsi untuk pemeriksaan disk paling menyeluruh

  3. Shell =Periksa apakah variabel dimulai dengan #