Скрипт, который сканирует мою сеть

Скрипт, который сканирует мою сеть

У меня есть вопрос Я хочу запустить скрипт, который сканирует мою сеть и который я могу видеть с устройствами, которые находятся в моей сети. Я хочу вставить некоторые аргументы также в скрипт

Когда я запускаю скрипт:

 ./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

Но моя проблема в аргументе --up en -mac, который я хочу, чтобы при запуске скрипта ./ping.sh --up отображались только работающие компьютеры. А аргумент -mac также является проблемой, когда я запускаю скрипт, я хочу отображать IP-адреса и MAC-адреса после того, как компьютеры будут пропингованы**

Может ли кто-нибудь помочь мне с этими двумя аргументами?

Это мой сценарий.

#!/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
В строках "case statement" вашего дела № 5 нет никаких проблем.
Тем не менее, я настоятельно рекомендую вам изменить название опции с-macк--ip. MAC-адрес и IP-адрес — это разные понятия, и в данном случае я думаю, ipчто это правильный вариант.

Вопрос стиля: даже если это не строгое правило, обычно используется одинарная, -если следующий вариант состоит только из одной буквы, и двойная, --если состоит более чем из одной буквы. Например, в вашем примере у вас есть -hи --help. (Исправьте даже --xx-YY). Скрипты имеют тенденцию сохраняться во времени, и будет странно впоследствии увидеть его только с одним -.

Возвращаясь к коду #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**
Если я правильно понял, вы хотите каким-то образом показать список всехвверххост в этой подсети. Поэтому вам не нужно указыватьконецпеременная дляИС, но вам следует просканировать всю подсеть 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-адресе

Связанный контент