2017-08-02 4 views
0

Je suis nouveau ici. Je travaille sur un script qui doit me dire si une adresse IP donnée appartient à une plage IP, en utilisant les scripts bash. Par exemple: à partir d'une grande plage comme 10.103.240.0/20 Je dois coder un script dans bash linux pour découvrir si l'ip 10.102.247.221 appartient à la gamme? Je sais que le HostMin est 10.103.240.1 et le HostMax 10.103.255.254 mais je ne sais pas comment implémenter la comparaison. Avez-vous une suggestion s'il vous plaît? Je ne sais pas où commencer.script pour découvrir si une adresse IP appartient à une plage IP

Merci

Répondre

-1

Cela pourrait fonctionner:

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 
0

Vous pourriez dépouiller les points de la propriété intellectuelle et de comparer les chiffres

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

Le critère «12.3.4.5» devrait-il être compris entre «1.20.0.0 et 1.39.255.255»? – fzd

+1

Vous avez raison. Je devrais pré-remplir avec quelques 0 pour rendre le nombre égal à la longueur. – pikand

1

Ce cheval a été fouetté à plusieurs reprises, il suffit de mettre c'est la plus fiable d'utiliser un outil intégré pour le travail. ipcalc, nmap, pour en nommer un couple.

Pour répondre à la partie bash de "si elle est à l'intérieur", vous pouvez inscrire votre gamme et utiliser grep

Par exemple, en utilisant nmap:

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


tests unitaires

 
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 
+0

c'est très utile mais je vais utiliser le script de fzd car nmap prend plus de temps. En tout cas j'ai appris quelque chose de plus sur nmap. Je suis courageux à propos d'ipcalc. J'ai vu le manuel ipcalc mais je n'ai pas trouvé les options utiles à mon cas. Comment pourriez-vous le faire en utilisant ipcalc? – intore