lehnau
Goto Top

Batchfile zum Pingen erstellen mit Schleife

System Windows XP SP3

Guten Tag,

ich würde gern ein script erstellen mit dem ich einen gewissen ip-bereich nacheinander anpingen kann.
eine ausgabe in einer txt datei ist optional falls es nicht anders geht.
die ersten 3 ip oktetten sind fest und die letzte soll halt hochzählen.

der sinn des ganzen ist das ich feststellen möchte welche ip adressen vergeben sind.

ich verzweifle da gerade.

mit freundlichen Grüßen
Kommentar vom Moderator Biber am 27.06.2012 um 19:13:28 Uhr
Verschoben von "Windows oder watt" nach "Batch & Shell"

Content-ID: 187067

Url: https://administrator.de/contentid/187067

Ausgedruckt am: 05.11.2024 um 12:11 Uhr

Penny.Cilin
Penny.Cilin 26.06.2012 aktualisiert um 12:28:50 Uhr
Goto Top
Dös geht so:
for /l %%f in (1, 1, <endwert>) do @ping -n 1 <iprange>.%%f | find "TTL"  
pause

<endwert> und <iprange< muss angepasst werden.

Auf der kommandozeile funktioniert es folgendermaßen: for /l %f in (1, 1, 20) do @Ping -n 1 192.172.168.%f | find "TTL"

[edit] Syntaxfehler bearbeitet.
Lehnau
Lehnau 26.06.2012 um 11:20:26 Uhr
Goto Top
danke für die schnelle antwort,

aber wenn ich das so eingebe dann geht das batchfenster sehr schnell wieder zu und ich kann nur gerade noch so erkennen das er was wegen der syntax bemängelt
Penny.Cilin
Penny.Cilin 26.06.2012 um 11:26:03 Uhr
Goto Top
OK, mein Beispiel ist für die Commandline.

Hänge ein
 pause 
ans Ende des batches.
Lehnau
Lehnau 26.06.2012 um 11:35:55 Uhr
Goto Top
tut mir echt leid ich bin ungern der spaßverderber,...

aber mit pause bzw einfach nur in die cmd eingegeben bringt es kein ergebnis. meine änderung betreffen nur die end ip und die eigentliche netzip.
Penny.Cilin
Penny.Cilin 26.06.2012 um 11:41:54 Uhr
Goto Top
Dann kopiere mal die zwei Zeilen und erstelle ein Batch. Passe endwert und iprange an, dann sollte es funktionieren.
Skyemugen
Skyemugen 26.06.2012 um 12:52:24 Uhr
Goto Top
Aloha,

naja, Penny hat es eben für eine Batch geschrieben und nicht für die CMD, bei der CMD-Ausführung musst du die Prozentzeichen halbieren face-wink

greetz André
Lehnau
Lehnau 26.06.2012 um 12:54:02 Uhr
Goto Top
habs so gemacht... im cmd prompt wird mir dann minutenlang die erste zeile angezigt ohne das sichtlich etwas passiert... irgendwann sagt er dann das ich eine beliebige taste drücken soll und cmd schließt sich wieder
Penny.Cilin
Penny.Cilin 26.06.2012 um 12:57:39 Uhr
Goto Top
Zitat von @Skyemugen:
Aloha,

naja, Penny hat es eben für eine Batch geschrieben und nicht für die CMD, bei der CMD-Ausführung musst du die
Prozentzeichen halbieren face-wink

greetz André

Ich hatte es ursprünglich für die Commandshell gepostet. Und dann für den Batch angepasst.
Man könnte es erweitern, indem man die Parameter <iprange> und <endwert> abfragt, somit wäre es etwas variabler.

ich habe mir ein DOSKEY Macro erstellt
Scan=for /l %f in (1, 1, $2) do @ping -n 1 $1.%f | find "TTL"
so brauche ich nur noch das Netz und die Range angeben.
Lehnau
Lehnau 26.06.2012 um 13:01:28 Uhr
Goto Top
Wie gesagt, diese zeichenfolge funktioniert bei mir nicht. ob in der cmd eingegeben oder... in einer batch und dann ausgeführt...
das ist der grund warum ich am verzweifeln bin
Penny.Cilin
Penny.Cilin 26.06.2012 um 13:08:21 Uhr
Goto Top
Was passiert, wenn Du
for /l %f in (1, 1, 20) do @ping -n 1 192.172.168.%f | find "TTL"
auf der Befehlszeile eingibst?

