Mit Batch IPs durchpingen und als PC Name in eine .TXT speichern
Tach zusammen!
Ich hab mich dran gemacht, ein Programm zu schreiben, welches 256 IP's durchpingt und die IP's, die es findet, in eine .txt zu schreiben.
so lässt sich ermitteln, wieviele PCs in einem Netzewerk online sind und welche IP diese benutzen.
Das Programm siet zurzeit so aus:
Der Inhalt der ipscan.txt (z.B.):
IPScan
IP erreichbar: 192.168.2.1
Das ganze funktioniert auch soweit, jetzt meine fragen:
1) Was kann ich besser machen ?
2) Besteht die Möglichkeit, dass in der .txt ebenfalls der PC Name steht? (also: IP erreichbar: 192.168.2.345 - PC Name)?
3) Gibt es irgendein Befehl, der das Programm, bzw den Ping beschleunigt? Bisher benötigt er für die 256 Pings ca 3 - 5 minuten.
Danke im Vorraus
mfg
Ich hab mich dran gemacht, ein Programm zu schreiben, welches 256 IP's durchpingt und die IP's, die es findet, in eine .txt zu schreiben.
so lässt sich ermitteln, wieviele PCs in einem Netzewerk online sind und welche IP diese benutzen.
Das Programm siet zurzeit so aus:
@ echo off
cls
title IPScan
SET T=%TIME:~0,5%
rem ############
echo IP parameter eingeben (ip) Bsp: 192.168.ip.110
set /p ip=
rem ############
echo Achtung! Durch druecken einer Taste startet der Scan. Dies kann einige Zeit
echo in Anspruch nehmen.
pause>nul
>ipscan.txt echo IPScan
echo Ping gestartet
rem ############
FOR /L %%a IN (0, 1, 255) DO ( ping 192.168.%ip%.%%a -n 1 -w 300 | find "TTL" >nul && echo IP erreichbar: 192.168.%ip%.%%a >>ipscan.txt
Echo Pinge 192.168.%ip%.%%a
)
rem #############
echo Ping ausgefuert. Ipscan.txt wird nach dem druecken einer Taste geloescht.
ipscan.txt
pause>nul
del ipscan.txt
rem ##ende##
IPScan
IP erreichbar: 192.168.2.1
Das ganze funktioniert auch soweit, jetzt meine fragen:
1) Was kann ich besser machen ?
2) Besteht die Möglichkeit, dass in der .txt ebenfalls der PC Name steht? (also: IP erreichbar: 192.168.2.345 - PC Name)?
3) Gibt es irgendein Befehl, der das Programm, bzw den Ping beschleunigt? Bisher benötigt er für die 256 Pings ca 3 - 5 minuten.
Danke im Vorraus
mfg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 74950
Url: https://administrator.de/contentid/74950
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
12 Kommentare
Neuester Kommentar
Hallo Spackenbremse und willkommen im Forum!
Falls Dich die Suchfunktion noch nicht hierher geführt hat: Rechnernamen zu seiner IP per Batch ermitteln, wie?
Zum Thema Beschleunigung: Je nach Verwendungszweck könnte vielleicht auch
genügen.
Grüße
bastla
P.S.: Wenn in Deiner Liste wirklich einmal
IP erreichbar: 192.168.2.345 - PC Name
steht, solltest Du anfangen, Dir Gedanken zu machen ...
Falls Dich die Suchfunktion noch nicht hierher geführt hat: Rechnernamen zu seiner IP per Batch ermitteln, wie?
Zum Thema Beschleunigung: Je nach Verwendungszweck könnte vielleicht auch
@echo off & setlocal
for /f "delims=\ " %%i in ('net view^|findstr /b "\\"') do call :ProcessClient %%i
goto :eof
:ProcessClient
for /f "tokens=2" %%a in ('nslookup %1') do set IP=%%a
echo %IP% - %1
Grüße
bastla
P.S.: Wenn in Deiner Liste wirklich einmal
IP erreichbar: 192.168.2.345 - PC Name
steht, solltest Du anfangen, Dir Gedanken zu machen ...
Hallo backenbremse!
Du möchtest offensichtlich das Rad neu erfinden; was Du da vorhast geht doch flott und einfach mit nmap: nmap -sL [StartIP/End] > ipliste.txt, wobei in ipliste.txt die zu pingenden IPs stehen.
Mit
@echo off
for /f "tokens=*" %%I in (ipliste.txt) do call :pinger %%I
goto :eof
:pinger
ping -n 1 %1
if %ERRORLEVEL% ==0 echo %1 >> ergebnis.txt
:: DONE
In der ergebnis.txt sollten sich dann die erreichbaren IPs verzeichnet finden
saludos
gnarff
Du möchtest offensichtlich das Rad neu erfinden; was Du da vorhast geht doch flott und einfach mit nmap: nmap -sL [StartIP/End] > ipliste.txt, wobei in ipliste.txt die zu pingenden IPs stehen.
Mit
@echo off
for /f "tokens=*" %%I in (ipliste.txt) do call :pinger %%I
goto :eof
:pinger
ping -n 1 %1
if %ERRORLEVEL% ==0 echo %1 >> ergebnis.txt
:: DONE
In der ergebnis.txt sollten sich dann die erreichbaren IPs verzeichnet finden
saludos
gnarff
Hallo Spackenbremse!
Zu Deinem (ursprünglichen) Batch noch die gewünschte Ergänzung (als Unterprogramm)
und einige Hinweise:
Der Adressanteil "192.168" wird an vielen Stellen im Batch benötigt und daher, so wie zB auch der Dateiname der Logdatei, am Anfang in einer Variablen hinterlegt, was den Batch übersichtlicher und vor allem auch leichter anpassbar macht. Da diese Variablen nur innerhalb dieses Batches benötigt werden, sorgt ein "setlocal" dafür, dass sie am Ende wieder gelöscht werden.
Da die Logdatei ohnehin wieder gelöscht wird, wäre sie IMHO besser im Temp-Verzeichnis platziert.
Du hattest eine Variable %T% für die Startzeit gesetzt, aber in weiterer Folge nicht verwendet.
Die Zählschleife würde ich nur von 1 bis 254 laufen lassen (wiewohl sich der Zeitgewinn dadurch in Grenzen hält ).
Grüße
bastla
[Edit] Hatte Deinen zwischenzeitlichen Kommentar nicht gesehen. [/Edit]
Zu Deinem (ursprünglichen) Batch noch die gewünschte Ergänzung (als Unterprogramm)
@echo off & setlocal
cls
title IPScan
set IPConst=192.168
set Log=%temp%\ipscan.txt
rem ############
echo IP parameter eingeben (ip) Bsp: %IPConst%.ip.110
set /p ip=
rem ############
echo Achtung! Durch druecken einer Taste startet der Scan. Dies kann einige Zeit
echo in Anspruch nehmen.
pause>nul
echo IPScan>%Log%
echo Ping gestartet
rem ############
for /L %%a in (1, 1, 254) do (
echo Pinge %IPConst%.%ip%.%%a
ping %IPConst%.%ip%.%%a -n 1 -w 300 | find "TTL" >nul && call :Ausgabe %IPConst%.%ip%.%%a
)
rem #############
echo Ping ausgefuehrt. %Log% wird nach dem druecken einer Taste geloescht.
%Log%
pause>nul
del %Log%
rem ##ende##
goto :eof
:Ausgabe
set Info=IP erreichbar: %1
for /f "tokens=2 delims=:. " %%i in ('nslookup %1 2^>nul^|findstr /b "Name:"') do set "Info=%Info% - %%i"
echo %Info% >>%Log%
Der Adressanteil "192.168" wird an vielen Stellen im Batch benötigt und daher, so wie zB auch der Dateiname der Logdatei, am Anfang in einer Variablen hinterlegt, was den Batch übersichtlicher und vor allem auch leichter anpassbar macht. Da diese Variablen nur innerhalb dieses Batches benötigt werden, sorgt ein "setlocal" dafür, dass sie am Ende wieder gelöscht werden.
Da die Logdatei ohnehin wieder gelöscht wird, wäre sie IMHO besser im Temp-Verzeichnis platziert.
Du hattest eine Variable %T% für die Startzeit gesetzt, aber in weiterer Folge nicht verwendet.
Die Zählschleife würde ich nur von 1 bis 254 laufen lassen (wiewohl sich der Zeitgewinn dadurch in Grenzen hält ).
Grüße
bastla
[Edit] Hatte Deinen zwischenzeitlichen Kommentar nicht gesehen. [/Edit]
Hallo Spackenbremse!
192.168.x.255 ist doch die Broadcastadresse des Netzes (siehe zB http://de.wikipedia.org/wiki/Broadcast, http://dimk.de/tcp-ip/ausarbeitung/ad7.htm oder http://www.lmtm.de/InformatiXTM/netzwerke/texte/ipadressen.html).
Grüße
bastla
192.168.x.255 ist doch die Broadcastadresse des Netzes (siehe zB http://de.wikipedia.org/wiki/Broadcast, http://dimk.de/tcp-ip/ausarbeitung/ad7.htm oder http://www.lmtm.de/InformatiXTM/netzwerke/texte/ipadressen.html).
Grüße
bastla
Hallo Spackenbremse!
Grüße
bastla
ich weiß jedoch, das ich ein notebook mit .255 hab
Dazu etwa: http://forum.de.selfhtml.org/archiv/2007/5/t153010/ich werd das forum gleich mal weiterempfehlen
Merci.Grüße
bastla