Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

17.02.2012, 08:18

Hilfeee Netzwerk/ip


HILFE-IP/Netzwerkmaske









Huhu,



Ich bin dabei ein Script(mit Nano) zu schreiben.



Folgendes ist mein Ziel:

Ich möchte ein Shellscript schreiben, dass mich nach einer IP und
einer Netzwerkmaske(netmask) fragt. Das Script soll außerdem das Netz
scannen und dort alle Rechner, IP-Adressen und Mac-Adressen ausgeben,
die in dem Netzwerk vorhanden sind. Jedoch interessieren mich nur die
IP-Adressen die "up" sind!



Bitte verbessert meine Fehler, ich komme seit 1,5Wochen nicht weiter...



Bisher habe ich:




Code:
#!/bin/sh
if ping -c $1 >
then
echo "Bitte eine neue IP-Adresse angeben."
read neue_ip
echo "Bitte eine neue Subnetzmaske eingeben."
read neue_subnetzmaske

exit 0

base=172.21.

for ((g=1; g < 254; g+=1))
do echo
base=$base$g
for ((n=1; n < 254; n+=1))

do
ip=$base.$n
if ping -c 1 -w 1 $ip >
then
echo "${ip} is up"
else
echo "${ip} is down"
fi
done done

Gerne auch das gesamte Script überarbeitet, vielen vielen Dank <- Wäre schön, da meine Geduld am Ende ist.



Gruß,

BorneBjoern

Stuemper

  • »BorneBjoern« ist männlich

Beiträge: 897

Wohnort: Gorl-Morx-Stodt (fuer alle nicht Sachsen: Chemnitz) aber mal wieder in Dresden !!! ;)

  • Nachricht senden

2

17.02.2012, 11:01

Hallo Marry,

Zitat

Ich bin dabei ein Script(mit Nano) zu schreiben.

Mit welchem Editor du dein Script schreibst ist eigentlich egal, wichtiger ist vielmehr, fuer welche Shell das Skript gedacht ist. ;)
Der Shebang Zeile entnehme ich aber, dass es Bash Script sein soll.
  1. Wobei du nicht davon ausgehen kannst, dass /bin/sh auf allen Systemen ein Link zur bash ist. - Besser waere dann /bin/bash oder /usr/bin/bash je nachdem, wo das Binary auf deinem System liegt.
  2. solltest du zu Beginn auch die Variable PATH definieren, damit alle Befehle auch dann ausgefuehrt (bzw gefunden) werden koennen, wenn es kein Environment gibt, auf welches das Script zurueckgreifen kann (bestes Beispiel: das Script wird per cron-job gestartet)
  3. was genau sind die Punkte, an denen du nicht weiter kommst?
for Windows problems: reboot
for Linux problems: be root

tomm.fa

Wandelnde Fehlfunktion

  • »tomm.fa« ist männlich

Beiträge: 15

Wohnort: Ostwestfalen

  • Nachricht senden

3

19.02.2012, 21:42

Signatur? Liest doch sowieso niemand.

linuxerr

Prof. Dr. Schlaumeier

  • »linuxerr« ist männlich

Beiträge: 8 557

Wohnort: Mecklenburg, zur Entwicklungshilfe in Chemnitz/Sachsen ;-)

  • Nachricht senden

4

25.02.2012, 10:20



Hallo,

ich habe mir das alles mal durchgelesen und will auch mal ein bisschen antworten, also

Der gute Tipp war der verweis auf nmap, damit löst du das problem sofort, wenn das alles mit ping geschehen soll, dann gibt es ein paar möglichkeiten,
die 1. wäre ein broadcast-ping, z.B ping -b 192.168.0.255, der funktioniert aber seit einiger Zeit nicht mehr, da auf aktuellen Systemen die Antwort auf Broadcastrufe per default abgestellt ist.
die 2. wäre ein ping auf alle hosts des subnetzes, das kann eine Weile dauern, das ist schon korrekt, es handelt sich hier aber um ein Multitasking-system und man kann mehrere befehle quasi zugleich absenden, und muss nicht warten, bis der befehl ausgeführt ist. das könnte z.B. so aussehen:

Quellcode

1
2
3
4
5
#!/bin/bash
for ADDR in $( seq 1 254 )
do
 ping -c1 -w1 192.168.0.${ADDR}  &> /dev/null &
done

das läuft relativ fix durch, denn das angehängte & schickt alle pings in den Hintergrund.
Jetzt musst du natürlich testen, wann alle pings beendet sind, das machst du mit dem befehl jobs, der gibt eine Liste der laufenden Hinergrundprozesse zurück, und wenn die wieder leer ist, sind die pings durchgelaufen. Das testet man z.B. mit

Quellcode

1
2
3
4
while  jobs | grep "Running" &> /dev/null
do
 sleep 1
done

Die Ausgabe von jobs wird mit grep getestet, ob das wort Running vorkommt, denn dann läuft noch ein Ping. Wenn das der Fall ist, wird eine Sekunde gewartet und erneut getestet.
Wenn alles durchgelaufen ist, kannst du die Informationen aus der arb-Tabelle des Rechners lesen.

Quellcode

1
grep  -v "00:00:00:00:00:00"  /proc/net/arp

In der Datei /proc/net/arp lässt du nach allen Einträgen suchen, die nicht die MAC "00:00:00:00:00:00" besitzen, das sind die Rechner, die bisher Kontakt aufgenommen haben, das sollte die gesuchte Liste sein.
Also insgesamt

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash
(
for IP in $( seq 0 254 )
do
 ping -c1 -w1 192.168.0.${IP} &> /dev/null &
done
while jobs | grep  "Running" &> /dev/null
do
 echo -n "."
 sleep 1
done
)
grep -v "00:00:00:00:00:00"  /proc/net/arp

Ich habe den jobs-Test noch in eine Subshell gepackt, falls dein Programm noch andere Hintergrundprozesse erzeugt und das Script dadurch nicht durcheinanderkommt.
So, das sollte als TIPP reichen, denn es lässt sich noch einiges verbessern (Netzwerkmasken beachten, quota-setzen, etc...)
Die Rechtschreibfehler in diesem Beitrag sind nicht urheberrechtlich geschützt.
Jeder der einen findet darf ihn behalten und in eigenen Werken weiterverwenden.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »linuxerr« (25.02.2012, 10:43)


Thema bewerten