Welche Fehlermeldung bekommst DU?
Lehnau
Lehnau 26.06.2012 um 13:11:27 Uhr
Goto Top
keine fehlermeldung... der cursor springt in die nächste zeile und irgendwann lässt er mich dann in einer neuen befehlszeile wieder eingeben was ich will
Penny.Cilin
Penny.Cilin 26.06.2012 um 13:12:40 Uhr
Goto Top
mach mal ipconfig. gebe dann die ersten 3 teile anstelle von 192.172.168 ein. Du solltest dann zumindest ein Ping bekommen.
Lehnau
Lehnau 26.06.2012 um 13:16:59 Uhr
Goto Top
das habe ich vorhin ja auch gemacht... da passiert nix... face-sad
Penny.Cilin
Penny.Cilin 26.06.2012 um 13:34:47 Uhr
Goto Top
OK, bekommst Du eine Ausgabe, wenn Du
for /l %f in (1, 1, 255) do @ping -n 1 x.x.x.%f
angibst?
Ersetze die x.x.x durch die Netzmaske wo sich Dein Rechner befindet.
Lehnau
Lehnau 26.06.2012 um 13:38:10 Uhr
Goto Top
jetzt kommt was... face-big-smile Danke... face-big-smile
Penny.Cilin
Penny.Cilin 26.06.2012 aktualisiert um 13:57:46 Uhr
Goto Top
Stopp, jetzt erweitern wir das Ganze um einen Filter.
Dazu am Ende das Pipesymbol (|) und find /i "TTL" anfügen. Damit siehst Du nur die aktiven IP Adressen.
Penny.Cilin
Penny.Cilin 26.06.2012 um 14:13:20 Uhr
Goto Top
Unn hier als Batch:
@Echo Off & Setlocal ENABLEDELAYEDEXPANSION
CLS

:: Leeren wir zur Sicherheit die Variablen.
Set RANGE=
SET ENDE=

:: Wir fragen den Adressbereich ab.
Echo.   Geben Sie die den Adressbereich ein (z. B.: 192.172.168)
Set /P Range=
Echo.

:: Wir fragen die letzte zu scannende Adresse ab.
Echo.   Geben Sie den Endbereich ein (z. B: 20)
Set /P  Ende=

:: Diser Adressbereich wird nun angepingt
Echo.   Es werden nun die Adressen %RANGE%.1 bis %RANGE%.%ENDE% gepingt.
Echo.

:: Die FOR Schleife machts doing....
FOR /l %%f in (1,1,%ENDE%) Do @ping -n 1 %RANGE%.%%f | FindStr /I "TTL"  

:: Damit man es auch anschauen kann, eine kleine PAUSE.
Echo.
Echo.   Weiter mit beliebiger Taste.
PAUSE > NUL

:EOF
EndLocal
Medusaman
Medusaman 26.06.2012 aktualisiert um 15:08:01 Uhr
Goto Top
Hallo Lehnau,

dein Problem ist zwar schon gelöst, aber ich habe ein erweitertes Script geschrieben. Schau es dir mal an, vielleicht sind meine Erweiterungen auch für dich nützlich.

MfG Medusaman

