• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Netzwerk Scanner

saretas

Newbie
Hallo,

brauche mal Hilfe, ich möchte eine Scanner der das lokale Netzwerk Scannt,
mit Eingabe der IP Adresse und einen Zähler der hoch zählt, und am ende nur noch
die Rechner anzeigt die Online sind. Irgendwie habe ich mich da verlaufen,
über Hilfe würde ich mich freuen.

Gruß Saretes

Code:
#!/bin/sh
netzwerk=$1
clear
while [ -z $netzwerk ]   
do     
     echo -n " Bitte IP Adresse eingeben z.B. (192.168.xxx.xxx) ";
     read netzwerk 
done

zaehler=1
while [ $zaehler -le 254 ]
do  
      echo $netzwerk$zaehler 
      ping $netzwerk$zaehler   -c 1 -w 1  >/dev/null
      zaehler=$((zaehler + 1))
done 
if [ $? = 1 ]
then
  echo  "ok"
fi
exit
 

gehrke

Administrator
Teammitglied
Für so etwas würde ich nmap verwenden. Aber Du scheinst es selbst coden zu wollen...
 

}-Tux-{

Hacker
Hmm vermutlich willst du sowas wie
Code:
...
ping "$netzwerk$zaehler" -c 1 > /dev/null && echo online
...
Die Hosts koennen aber auch "online" sein und das entsprechende ICMP Paket droppen...

}-Tux-{
 

framp

Moderator
Teammitglied
Ich denke der Vorschlag von Sauerland ist der effizienteste. Du hast nicht gesagt was Du als $1 ins Script reinreichst und was Du als Fehlermeldung bekommst :nosmile:
 
So mal ein wenig aus der Praxis geplaudert: nmap und broadcast-pings funktionieren wunderbar wenn man sich "nur" in einem 24er Netz aufhält. Bei einem 16er Netz werden bei beiden Methoden Rechner als down bzw nicht-up gezeigt die in Wahrheit up sind und auf direkte Ansprache per ping oder nmap reagieren. Dabei ist das Betriebssystem egal, auch ist es egal ob man nur einen Ping laufen läßt oder auch 2 oder mehr. Ich habe dafür keine Erklärung gefunden und scanne mein Netz jetzt sehr stumpf mit einem Script
Code:
ziel="/home/USERNAME/Netzscans/"
start=`date +%Y-%m-%d_%H:%M`
for ((i=1;i<=255;i++))
do
    for ((j=1;j<=255;j++))
    do
	ip=10.1.$i.$j
	arp-scan -r 1 $ip | awk '/10.1/{print $0}' >> "$ziel"netzwerkscan_"$start".txt
	wait
    done
done
end=`date +%Y-%m-%d\ %H:%M`
echo $end >> "$ziel"netzwerkscan_"$start".txt
Damit werden dann tatsächlich alle Rechner gefunden die auch auf ein Ping reagieren, allerdings dauert ein Scan ca. 30 Stunden. Ist also nichts für "mal eben gucken was hier los ist" sondern nur zur wöchentlichen Überprüfung was sich im Netz geändert hat. Achso: Das Script muß als root laufen, da arp-scan nicht unter einem einfachen User läuft.

@saretas,
Du müßtest das Ganze natürlich noch an deinen IP-Bereich anpassen wenn Du tatsächlich große Netzwerke scannen mußt/willst. Bei reinen 24er Netzen sind die anderen Tools deutlich schneller und einfacher in der Handhabung. Für noch größere Netzwerke als 16er ist die Lösung natürlich unbrauchbar weil die Laufzeit einfach zu lang wird.
 
Geier0815 schrieb:
So mal ein wenig aus der Praxis geplaudert: nmap und broadcast-pings funktionieren wunderbar wenn man sich "nur" in einem 24er Netz aufhält. Bei einem 16er Netz werden bei beiden Methoden Rechner als down bzw nicht-up gezeigt die in Wahrheit up sind und auf direkte Ansprache per ping oder nmap reagieren. Dabei ist das Betriebssystem egal, auch ist es egal ob man nur einen Ping laufen läßt oder auch 2 oder mehr. Ich habe dafür keine Erklärung gefunden ..
Die Erklärung ist einfach:
ping = ip > icmp.
nmap = ip > tcp.
In beiden Fällen (tcp + ip) ist der stack auf 4.096 "connects" begrenzt und verwirft bei overflow. Ein "16" Netz hat 65k.
Das Problem beginnt bei subnet/20 = 4k.
Mit "connect" meine ich entweder die Antwort von SYN|ACK auf SYN wenn TCP bzw. icmp wenn IP.
Geier0815 schrieb:
Damit werden dann tatsächlich alle Rechner gefunden die auch auf ein Ping reagieren, allerdings dauert ein Scan ca. 30 Stunden
Für ein subnet/16 mit ethernet ARP broadcasts werden max. 2 Stunden benötigt.
Der timeout (ARP request auf ARP response) ist in RFC definiert auf 100mS.
Entspricht 65k * 100mS / 1000 / 3600 = ca. 2h maximal. (Maximal ist, wenn es keinen Rechner im Netz gibt)
Das Problem liegt bei arp-scan selbst oder du setzt das timeout nicht. Es reicht EIN request mit 100mS response timeout.
Diese einmalige Anfrage genügt deshalb, weil ARP kein echtes broadcast query ist.

Gruß
Gräfin Klara
 
OP
S

saretas

Newbie
Hi,
Danke an alle ich habe es hinbekommen.
Auch für die Tipps und Ideen.

hier mein Ergebnis.
Code:
#!/bin/sh
netzwerk=$1
clear
while [ -z $netzwerk ];    
do     
     echo -n " Bitte IP Adresse eingeben z.B. (192.168.104.XXX) ";
     read netzwerk 
done
zaehler=1
while [ $zaehler -le 254 ]
do  
    ping -c1 -w1 $netzwerk$zaehler >/dev/null 2>&1; if [ $? -eq 0 ] ; then echo "$netzwerk$zaehler" ;fi 
   zaehler=$(($zaehler+1))
done 
exit


Gruß saretas
 

uhelp

Member
Code:
nmap -PE  -T4 --ttl 1 10.10.10.1-255
Nacht nur ICMP Ping Scan (-PE ) für ein Subnetz (10.10.10.1-255), findet offene Ports aus den nmap-spezifisch definierten 1000 well-known Ports.
Und das nur über einen Hop /--ttl 1) mit maximaler Geschwindigkeit (-T4)
nmap macht automatisch immer auch einen ARP Scan.

Außerdem kann man noch -PE und -PM angeben, was ein paar mehr ICMP Scans durchführt.
(Die Pings werden von Firewalls oft geschluckt, obwohl jeder Host laut RFC zu antworten hätte.)
Lässt sich mit den beiden ICMP Scanarten ausgleichen.

Schneller als diese Scans dürfte dein Script nicht sein.
Kannst mal spasshalber mit iftop zugucken, wieviele Probes nmap parallel rausballert.
Das Ergebnis wird schneller dasein, als du die Probes lesen kannst.
 
Oben