ネットワークをスキャンするスクリプト

ネットワークをスキャンするスクリプト

質問があります。ネットワークをスキャンして、ネットワーク上のデバイスが起動しているかどうかを確認するスクリプトを実行したいのですが。スクリプトにいくつかの引数も貼り付けたいです。

スクリプトを実行すると:

 ./ping.sh --xx-YY 20 50

出力:

192.168.0.20 is down 

192.168.0.21 is up 
..................................

192.168.0.50 is up
the argument -t , counts 200 by the last digit for ex. ./ping.sh -t 20 output: 192.168.0.220 is up

しかし、私の問題は、スクリプト ./ping.sh --up を実行するときに必要な引数 --up en -mac です。起動しているコンピューターのみが表示されます。また、引数 - mac も、スクリプトを実行するときに問題になります。コンピューターが ping された後に IP アドレスと MAC アドレスを表示したいのです**

この 2 つの議論について誰か助けてくれませんか?

これは私の脚本です。

#!/bin/bash

while [[ -n "$@" ]]
do
    case "$1" in

    -h|--help)
    Extension=1
    shift
    ;;

    -XX-YY)
    Extension=2
    shift
    min=$1
    shift
    max=$1
    shift

    ;;

    --up)
    Extension=3
    shift
    end=$1
    shift
    ;;

    -t)
    Extension=4
    shift
    count=$(($1+200))
    shift
    ;;
    esac
done

if [ "$Extension" -eq 1 ] ; then

    echo "dit is de help"

fi


if [ "$Extension" -eq 2 ] ; then

for ((n=$min ; n<=$max ; n+=1))
do
ip=192.168.0.$n
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
done


fi

if [ "$Extension" -eq 3 ] ; then


                ip=192.168.0.$end
                if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> /logping.txt; then
                        echo "${ip} is up"

                fi

fi

if [ "$Extension" -eq 4 ] ; then

ip=192.168.0.$count
if ping -c 1 -t 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
fi

答え1

注文してみましょう。

ケース5:-macあるいは、もっと良いのは、--ip
ケース#5の「caseステートメント」の行には問題はありません。
それでも、オプションの名前を次のように変更することを強くお勧めします。-mac--ip. Mac アドレスと IP アドレスは異なる概念であり、この場合はip適切であると思います。

スタイルの問題: 厳密なルールではありませんが、-後続のオプションが 1 文字のみで構成されている場合は 1 文字を使用し、 --複数の文字で構成されている場合は 2 文字を使用するのが一般的です。たとえば、同じ例では-hと があります--help( も修正してください--xx-YY)。スクリプトは時間の経過とともに持続する傾向があり、 が 1 つしかないと後で見たときに奇妙になります-

#5 のコードに戻ると、次のようなものを使用できます。

if [ "$Extension" -eq 5 ] ; then
  ip=192.168.1.$mac
   if nmap -sP -n -r $ip | grep "is up" >/dev/null ; then
      echo "${ip} is up"
   fi
fi

その試みにおけるエラー:
ip=192.168.0.$macは定義されています192.168.0.xxx次の行では変数は使用されず$ip、代わりにサブネットが使用されています192.168.1.0/24ネストされたif... then fiブロックは によって閉じられていませんfi


**ケース3: --up**
私があなたの言いたいことを正しく理解しているなら、何らかの方法ですべてのリストを表示したいということですね。サブネット内のホストを指定する必要はありません。終わり変数のIPただし、すべてのサブネットをスキャンする必要があります192.168.1.xxx

次のようなコマンドを使うことができます

if [ "$Extension" -eq 3 ] ; then
  sudo nmap -sP -n -r 192.168.1.0/24 | grep -E "Nmap scan|MAC Address:"
fi

更新: MAC アドレスに関する参考資料

関連情報