@echo off
TITLE IP-Adressen
color F4
:anfang
if exist IP-Adressen.txt del IP-Adressen.txt > nul 
cls
echo Bitte geben Sie den ersten Teil der IP ein! 
echo Dieser sollte folgendem Muster entsprechen 192.168.1.
echo !!!Der letzte Punkt ist wichtig!!!
set /p ip=Ihre IP: 
set /p end=Geben Sie die Endadresse ein! Z.B. 255: 
setlocal enabledelayedexpansion
set /a anzahl=0
IF %end% LEQ 255(		
echo  IP-Adresse            MAC-Adresse            Typ >> IP-Adressen.txt
echo _________________________________________________________  >> IP-Adressen.txt && echo. >> IP-Adressen.txt
for /L %%N IN (1, 1, %end%) DO (
set anzahl
cls
echo Ich arbeite!
ping %ip%%%N -n 1 -l 1 | find "TTL" > nul && cls && echo Ich arbeite! && nslookup %ip%%%N | find "Name" >> nul && cls && echo Ich arbeite! && arp -a %ip%%%N | find "dynamisch" >> IP-Adressen.txt && cls && echo Ich arbeite! && echo. >> IP-Adressen.txt && cls && echo Ich arbeite! && nslookup %ip%%%N | find "Name:" >> IP-Adressen.txt && cls && echo Ich arbeite! && cls && echo Ich arbeite! && echo. >> IP-Adressen.txt && echo --------------------------------------------------------- >> IP-Adressen.txt && echo. >> IP-Adressen.txt && set /a anzahl=!anzahl!+1  
)
if exist IP-Adressen.txt	(
cls
echo Eine Liste der erreichbaren IP-Adressen,
echo sowie der dazugehoerigen MAC-Adressen,
echo der Beziehungstypen
echo und der Geraetenamen in der Domain wurde
echo in der Datei IP-Adressen.txt erstellt.
echo. >> IP-Adressen.txt
echo !anzahl! IP-Adressen wurden gefunden >> IP-Adressen.txt
echo. >> IP-Adressen.txt
echo _________________________________________________________ >> IP-Adressen.txt
pause > nul
start IP-Adressen.txt
QUIT							
) ELSE 	(
echo Das Programm konnte keine IP Adresse finden.
pause > nul
QUIT
)
) ELSE 	(
echo Die Endadresse ist zu gross. Sie darf maximal 255 sein.
pause > nul
goto anfang
)
Penny.Cilin
Penny.Cilin 26.06.2012 um 15:36:36 Uhr
Goto Top
Hallo Medusman,

Du mußt einen Denkfehler in Deinem Skript haben, denn die Liste isst leer.
Medusaman
Medusaman 26.06.2012 um 15:39:23 Uhr
Goto Top
Hallo Penny,

das passt so, was ich aber vergessen hab, ohne eigene Domain funktioniert das nicht. Wenn die IP nicht über nslookup aufgelöst werden kann gibt es nix aus.

Sorry, hätte ich dazu schreiben sollen.

MfG Medusaman
Penny.Cilin
Penny.Cilin 26.06.2012 aktualisiert um 15:55:02 Uhr
Goto Top
hallo Medusaman,

wieso benötigst Du eine eigene Domain? Ein NSLOOKUP auf den DNS sollte doch reichen?

Und ein Test auf einem Memberserver bringt mir 0 Adressen zurück.
Per Befehl auf der Commandline
for /l %f in (1, 1, 255) do @ping -n 1 <range>.%f | findstr /i "ttl" 
bekomme ich jede Menge Adressen zurück.

fragt penny
Medusaman
Medusaman 26.06.2012 um 15:56:47 Uhr
Goto Top
Und nochmal sorry, nicht Domain, sondern einen DNS der die Namen auflöst. Hast recht face-smile
Penny.Cilin
Penny.Cilin 26.06.2012 um 15:58:56 Uhr
Goto Top
Aber trotzdem, mit deinem Skript werden mir 0 Adressen angezeigt.
Medusaman
Medusaman 26.06.2012 um 16:01:11 Uhr
Goto Top
Bei mir funktioniert es ohne Probleme und gibt mir dann eine schöne Liste aus:

IP-Adresse MAC-Adresse Typ
_________________________________________________________

192.168.100.1 ff-ff-ff-ff-ff-ff dynamisch

Name: max.blub.de
Medusaman
Medusaman 26.06.2012 um 16:07:21 Uhr
Goto Top
Versuch es mal damit:

