代码之家  ›  专栏  ›  技术社区  ›  intore

用于发现IP地址是否属于IP范围的脚本

  •  0
  • intore  · 技术社区  · 7 年前

    我是新来的。 我正在编写一个脚本,该脚本必须使用bash脚本告诉我给定的IP地址是否属于某个IP范围。 例如: 我知道HostMin是10.103.240.1,HostMax是10.103.255.254,但我不知道如何实现比较。 你有什么建议吗?我不知道从哪里开始。

    3 回复  |  直到 7 年前
        1
  •  1
  •   hmedia1    7 年前

    这匹马已经被鞭打过很多次了,简单地说,最可靠的方法是使用专门为这项工作设计的工具。 ipcalc nmap ,举几个例子。

    回答 bash grep

    例如,使用 扫描器

    #!/usr/bin/env bash
    ipRange="$1"
    singleIP="$2"
    
    nmap -sL -Pn -sn -n "$ipRange" \
    | grep -o "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" \
    | if (grep -q "$singleIP"); then 
        echo "In Range"
    else 
        echo "Not in range"
    fi
    


    19:08:40 ツ :~ >./script.sh 10.103.240.0/20 10.102.247.221
    Not in range
    
    19:10:02 ツ :~ >./script.sh 10.103.240.0/20 10.103.241.111
    In Range
    
        2
  •  0
  •   papkass    7 年前

    你可以去掉IP上的点,然后比较数字

    #!/bin/bash
    
    export IFS="."
    function convertToNumber() {
        ipNumber=""
        for i in $1; do
            part="$i"
            while [ ${#part} -lt 3 ]; do
                part="0${part}"
            done
            ipNumber="${ipNumber}${part}"
    
        done
        echo ${ipNumber}
    }
    
    ip=$(convertToNumber "12.3.4.5")
    min=$(convertToNumber "1.20.0.0")
    max=$(convertToNumber "1.39.255.255")
    
    if [ $ip -ge $min ] && [ $ip -le $max ]; then
        echo "${ip} is in range $min - $max"
    else
        echo "${ip} is not in range $min - $max"
    fi
    
        3
  •  -1
  •   fzd    7 年前

    function checkInRange() {
     hostMin=$1
     hostMax=$2
     ip=$3
    
     for i in $(seq 4)
     do
       hMini=$(echo $hostMin | cut -d'.' -f$i)
       hMaxi=$(echo $hostMax | cut -d'.' -f$i)
       ipi=$(echo $ip | cut -d'.' -f$i)
       if [[ $ipi -gt $hMaxi || $ipi -lt $hMini ]]
       then
         echo "$ip not in $hostMin - $hostMax range"  
         return 1
       fi
     done
     echo "$ip in $hostMin - $hostMax range"  
     return 0
    }
    
    if [[ $(checkInRange $hostMin $hostMax $ip) -eq 0 ]] 
    then
      # Do your stuff...
    fi