Batch Ping Log oder alle aktiven Computer im netzwerk finden und protokollieren
01.07.2010
00:43:42 Uhr8754 Aufrufe
24 Antworten
00:43:42 Uhr
24 Antworten
Hilfreich +2
Hin und wieder findet man ja Fragen, deren Antwort man mal wußte, deren Lösung aber dann nur mit "einigen anpassungen" funktionieren.
Oder andersherum, wie bekomme ich eine Liste aller eingeschalteten Computer samt der dazugehörigen IP Adresse, wenn kein DHCP Server im Einsatz ist
(Ja das ist eher ein Tipp keine Anleitung und eigentlich ne olle Kammelle, aber nach der Erfahrung der letzten Tage immer noch aktuell)
Der Titel ist hoffentlich aussagekräftig genug, um weitere Fragen für die Aufgabe (Problem wäre überzogen) im vorhinein zu beantworten und hoffentlich weitere Ideen von anderen mal "in einen Topf" zu werfen.
Oder andersherum, wie bekomme ich eine Liste aller eingeschalteten Computer samt der dazugehörigen IP Adresse, wenn kein DHCP Server im Einsatz ist
(Ja das ist eher ein Tipp keine Anleitung und eigentlich ne olle Kammelle, aber nach der Erfahrung der letzten Tage immer noch aktuell)
Der Titel ist hoffentlich aussagekräftig genug, um weitere Fragen für die Aufgabe (Problem wäre überzogen) im vorhinein zu beantworten und hoffentlich weitere Ideen von anderen mal "in einen Topf" zu werfen.
01.
rem der Code funktioniert und während der Laufzei kommt viel "unnützer" Text, also darf das @echo off hier gerne stehen 02.
@echo off 03.
rem um alle Rechner in seinem Subnetz zu finden, sollte man mal das "Netz" suchen - das Gateway wäre da doch ein Ansatzpunkt 04.
rem anstatt - wie beim "alten" Script das Netzwerk als Variable zu nehmen, lassen wir das den Rechner rausfinden 05.
rem es gibt ja auch inaktive NICs, die "erkennt" man aber beim Ipconfig 06.
rem und zwar "so" (endlich mal "Quelltext") 07.
for /f "tokens=2 delims=:" %%a in ('"ipconfig|find "gateway""') do (for /f "tokens=1,2,3 delims=." %%b in ("%%a") do if not "%%b"==" " call :netz %%b.%%c.%%d.) 08.
rem verstanden, was die zwei Schleifchen, die sogar verschachtelt sind - machen - nein - dann ein rem vors @echo off schreiben und for das goto end eine Pause ;-) 09.
10.
goto end 11.
12.
rem ein Class C Netzwerk hat ja 254 nutzbare Adressen, und mit dem Gateway kennen wir ja die ersten 3 oktette 13.
rem und mit einer simplen Schleife hängen wir alle 254 Adressen als letztes Oktett an die vorher gefundenen ersten 3 Oktette dran. 14.
rem Und weil 254 sekunden und ein paar zerquetschte ganz schön lang werden können, mit einer "Fortschrittsanzeige im Fenstertitel" 15.
16.
:netz 17.
for /l %%i IN (1,1,254) DO (title %1%%i && call :host %1%%i) 18.
goto:eof 19.
20.
:host 21.
rem der Horst hat ja auch einen Namen, nur welchen? 22.
for /f "tokens=2 delims= " %%A in ('ping -a %1 -n 1 ^| FIND "[%1]"') DO ECHO.%%A;%1>>mein_netz.log 23.
goto:eof 24.
25.
:endViele andere Wege führen nach Rom, viele davon findet man hier und ja ist per anno keine Anleitung, aber für die spätere Suche - als Anleitung vielleicht doch sinnvoller, als die ganzen Antworten auf ähnliche Fragen, die leider nicht so gefunden werden, wie man sich das beim schreiben gewünscht hat.
01.
rem dieser Ansatz ist eigentlich viel kürzer, denn das sind nur zwei Schleifen. 02.
rem natürlich hat der aber auch wieder einen Haken, man findet so nur die Rechner, die in der Domain angemeldet sind - keine Drucker / Swutche usw. 03.
rem aber weil die (noch) nicht verschachtelt sind mit einer "temporären" log Datei "aktive_systeme.log" die am Ende gelöscht wird 04.
rem erstmal per Net view alle Systeme in eine Liste packen 05.
rem besonderheit bei der Ausgabe von Net view - ist ja - der Rechnername steht hinter zwei \ (daher delims=\) 06.
rem gefolgt von einer evtuellen Beschreibung - daher (delims=\ ) und das "Tokens=1,2" 07.
rem die ersten drei Zeilen sind überschriften im großen Netz nur z.B durch ein Net view|more ersichtlich. 08.
rem daher skip 3 09.
rem und auch hier - das dauert und man will sehen, wo er gerade ist - daher ein Title in der Schleife 10.
:script_start 11.
@echo off 12.
for /f "skip=3 tokens=1,2 delims=\ " %%a in ('"net view"') do ( 13.
title %%a 14.
ping %%a -n 1 |find "[">>aktive_systeme.log 15.
) 16.
17.
rem jetzt die eben erstellte Liste um die "nutzlosen" Spalten bereinigen den Computername und dessen IP als CSV ausgeben 18.
19.
for /f "tokens=2,3 delims=[] " %%a in (aktive_systeme.log) do echo %%a,%%b>>mein_netz.csv 20.
rem die temoräre log Datei löschen 21.
del aktive_systeme.logweitere Funde zum Thema: (suchmaschinen optimierung?)
Ping LOG per Batch auswerten
Statt sich die lokale Ip per Ipconfig zu besorgen und da - je nach Betriebsystemsprache nach unterschiedlichen Texten zu suchen, geht natürlich auch:
01.
for /f "tokens=2 delims=[]" %%a in ('"ping %computername% -n 1|find "[""') do echo %%aUnd wenn jemand "mal eben kurz -auch ohne DHCP Server - die Mac Adresse eines Windows Systems wissen will..
01.
nbtstat -a Rechnername |find "MAC Adress" 02.
rem bzw. 03.
nbtstat -A IP.A.dre.sse |find "MAC Adress" 04.
rem und wie das dann "schön" für alle Systeme und sortiert in einer Liste landet -siehe obenVerbesserungsvorschläge immer gerne hierher
Diese Anleitung - bzw. der Script code ist Open Source und steht unter der Timobeil Lizenz - das bedeutet Erweiterungen sind gewünscht, müssen aber jederman/frau - hier - zugänglich gemacht werden.
Gruß
kkboy94 schreibt am 01.07.2010 um 15:57:43 Uhr
Hey,
Danke für die klasse Anleitung/den Tipp
Das habe ich jetzt schon des öfteren gesehen, aber ich habe noch nicht verstanden warum das pipe vor dem FIND mit ^ maskiert wird?
Ist es normal,dass auch noch die DNS-Suffixsuchliste mit im Log steht?
Danke für die klasse Anleitung/den Tipp
for /f "tokens=2 delims= " %%A in ('ping -a %1 -n 1 ^| FIND "[%1]"') DO ECHO.%%A;%1>>mein_netz.log Das habe ich jetzt schon des öfteren gesehen, aber ich habe noch nicht verstanden warum das pipe vor dem FIND mit ^ maskiert wird?
Ist es normal,dass auch noch die DNS-Suffixsuchliste mit im Log steht?
kkboy94 schreibt am 01.07.2010 um 19:00:21 Uhr
Man könnte doch auch in der ersten Batch anstatt nach dem Gateway zu suchen, einfach die Stelle in der Schleife hiermit ersetzen oder?
ipconfig/all | findstr "IP-Ad"
Dann würde ja jede IP-Adresse gesucht und davon dann jeweils die ersten 3 Oktette genommen. Liege ich mit der Annahme richtig?
ipconfig/all | findstr "IP-Ad"
Dann würde ja jede IP-Adresse gesucht und davon dann jeweils die ersten 3 Oktette genommen. Liege ich mit der Annahme richtig?
TimoBeil schreibt am 02.07.2010 um 06:34:19 Uhr
schankedöhn.
Früher - bevor es Findstr gab, wurde find immer mal wieder neu erfunden. Und da nur diese eine Zeile das | mit einem ^ maskiert siehst du auch, dass es nicht mehr nötig ist.