@echo off
TITLE IP-Adressen
color F4
:anfang
if exist IP-Adressen.txt del IP-Adressen.txt > nul 
cls
echo Bitte geben Sie den ersten Teil der IP ein! 
echo Dieser sollte folgendem Muster entsprechen 192.168.1.
echo !!!Der letzte Punkt ist wichtig!!!
set /p ip=Ihre IP: 
set /p end=Geben Sie die Endadresse ein! Z.B. 255: 
setlocal enabledelayedexpansion
set /a anzahl=0
IF %end% LEQ 255 	(
echo  IP-Adresse            MAC-Adresse            Typ >> IP-Adressen.txt
echo _________________________________________________________  >> IP-Adressen.txt && echo. >> IP-Adressen.txt
for /L %%N IN (1, 1, %end%) DO (
set anzahl
cls
echo Ich arbeite!
ping %ip%%%N -n 1 -l 1 | find "TTL" > nul && cls && echo Ich arbeite! && cls && echo Ich arbeite! && arp -a %ip%%%N | find "dynamisch" >> IP-Adressen.txt && cls && echo Ich arbeite! && echo. >> IP-Adressen.txt && cls && echo Ich arbeite! && cls && echo Ich arbeite! && cls && echo Ich arbeite! && echo. >> IP-Adressen.txt && echo --------------------------------------------------------- >> IP-Adressen.txt && echo. >> IP-Adressen.txt && set /a anzahl=!anzahl!+1  
)
if exist IP-Adressen.txt	(
cls
echo Eine Liste der erreichbaren IP-Adressen,
echo sowie der dazugehoerigen MAC-Adressen
echo und der Beziehungstypen wurde
echo in der Datei IP-Adressen.txt erstellt.
echo. >> IP-Adressen.txt
echo !anzahl! IP-Adressen wurden gefunden >> IP-Adressen.txt
echo. >> IP-Adressen.txt
echo _________________________________________________________ >> IP-Adressen.txt
pause > nul
start IP-Adressen.txt
QUIT								
) ELSE 	(
echo Das Programm konnte keine IP Adresse finden.
pause > nul
QUIT
)
) ELSE 	(
echo Die Endadresse ist zu gross. Sie darf maximal 255 sein.
pause > nul
goto anfang
)
Penny.Cilin
Penny.Cilin 26.06.2012 um 16:09:55 Uhr
Goto Top
hier leider nicht face-sad(

Ich versuche mal die Monsterzeile zu verstehen. Nutze Win XP.
Medusaman
Medusaman 26.06.2012 um 16:19:33 Uhr
Goto Top
Ist eigentlich ganz simpel

ping %ip%%%N -n 1 -l 1 | find "TTL" > nul ping mit der IP
&& nslookup %ip%%%N | find "Name" >> nul
nslookup mit der IP
&& arp -a %ip%%%N | find "dynamisch" >> IP-Adressen.txt arp mit der IP
&& nslookup %ip%%%N | find "Name:" >> IP-Adressen.txt
noch ein nslookup mit der IP

Der Rest mit && echo Ich arbeite && und sowas ist alles nur für die Optik.
Da das alles mit && verknüpft ist werden nur Adressen aufgezeichnet, deren Name auch aufgelöst werden können.
Ich arbeite auch noch unter XP.
Penny.Cilin
Penny.Cilin 26.06.2012 um 16:30:49 Uhr
Goto Top
Ich habe grade herausgefunden, das arp -a mir keine Auflistung gibt.
Warum weiß ich jetzt noch nicht.
Den Rest habe ich noch nicht geprüft.

ich hangele mich schritt für schritt weiter.
Medusaman
Medusaman 26.06.2012 um 18:36:22 Uhr
Goto Top
Arbeitest du mit statischen Arp Einträgen?
Penny.Cilin
Penny.Cilin 27.06.2012 um 09:01:13 Uhr
Goto Top
Zitat von @Medusaman:
Arbeitest du mit statischen Arp Einträgen?

Moin Medusaman,

nicht daß ich wüßte. Ich habe grade mal einen arp -a ausgeführt und bekomme nun Rückmeldung. Ich weiß jetzt auch nicht, ob und wann der ARP-Cache gelöscht wird.
Murzel
Murzel 27.06.2012 aktualisiert um 23:17:53 Uhr
Goto Top
hi,
probier mal

http://www.heise.de/download/network-scanner-1113270.html

oder nmap, gibts auch fuer windows

nmap.org
Medusaman
Medusaman 27.06.2012 um 23:45:06 Uhr
Goto Top
Hi Murzel,

ein guter Tipp face-smile

MfG Medusaman
Murzel
Murzel 28.06.2012 um 01:49:45 Uhr
Goto Top
Zitat von @Medusaman:
Arbeitest du mit statischen Arp Einträgen?

kurze frag:
was sollen denn statische arp einträge sein?
Medusaman
Medusaman 28.06.2012 um 07:35:03 Uhr
Goto Top
Zitat von @Murzel:

kurze frag:
was sollen denn statische arp einträge sein?

Dabei schreibt man seine arp Tabelle selbst:
www.tecchannel.de/netzwerk/lan/402460/arp_grundlagen_und_spoofing/index8.html