Skript, das mein Netzwerk scannt

Skript, das mein Netzwerk scannt

Ich habe eine Frage. Ich möchte ein Skript ausführen, das mein Netzwerk scannt und mir zeigt, welche Geräte in meinem Netzwerk aktiv sind. Ich möchte auch einige Argumente in das Skript einfügen.

Wenn ich das Skript ausführe:

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

Ausgabe:

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

Aber mein Problem ist das Argument --up en -mac, das ich haben möchte, wenn ich das Skript ./ping.sh --up ausführe. Es zeigt nur die Computer an, die aktiv sind. Und das Argument -mac ist auch ein Problem, wenn ich das Skript ausführe. Ich möchte die IP-Adressen und die Mac-Adresse anzeigen, nachdem die Computer gepingt haben.**

Kann mir jemand bei diesen beiden Argumenten helfen?

Dies ist mein Skript.

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

Antwort1

Lasst uns etwas Ordnung schaffen.

Fall Nr. 5: -macoder besser,--ip
Es gibt keine Probleme in den "Case Statement"-Zeilen Ihres Falls Nr. 5.
Trotzdem empfehle ich Ihnen dringend, den Namen der Option von-macZu--ip. „Mac-Adresse“ und „IP-Adresse“ sind unterschiedliche Konzepte, und ich denke, in diesem Fall ipist es das passende.

Stilfrage: Auch wenn es keine strenge Regel ist, ist es üblich, ein einzelnes Zeichen zu verwenden, -wenn die folgende Option nur aus einem Buchstaben besteht, und ein doppeltes, --wenn sie aus mehr als einem Buchstaben besteht. In Ihrem Beispiel haben Sie beispielsweise -hund --help. (Korrigieren Sie auch das --xx-YY). Skripte neigen dazu, eine gewisse Zeit zu überdauern, und es wird später seltsam sein, sie mit nur einem zu sehen -.

Zurück zum Code von Nr. 5. Sie können etwas Ähnliches verwenden wie:

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

Fehler bei diesem Versuch:
ip=192.168.0.$macist definiert auf192.168.0.xxxund in der folgenden Zeile wird nicht die Variable verwendet $ip, sondern das Subnetz192.168.1.0/24Der verschachtelte if... then fiBlock wird nicht durch einen abgeschlossen fi.


**Fall #3: --up**
Wenn ich richtig verstehe, was Sie meinen, möchten Sie irgendwie die Liste allerhochHost in diesem Subnetz. Sie müssen also nicht angeben,EndeVariable für dieIP, aber Sie sollten das gesamte Subnetz scannen 192.168.1.xxx.

Sie können etwa die folgenden Befehle verwenden

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

Update: Hinweise zur MAC-Adresse

verwandte Informationen