Siehste - was wollte uns der Autor mit seiner Geschichte erzählen?
Anregen selber weiter zu denken
Ehrlicherweise hab ich mir dann beim schreiben gedacht, wer "das" (sein Netz) so einrichtet, hat mit der Batch eh nix am tuten - denn der hat nen DHCP, dem er mit einem einzeiler den ganzen tobuhabohu ausgeben kann.
Gruß
for /f "tokens=2 delims= " %%A in ('ping -a %1 -n 1 ^| FIND "[%1]"') DO ECHO.%%A;%1>>mein_netz.logDas habe ich jetzt schon des öfteren gesehen, aber ich habe noch nicht verstanden warum das pipe vor dem FIND mit ^ maskiert
wird?
Das ist ein alter Hut - bzw. die Zeile hab ich mal irgendwann in meinem Script Ordner verstaut - der seit NT 3.51 mein Begleiter ist.wird?
Früher - bevor es Findstr gab, wurde find immer mal wieder neu erfunden. Und da nur diese eine Zeile das | mit einem ^ maskiert siehst du auch, dass es nicht mehr nötig ist.
Ist es normal,dass auch noch die DNS-Suffixsuchliste mit im Log steht?
Nein - denn auch wenn das ein "Schnellschuss" war - ich hab mit Absicht Ipconfig genommen, nicht das IPconfig /all - und nur das wirft die DNS Searchsuffix mit aus.Zitat von LotPings:
Hallo Timo,
<klugscheissmodus>
im ersten Batch in Zeile 13 fehlt wohl ein rem oder davor ist ein Enter zuviel
In Zeile 12 sollte es korrekterweise heissen :
Hallo Timo,
<klugscheissmodus>
im ersten Batch in Zeile 13 fehlt wohl ein rem oder davor ist ein Enter zuviel
In Zeile 12 sollte es korrekterweise heissen :
> rem ein Klasse C Netzwerk hat ja 254 nutzbare Adressen... > </klugscheissmodus>
Gruß
LotPings
@Lotofpinks - schau mal auf die Uhrzeit und danke für den Hint Gruß
LotPings
Zitat von kkboy94:
Man könnte doch auch in der ersten Batch anstatt nach dem Gateway zu suchen, einfach die Stelle in der Schleife hiermit
ersetzen oder?
Man könnte doch auch in der ersten Batch anstatt nach dem Gateway zu suchen, einfach die Stelle in der Schleife hiermit
ersetzen oder?
Siehste - was wollte uns der Autor mit seiner Geschichte erzählen?
Anregen selber weiter zu denken
ipconfig/all | findstr "IP-Ad"
Ja - aber bei Notenbüchern mit Wlan, VPN Tunnel usw. wäre das dann extrem komplex und deshalb hab ich den Weg gewählt - der Natürlich dann - wenn es nur ein Netz ohne Gateway gibt - auch nicht funktioniert.Dann würde ja jede IP-Adresse gesucht und davon dann jeweils die ersten 3 Oktette genommen. Liege ich mit der Annahme
richtig?
Theoretisch - ursprünglich wollte ich ja - aber dann war ich doch zu müde noch aufzeigen - wie man die Subnetzmaske auswertet - denn und da ist mit Lot zuvorgekommen - das "Ding" geht ja vom std. aus - ein Netz (bzw. ein IP Bereich) -das bei 0 anfängt und dessen Broadcast die 255 ist.richtig?
Ehrlicherweise hab ich mir dann beim schreiben gedacht, wer "das" (sein Netz) so einrichtet, hat mit der Batch eh nix am tuten - denn der hat nen DHCP, dem er mit einem einzeiler den ganzen tobuhabohu ausgeben kann.
01.
netsh dhcp server scope (netz) show clients 1>logfile.iniGruß
kkboy94 schreibt am 02.07.2010 um 18:13:54 Uhr
Zitat von TimoBeil:
> Ist es normal,dass auch noch die DNS-Suffixsuchliste mit im Log steht?
Nein - denn auch wenn das ein "Schnellschuss" war - ich hab mit Absicht Ipconfig genommen, nicht das IPconfig /all - und
nur das wirft die DNS Searchsuffix mit aus.
Nein - denn auch wenn das ein "Schnellschuss" war - ich hab mit Absicht Ipconfig genommen, nicht das IPconfig /all - und
nur das wirft die DNS Searchsuffix mit aus.
Ist es also nicht möglich die DNS Searchsuffix rasuzunehmen?
Gruß zurück
TimoBeil schreibt am 02.07.2010 um 18:34:01 Uhr
moin,
Wenn - was ich nicht mache - ich hier also irgendwas dazu schreibe - dann findest doch keiner, der lieber nach 3 sek. suchen nix findet und lieber ne neue Frage stellt?
Gruß
Zitat von kkboy94:
> Zitat von TimoBeil:
> > Ist es normal,dass auch noch die DNS-Suffixsuchliste mit im Log steht?
> Nein - denn auch wenn das ein "Schnellschuss" war - ich hab mit Absicht Ipconfig genommen, nicht das IPconfig /all
- und
> nur das wirft die DNS Searchsuffix mit aus.
Ist es also nicht möglich die DNS Searchsuffix rasuzunehmen?
Gruß zurück
du sorry, aber ich hab mir die Mühe gemacht ein mindesten 3* von mir behandeltes Thema (Wunsch von anderen) und ich bin ganz sicher garantiert nicht der einzige - nochmal aufzugreifen und etwas aufzuhübschen, weil ich die OT und in eine andere Richtung führenden Fragen für leicht schwierig nachzulesen gehalten habe.> Zitat von TimoBeil:
> > Ist es normal,dass auch noch die DNS-Suffixsuchliste mit im Log steht?
> Nein - denn auch wenn das ein "Schnellschuss" war - ich hab mit Absicht Ipconfig genommen, nicht das IPconfig /all
- und
> nur das wirft die DNS Searchsuffix mit aus.
Ist es also nicht möglich die DNS Searchsuffix rasuzunehmen?
Gruß zurück
Wenn - was ich nicht mache - ich hier also irgendwas dazu schreibe - dann findest doch keiner, der lieber nach 3 sek. suchen nix findet und lieber ne neue Frage stellt?
Gruß
lowbyte1 schreibt am 03.07.2010 um 04:10:32 Uhr
Hi
@TimoBeil
Gute Anleitung...
aber ein bisschen mager, bzw. zu langsam findes du nicht ? ( meine den Scan ).
Hier meine Variante die ein Class-C Subnet in 5-10Sec. Scannt. Vileicht kannst du ja was gebrauchen.
http://www.administrator.de/index.php?con ...
Noch etwas anderes, meiner Meinung nach am Wichtigsten für dein Artikel.
Bei deinem Scan bedienst du dich beim Programm Ping.exe (Baut auf ICMP auf) ,und verlässt dich auch darauf !??
Viele Standard Software Firewall's wie di von Microsoft, blockieren einen Ping(ICMP Type 8 ,Code 0) ! Darum kannst du nicht davon ausgehen, wen dein Pingprogramm nichts erkennt, das der Host auch offline ist !! Villeicht ist er Online und blockiert ICMP!
Aber was du machen kannst ist, den Arp-cache auszuwerten, nachdem du das ganze Subnet gepingt hast (Arp -a) ! Die Adressen(host's) die dann im Arp-cache stehen,sind dan ONLINE !!.
Mein Programm baut auf dieser Methode auf, und erkennt auch Systeme die durch eine Firewall geschützt sind.
lowbyte
@TimoBeil
Gute Anleitung...
aber ein bisschen mager, bzw. zu langsam findes du nicht ? ( meine den Scan ).
Hier meine Variante die ein Class-C Subnet in 5-10Sec. Scannt. Vileicht kannst du ja was gebrauchen.
http://www.administrator.de/index.php?con ...
Noch etwas anderes, meiner Meinung nach am Wichtigsten für dein Artikel.
Bei deinem Scan bedienst du dich beim Programm Ping.exe (Baut auf ICMP auf) ,und verlässt dich auch darauf !??
Viele Standard Software Firewall's wie di von Microsoft, blockieren einen Ping(ICMP Type 8 ,Code 0) ! Darum kannst du nicht davon ausgehen, wen dein Pingprogramm nichts erkennt, das der Host auch offline ist !! Villeicht ist er Online und blockiert ICMP!
Aber was du machen kannst ist, den Arp-cache auszuwerten, nachdem du das ganze Subnet gepingt hast (Arp -a) ! Die Adressen(host's) die dann im Arp-cache stehen,sind dan ONLINE !!.
Mein Programm baut auf dieser Methode auf, und erkennt auch Systeme die durch eine Firewall geschützt sind.
lowbyte
LotPings schreibt am 03.07.2010 um 16:40:50 Uhr
Hallo lowbyte,
schöner Batch mit dem Arp.
Ich habs etwas eingedampft (vor allem ohne temporäre Dateien),
und füge dem Log nur neue IPs in sauber ausgerichteten Spalten zu:
Das Log hat den gleichen Namen wie die Batch mit der Erweiterung Log.
Gruß
LotPings
Edit: Fehler beseitigt.
Edit2: Herstellererkennung überarbeitet
schöner Batch mit dem Arp.
Ich habs etwas eingedampft (vor allem ohne temporäre Dateien),
und füge dem Log nur neue IPs in sauber ausgerichteten Spalten zu:
01.
@Echo off&SetLocal EnableDelayedExpansion 02.
Set Range=192.168.2 03.
Set MacList="%~dp0\IEEEMACLIST.txt" 04.
Set LOG=^>^>"%~dpn0.Log" 05.
Set Start=%time% 06.
Echo Scan vom %Date% %time:~,-3% %Log%" 07.
Arp -d 08.
For /L %%A in (1,1,255) do Start /HIGH /B ping.exe -n 1 -l 0 -f -i 2 -w 1 %Range%.%%A >nul 09.
For /f "Tokens=1,2" %%A in ( 10.
'arp -a ^|find "%Range%"^|findstr /i "dynamisch dynamic statisch static"' 11.
) Do ( 12.
Set "MAC=%%B" 13.
Set "Make=n/a" 14.
For /f "tokens=2*" %%C in ('findstr /i "!MAC:~0,8!" %MacList%') do Set Make="%%D" 15.
Call :ProcessLine %%A %%B !Make! 16.
) 17.
Echo Beginn: %Start% & Echo Fertig: %time% 18.
Goto :Eof 19.
:ProcessLine 20.
Set "IP=%1 " 21.
:: prüfen ob schon da 22.
Findstr "%1.*%2" %LOG:~2% >NUL && (Echo Schon da: %IP:~0,15% %2 %~3 & Goto :Eof) 23.
Echo %IP:~0,15% %2 %~3 24.
%LOG% Echo %IP:~0,15% %2 %~3Gruß
LotPings
Edit: Fehler beseitigt.
Edit2: Herstellererkennung überarbeitet
lowbyte1 schreibt am 03.07.2010 um 18:42:20 Uhr
Hi
Danke.
Dass wollte ich schon längst mal machen. Doch ich schrieb ein Arp-scanner in C und der ist performanter und macht nicht so lärm : ( keine icmp request's mehr, nur Arp).
Aber nett danke.
Aber trotzdem solltest du bei deinem Scan die Geschwindikeit beachte. Meine batch hat 255 adressen in 5-10 sec gescannt. Das ist bei dir sicher nicht der fall.
lowbyte
Danke.
Dass wollte ich schon längst mal machen. Doch ich schrieb ein Arp-scanner in C und der ist performanter und macht nicht so lärm : ( keine icmp request's mehr, nur Arp).
Aber nett danke.
Aber trotzdem solltest du bei deinem Scan die Geschwindikeit beachte. Meine batch hat 255 adressen in 5-10 sec gescannt. Das ist bei dir sicher nicht der fall.
lowbyte
LotPings schreibt am 03.07.2010 um 19:54:06 Uhr
Zitat von lowbyte1:
Aber nett danke.
Aber trotzdem solltest du bei deinem Scan die Geschwindikeit beachte. Meine batch hat 255 adressen in 5-10 sec gescannt.
Das ist bei dir sicher nicht der fall.
Stimmt,Aber nett danke.
Aber trotzdem solltest du bei deinem Scan die Geschwindikeit beachte. Meine batch hat 255 adressen in 5-10 sec gescannt.
Das ist bei dir sicher nicht der fall.
da meine Version die gleiche Technik,
aber keine überflüssigen temporären Batchdateien nutzt,
ist es (auf meinem Notebook über WLan) UNTER 5 Sekunden schnell.
Leider hat es mein DSL während des Fußballspiels durch Gewitterüberspannung gehimmelt,
ich muss jetzt die Ergebnisse manuell über des Nachbarn WLan übertragen
.
Mein Desktop mit core i7-920 braucht im Gbit-Lan nur 1 Sekunde 67 Hundertstel
Gruß
LotPings
lowbyte1 schreibt am 03.07.2010 um 21:37:24 Uhr
Hi
Ok, habs mal durchlaufen lassen ,der letzte gebrauch dieses Scriptes von mir ist auch schon 2-3 Jahre her.
Auf meinem Intel i7-920 @ oc 4*3,8 ghz schafe ich es in 3 sec.
Das C - Programm in 0.5 bis 1 je nach net last. Sec. !
Aber dein Batch ist schon sauberer, das muss ich zugeben. Bin auch nicht wirklich ein "Hirsch" in Batch. Gibt viele die das besser Können, ich bin halt ein C narr. ;) Aber wen man nur Sys Mittel (hat) sicher eine gute lösung.
Setze sowiso nur noch die C Version ein... (professioneller & Silent & ARP only etc.. etc...
lowbyte
Ok, habs mal durchlaufen lassen ,der letzte gebrauch dieses Scriptes von mir ist auch schon 2-3 Jahre her.
Auf meinem Intel i7-920 @ oc 4*3,8 ghz schafe ich es in 3 sec.
Das C - Programm in 0.5 bis 1 je nach net last. Sec. !
Aber dein Batch ist schon sauberer, das muss ich zugeben. Bin auch nicht wirklich ein "Hirsch" in Batch. Gibt viele die das besser Können, ich bin halt ein C narr. ;) Aber wen man nur Sys Mittel (hat) sicher eine gute lösung.
Setze sowiso nur noch die C Version ein... (professioneller & Silent & ARP only etc.. etc...
lowbyte
TimoBeil schreibt am 03.07.2010 um 22:57:07 Uhr
Zitat von lowbyte1:
Hi
Das liegt an der Ping Timelimit, die man mit dem Parameter -w setzen kann.
Und bei Timobeil's Beispielcode, sind es sicher auch die DNS request's und der Netbios name service, eben je nach dem.#
Hi
Das liegt an der Ping Timelimit, die man mit dem Parameter -w setzen kann.
Und bei Timobeil's Beispielcode, sind es sicher auch die DNS request's und der Netbios name service, eben je nach dem.#
Das Ding gehört halt nicht zur Sorte Quick & Dirty - es findet - im Gegensatz zu Lowbytes Version auch meine Apples und das ganze andere "Gedöhns" das in meinem Netz IP spricht - andererseits - meine Firewall keine vom Baumarkt und ordentlich konfiguriert kickt mich (meinen Nic) auch nicht, wie es die andere macht.
Mir persönlich ists wurst, ob ich in einem undokumentierten Netz ohne DHCP nun 255 sekunden oder 3 sekunden brauch um ne Liste der aktiven Systeme zu bekommen - ich hab kein undokumentiertes Netz und Switche, die ich mit Telnet ansprechen kann.
Es ging um ein funktionierendes Beispiel wie man Befehle - die etwas "formatiert" ausgeben irgendwie zu was sinnvollem verhakstückeln kann.
Nicht darum auid einer Batch 255 zweizeilerbatche zu schreiben, die dank kurzem Timellimit usw nur Kisten anzeigen, die grade irgendwas mit dem Netz machen.
Meine Squeezeboxen findet das lowbytsche script - das ich so umgeschrieben habe - das es etwas lahmer läuft 3zeiler - mit der neuen 2.Zeile ping localhost >nul
- nur dann, wenn die gerade aktiv am Server (nicht die Kiste, von der ich das Script starte) saugen und "pumpen" und "so" kickt mich auch die Sonicwall nicht raus und ich muß mit dem Eiphone die Sonicwall beharken, damits Notenbuch wieder reindarf.
Gruß
edit @ low - schon gut - aber beim Cisco braucht man den ganzen Driet eh nicht, egal - ob in B oder C geschrieben - denn ein Cisco kann nur mit nem Shell Script
Und nein - nicht mal die Dübel mit denen die Sonicwall an der Wand hängt kommen vom Baumarkt - die waren dabei
TimoBeil schreibt am 04.07.2010 um 00:17:46 Uhr
...und ich habs wieder aufgeblasen und auch etwas flüssiges bei deinem Code gekickt
Gruß
btw: das - durch die nicht 255 gleichzeitigen Ping funktioniert deutlich besser, als der Lowbytsche Versuch einen angry ip Scanner zu bauen
Die Sonicwall mag auch nach 3* laufen lassen mein Notebook noch.
01.
@Echo off&SetLocal EnableDelayedExpansion 02.
:parameter definieren 03.
for /f "tokens=2,3,4 delims=[.]" %%a in ('"ping %computername% -n 1|find "[""') do Set Range=%%a.%%b.%%c 04.
Set MacList="%~dp0\IEEEMACLIST.txt" 05.
Set LOG=^>^>"%~dpn0.Log" 06.
Set Start=%time% 07.
08.
:check 09.
if exist %MacList% goto scan 10.
wget --help>nul && goto wget 11.
12.
:makegetIEEEMACLIST.html 13.
echo merde - keine IEEEMACLIST.txt und kein wget, bitte den Link in der Webseite speichern unter %maclist% 14.
echo ^<html^> >getIEEEMACLIST.html 15.
echo ^<body^> >>getIEEEMACLIST.html 16.
echo ^<a href="http://standards.ieee.org/regauth/oui/oui.txt"^>rightklick save as IEEEMACLIST.txt and store in root of the script^</a^> >>getIEEEMACLIST.html 17.
echo ^</body^> >>getIEEEMACLIST.html 18.
echo ^</html^> >>getIEEEMACLIST.html 19.
start /wait "getIEEEMACLIST" getIEEEMACLIST.html 20.
if not exist %maclist% echo schade aber auch - war nur eine textdatei, kein Virus && goto scan 21.
22.
:wget 23.
echo cool die IEEEMACLIST.txt wurde zwar nicht gefunden, aber Wget - dont do nothing ill doit 4u 24.
wget http://standards.ieee.org/regauth/oui/oui.txt -OIEEEMACLIST.txt 25.
26.
:scan 27.
Echo Scan vom %Date% %time:~,-3% %Log%" 28.
Arp -d 29.
For /L %%A in (1,1,255) do Start /HIGH /B ping.exe -n 1 -l 0 -f -i 2 -w 1 %Range%.%%A >nul 30.
For /f "Tokens=1,2" %%A in ( 31.
'arp -a ^|find "%Range%"^|findstr /i "dynami stati"' 32.
) Do ( 33.
Set "MAC=%%B" 34.
Set "Make=n/a" 35.
For /f "tokens=2*" %%C in ('findstr /i "!MAC:~0,8!" %MacList%') do Set Make="%%D" 36.
Call :ProcessLine %%A %%B !Make! 37.
) 38.
Echo Beginn: %Start% & Echo Fertig: %time% 39.
Goto :Eof 40.
:ProcessLine 41.
Set "IP=%1 " 42.
:: prüfen ob schon da 43.
Findstr "%1.*%2" %LOG:~2% >NUL && (Echo Schon da: %IP:~0,15% %2 %~3 & Goto :Eof) 44.
Echo %IP:~0,15% %2 %~3 45.
%LOG% Echo %IP:~0,15% %2 %~3Gruß
btw: das - durch die nicht 255 gleichzeitigen Ping funktioniert deutlich besser, als der Lowbytsche Versuch einen angry ip Scanner zu bauen
Die Sonicwall mag auch nach 3* laufen lassen mein Notebook noch.
Aber
- eine Kiste wie z.b Drucker im Tiefschlaf - findet diese kurzping Version natürlich genausowenig, weil Ihre beide euch den gleichen Tricks bedient.
Und von daher - ich schriebs schon anders - lieber gar keine Liste, als eine, die nicht alles zeigt (es war ja eigentlich auch nur proof of concept).
Und von daher - ich schriebs schon anders - lieber gar keine Liste, als eine, die nicht alles zeigt (es war ja eigentlich auch nur proof of concept).
lowbyte1 schreibt am 04.07.2010 um 05:55:43 Uhr
Hi
Du musst mich nicht mit andern verwechseln ! Ok !
Und da drüber lässt sich auch streiten ! Baumarkt? nicht? ;)
Bei mir läuft nur Cisco und 3Com ! Alles ander... bis auf wenige... naja !
Aber sonnst schon ok. Wie gesagt ich nutze mein C Programm, da muss ich auf nichts verzichten ,nicht mal auf Geschwindikeit ( Multible dns requests) etc..
ps: Timobeil, musst es nicht so eng sehen. Finde dein Beitrag dennoch gut ! Gibt (nicht viele User) hier die sich die mühe machen würden.
edit:
Ich will ja die aktiven Systeme, und nicht die die im Tiefschlaf sind !!
lowbyte
Mir persönlich ists wurst, ob ich in einem undokumentierten Netz ohne DHCP nun 255 sekunden oder 3 sekunden brauch um ne Liste der aktiven Systeme zu bekommen - ich hab kein undokumentiertes Netz und Switche, die ich mit Telnet ansprechen kann.
Du musst mich nicht mit andern verwechseln ! Ok !
Sonicwall
Und da drüber lässt sich auch streiten ! Baumarkt? nicht? ;)
Bei mir läuft nur Cisco und 3Com ! Alles ander... bis auf wenige... naja !
Aber sonnst schon ok. Wie gesagt ich nutze mein C Programm, da muss ich auf nichts verzichten ,nicht mal auf Geschwindikeit ( Multible dns requests) etc..
ps: Timobeil, musst es nicht so eng sehen. Finde dein Beitrag dennoch gut ! Gibt (nicht viele User) hier die sich die mühe machen würden.
edit:
eine Kiste wie z.b Drucker im Tiefschlaf - findet diese kurzping Version natürlich genausowenig, weil Ihre beide euch den gleichen Tricks bedient.
Und von daher - ich schriebs schon anders - lieber gar keine Liste, als eine, die nicht alles zeigt.
Und von daher - ich schriebs schon anders - lieber gar keine Liste, als eine, die nicht alles zeigt.
Ich will ja die aktiven Systeme, und nicht die die im Tiefschlaf sind !!
lowbyte
TuXHunt3R schreibt am 05.07.2010 um 22:36:39 Uhr
Hallo ans Forum
Angry IP-Scanner ist für mich hier das Mittel der Wahl, auch wenn manche Virenscanner das Teil als Malware klassifizieren.
Hab früher zu Post-Zeiten (als ich noch nicht Herr über das ganze Netzwerk war und es eine eigene Security-Abteilung gab) mit einem ähnlichen Batch hantiert.
Angry-IPScanner läuft aber bedeutend schneller, da es immer für 64 Ping-Befehle je einen eigenen Thread eröffnet. Ein C-Netz hat man damit in ein paar Sekunden durchgegrast, und die Ergebnisse stimmen garantiert.
Und es muss nicht mal installiert werden, ist eine selbstlaufende Exe:
http://www.angryip.org/w/Home
Gruss
TuXHuNT3R
Angry IP-Scanner ist für mich hier das Mittel der Wahl, auch wenn manche Virenscanner das Teil als Malware klassifizieren.
Hab früher zu Post-Zeiten (als ich noch nicht Herr über das ganze Netzwerk war und es eine eigene Security-Abteilung gab) mit einem ähnlichen Batch hantiert.
Angry-IPScanner läuft aber bedeutend schneller, da es immer für 64 Ping-Befehle je einen eigenen Thread eröffnet. Ein C-Netz hat man damit in ein paar Sekunden durchgegrast, und die Ergebnisse stimmen garantiert.
Und es muss nicht mal installiert werden, ist eine selbstlaufende Exe:
http://www.angryip.org/w/Home
Gruss
TuXHuNT3R
o0ByteRebel0o schreibt am 13.07.2010 um 16:03:57 Uhr
Moin
gefällt mir gut und gibt mir noch ein paar Ideen die ich noch in Powershell umsetzen kann.
So etwas in der Art kann man übrigens auch mit einem 2 Zeiler inPowershell machen (ok, etwas längere Zeilen
). Kleines Beispiel (bis jetzt allerdings etwas weniger Features wie deine Batch):
## einen Bereich durchpingen und bei erfolgreichem Ping DNS Name und IP ausgeben
## dem Skript müssen 3 Werte beim Aufruf übergeben werden, die mit Leerzeichen getrennt sind
## Beispiel:
## BereichPingen.ps1 12 50 54
## In dem Beispiel wird der Bereich 10.155.12.50 bis 10.155.12.54 gepingt.
$bereich = $args[0]
$args[1]..$args[2] | foreach-object {if (test-connection -computername 10.155.$bereich.$_ -count 1 -quiet) {[net.dns]::gethostbyaddress("10.155.$bereich.$_")}} | select hostname,addresslist
Gruß
gefällt mir gut und gibt mir noch ein paar Ideen die ich noch in Powershell umsetzen kann.
So etwas in der Art kann man übrigens auch mit einem 2 Zeiler inPowershell machen (ok, etwas längere Zeilen
## einen Bereich durchpingen und bei erfolgreichem Ping DNS Name und IP ausgeben
## dem Skript müssen 3 Werte beim Aufruf übergeben werden, die mit Leerzeichen getrennt sind
## Beispiel:
## BereichPingen.ps1 12 50 54
## In dem Beispiel wird der Bereich 10.155.12.50 bis 10.155.12.54 gepingt.
$bereich = $args[0]
$args[1]..$args[2] | foreach-object {if (test-connection -computername 10.155.$bereich.$_ -count 1 -quiet) {[net.dns]::gethostbyaddress("10.155.$bereich.$_")}} | select hostname,addresslist
Gruß
LotPings schreibt am 13.07.2010 um 20:28:56 Uhr
Hallo BYteRebel,
das funktioniert hier nur, wenn der Punkt zwischen $bereich und $_ mit einem ` escaped wird.
Es wäre schön wenn du Code in die entsprechenden Code Tags aus der Formatierungshilfe einbetten würdest.
Ein festes Netzwerk im Code schränkt die Nutzung auf ein, kann man doch gleich komplett übergeben.
Gruß
LotPings
das funktioniert hier nur, wenn der Punkt zwischen $bereich und $_ mit einem ` escaped wird.
Es wäre schön wenn du Code in die entsprechenden Code Tags aus der Formatierungshilfe einbetten würdest.
Ein festes Netzwerk im Code schränkt die Nutzung auf ein, kann man doch gleich komplett übergeben.
Gruß
LotPings
o0ByteRebel0o schreibt am 14.07.2010 um 09:29:51 Uhr
Moin moin
habs gerade noch mal durchlaufen lassen, bei mir läufts aber ohne das der Punkt escaped wird.
Danke für den Tipp mit der Formatierungshilfe, werd beim nächsten mal dran denken
Na ja, wollte mir nur Tipparbeit sparen, weil ich es eigentlich immer nur im 10.155er Bereich einsetze. Wenn man es flexibler braucht, kann man natürlich auch die Range komplett übergeben.
CU
habs gerade noch mal durchlaufen lassen, bei mir läufts aber ohne das der Punkt escaped wird.
Danke für den Tipp mit der Formatierungshilfe, werd beim nächsten mal dran denken
Na ja, wollte mir nur Tipparbeit sparen, weil ich es eigentlich immer nur im 10.155er Bereich einsetze. Wenn man es flexibler braucht, kann man natürlich auch die Range komplett übergeben.
CU
buettel schreibt am 11.10.2010 um 14:23:37 Uhr
Ich habe mir auch ein solches Tool gebastelt aber nivßcht mit einer so schön formatierten Ausgabe. Aber sehr hilfreich.
01.
title arptabelle_erstellen 02.
rem ### Wolfgang Risse 03.
rem ### www.risse.net 04.
rem ### erstellt am 19.06.2010 05.
rem ### getestet unter Windows XP 06.
rem ### Die Benutzung ist nur einem privaten Subnetz erlaubt 07.
rem ### Urheberrechte gibts nicht 08.
09.
10.
11.
mode con cols=20 lines=50 12.
color 61 13.
@echo off 14.
set pausendauer=3 15.
for /F "tokens=14" %%i in ('ipconfig^|find "IP-Ad"') do set IP=%%i 16.
17.
for /F "tokens=1,2,3 delims=." %%i in ('echo %IP%') do set IPraum=%%i.%%j.%%k. 18.
19.
20.
rem ### windows kann nur 120 cmd Sitzungen gleichzeitig ausführen 21.
22.
FOR /L %%i in (1;1;100) do ( 23.
start cmd /c ping -l 1 -w 1 -n 1 %IPraum%%%i 24.
echo %IPraum%%%i ) 25.
ping -n %pausendauer% localhost > nul 26.
27.
FOR /L %%i in (101;1;201) do ( 28.
start cmd /c ping -l 1 -w 1 -n 1 %IPraum%%%i 29.
echo %IPraum%%%i ) 30.
ping -n %pausendauer% localhost > nul 31.
32.
FOR /L %%i in (201;1;254) do ( 33.
start cmd /c ping -l 1 -w 1 -n 1 %IPraum%%%i 34.
echo %IPraum%%%i ) 35.
36.
color cf 37.
echo . 38.
echo Arp Tabelle 39.
echo wird erstellt! 40.
echo . 41.
ping -n 8 localhost > nul 42.
arp -a > arp.txt 43.
write arp.txt 44.
ping -n 5 localhost > nul 45.
rem del arp.txt 46.
















