Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

IP-Adresse per Batch auslesen

Tipp Entwicklung Batch & Shell

Mitglied: format-c

format-c (Level 1) - Jetzt verbinden

21.03.2013, aktualisiert 22.03.2013, 18449 Aufrufe, 11 Kommentare, 5 Danke

Und ewig grüßt das Murmeltier...
Das alte Thema "Wie ermittle ich die IP-Adresse meines Rechners in einem Batchskript". Das Thema wurde hier schon mal behandelt und als "gelöst" gekennzeichnet. Allerdings bin ich mit der auf dem Befehl ipconfig beruhenden Lösung nicht so ganz zufrieden.

Denn ipconfig gibt immer Informationen über alle Netzwerkadapter aus. Hat man z.B. zusätzlich zum LAN-Adapter noch eine WLAN-Karte und/oder ein virtuelles Netzwerk (wie z.B. das Host-Only-Network von der Virtualbox) wird die Sache schnell unübersichtlich, mann muss zusätzliche Kontrollmechanismen (wie z.B. einen Zähler) einbauen usw. Sonst bekommt man immer die letztgenannte IP-Adresse, die nicht unbedingt die richtige sein muss. Und das Konzept mit dem Zähler ist auch noch davon abhängig, in welcher Reihenfolge die einzelnen Netzwerkadapter ausgegeben werden, was sich aber von Rechner zu Rechner unterscheiden kann.

Lange Rede, kurzer Sinn, here it is:

01.
FOR /F "tokens=3,5" %a in ('netsh interface ipv4 show route') do @IF '%a'=='0' FOR /F "tokens=2" %A in ('netsh interface ipv4 show addresses %b ^| find "IP-Ad"') do @echo IP: %A
Noch schneller geht es mit dieser Variante:
01.
FOR /F "tokens=5" %a in ('netsh interface ipv4 show route ^| find "0.0.0.0/0"') do @FOR /F "tokens=2" %A in ('netsh interface ipv4 show addresses %a ^| find "IP-Ad"') do @echo IP: %A
Ist zwar eine sehr lange, aber dennoch eine einzige Zeile. (Wer diese Zeile in einer Batchdatei verwenden möchte, sollte nicht vergessen alle Vokommen von %x zu %%x zu erweitern.)

Erklärung:
in der Ausgabe des Befehls netsh interface ipv4 show route steht an erster Stelle in der Spalte Idx der Index des richtigen Netzwerkadapters. Diesen greifen wir uns und bekommen dann mit netsh interface ipv4 show addresses <index> die IP-Konfi für den Netzwerkadapter mit der gegebenen Indexnummer. (Ohne die Angabe der Indexnummer ist die Ausgabe ähnlich wie bei ipconfig.) Jetzt also nur noch nach dem passenden String filtern und die echo-Ausgabe durch eine set-Anweisung geeignet ersetzen. Finito.

Ein alternativer Weg wäre es, die Indexnummer aus netsh interface ipv4 show interfaces herauszufiltern. Diese Methode hat sich allerdings als unzuverlässig entpuppt: ich habe Rechner gesehen, auf denen die Bezeichnung "LAN-Verbindung" dem bereits erwähnten virtuellen Netzwerk der Virtualbox gehörte, während die gesuchte Netzwerkkarte auf den Namen "Ethernet" gehört hat. Ist also wieder Rechner-abhängig. Da halte ich den Eintrag in der Routingtabelle, der die Metrik 0 hat, für zuverlässiger.



Noch einfacher geht es mit dem Tool "Swiss File Knife". Da bekommt man mit sfk.exe ip sofort das, wonach man sucht. Die Sache hat aber zwei kleine Haken: a) mehr als die IP-Adresse erfährt man dabei auch nicht (d.h. keine Subnetzmaske) und b) auch wenn das Tool Freeware ist, geht man dabei über Bordmittel hinaus (ist nur so eine Prinzip-Sache).


Wenn ihr bessere oder vergleichbare Lösungen habt, bitte teilt euer Wissen mit uns.


Schöne Grüße
Eugen
Mitglied: Endoro
21.03.2013 um 20:44 Uhr
Hallo Eugen,
das klappt leider bei mir nicht (XP):
01.
WARNUNG: Es konnten keine Hostinformation vom Computer: [ABCDEFGHIJK] ermittelt 
02.
werden. Einige Befehle sind eventuell nicht verfügbar. 
03.
Das angegebene Modul wurde nicht gefunden. 
04.
 
05.
Der folgende Befehl wurde nicht gefunden: interface ip show route.
bb
Bitte warten ..
Mitglied: format-c
22.03.2013 um 02:10 Uhr
Hast Recht. Sorry, ich habe nicht daran gedacht, das oben beschriebene auch auf einem XP-System zu testen. Die Net-Shell unter XP ist in der Tat weitaus weniger mächtig als die unter Win7 und dieses Skript funktioniert so ohne Weiteres nicht. Erstens, funktioniert ohne den "Routing- und RAS-Dienst" die Hälfte der Befehle schon mal gar nicht. Und dieser ist wiederum zunächst deaktiviert. Also müssen wir ein CMD-Fenster mit Admin-Rechnten anschmeißen und
01.
sc config remoteaccess start= auto 
02.
net start remoteaccess
ausführen. Zweitens, dann müssen wir feststellen, dass im Kontext netsh interface ip show nichts mit "route" zu finden ist. Es gäbe zwar die Möglichkeit netsh routing ip show rtmroutes, aber dort gibt es keine Angaben zum Index, und selbst wenn es welche gäbe — in der Netshell von XP nützt einem der Index des Netzwerkadapters bei der Suche nach der IP-Adresse nichts.
Nicht verzweifeln! Irgendwie klappt es doch noch. Ein möglicher Workaround wäre z.B. sowas:
01.
for /F "tokens=6*" %i in ('netsh routing ip show rtmroutes ^| find "0.0.0.0/0"') do @for /F "tokens=1" %a in ('netsh interface ip show ipaddress ^| find "%j"') do @echo IP: %a
Man kann statt nach "0.0.0.0/0" zu filtern auch "255.255.255.255/32" nehmen. (Auch für dieses Codefragment gilt selbiges wie oben.)

Leider funktionieren die Befehle netsh routing ip show rtmroutes und netsh interface ip show ipaddress trotz des gestarteten Dienstes für "Routing- und RAS" nur mit Admin-Rechten.


Grüße
Eugen
Bitte warten ..
Mitglied: format-c
22.03.2013, aktualisiert um 14:50 Uhr
Hier wird eine weitere Lösung beschrieben. Das Gute an der ist, dass sie gleich gut auf allen Windows Versionen funktioniert. Und wie der Autor des verlinkten Beitrags mag ich Einzeiler ebenfalls.

01.
for /f "tokens=2 delims=[]" %a in ('ping -n 1 -4 %computername% ^| find /I "%computername%"') do @echo IP: %a

Grüße
Bitte warten ..
Mitglied: Endoro
22.03.2013 um 15:06 Uhr
Hallo, das klappt super. Nur manchmal wird "127.0.0.1" ausgegeben, worum man sich noch kümmern muss.

Gruss!

bb
Bitte warten ..
Mitglied: ThePinky777
25.03.2013, aktualisiert 27.03.2013
Hier ein VBS Script zum auslesen aus der WMI:
01.
'############################################################# 
02.
' ************************************************** 
03.
' * IP-Adressen und MAC-Adressen auflisten 
04.
' ************************************************** 
05.
'On Error Resume Next 
06.
 
07.
Set wmi = GetObject("winmgmts:") 
08.
' alle Instanzen finden, bei denen IPEnabled auf true gesetzt ist 
09.
wql = "select * from win32_NetworkAdapterConfiguration where IPEnabled=true" 
10.
Set configs = wmi.ExecQuery(wql) 
11.
 
12.
For each config in configs 
13.
Set assoc = config.Associators_(,"Win32_NetworkAdapter",,,,,,,32) 
14.
	' die zugehörige Win32_NetworkAdapter-Klasse finden 
15.
	For each karte in assoc 
16.
		Set adapter = karte 
17.
		' gibt nur eine, also Schleife verlassen 
18.
		exit For 
19.
	Next	 
20.
		' Join macht aus einem Variablenfeld einen String 
21.
		if instr(adapter.name, "Nortel") = 0 then 
22.
		 	if config.DHCPEnabled = true then 
23.
		 		DHCP = "Ja" 
24.
		 	else 
25.
		 		DHCP = "Nein" 
26.
		 	end If 
27.
		 	 
28.
			WScript.Echo adapter.name  
29.
			WScript.Echo adapter.MACAddress  
30.
			WScript.Echo Join(config.IPAddress, ",")  
31.
			WScript.Echo config.DHCPServer  
32.
			WScript.Echo DHCP 
33.
			WScript.Echo config.DNSDomain 
34.
		end if 
35.
Next 
36.
 
37.
 
38.
'#############################################################
Einfach in ein Text file kopieren und ipauslesen.vbs nennen. dann im dos per kommando:
cscript c:\ipauslesen.vbs
starten.
[Edit Biber] Codeformatierung. [/Edit]
Bitte warten ..
Mitglied: format-c
26.03.2013 um 12:46 Uhr
Zitat von ThePinky777:
...
if instr(adapter.name, "Nortel") = 0 then
...

Hallo ThePinky777.
Verstehe ich es richtig, dass "Nortel" hier der Name des Herstellers des Netzwerkadapters ist? Falls ja, dann müsste man für jeden Rechner, auf dem dieses Skript ausgeführt wird, zuerst erfahren, wie die Netzwerkkarte heißt, wozu wiederum eine menschliche Interaktion erforderlich wäre. Gibt es da nicht irgendeinen Weg, das Skript vollautomatisch arbeiten zu lassen?


Grüße
format-c
Bitte warten ..
Mitglied: ThePinky777
27.03.2013, aktualisiert um 21:30 Uhr
Zitat von format-c:
> Zitat von ThePinky777:
> ...
> if instr(adapter.name, "Nortel") = 0 then
> ...

Hallo ThePinky777.
Verstehe ich es richtig, dass "Nortel" hier der Name des Herstellers des Netzwerkadapters ist? Falls ja, dann
müsste man für jeden Rechner, auf dem dieses Skript ausgeführt wird, zuerst erfahren, wie die Netzwerkkarte
heißt, wozu wiederum eine menschliche Interaktion erforderlich wäre. Gibt es da nicht irgendeinen Weg, das Skript
vollautomatisch arbeiten zu lassen?


Grüße
format-c

ne die Zeile sagt er soll "Nortel" Ausschließen.
Nortel ist ein anbieter von VPN verbindungen/treiber, sieht in der WMI aus wie ne netzwerkkarte ist aber nur eine Virtuelle, ergo uninteressant.
gibt vielleicht noch 1-2 weitere hersteller die man so ausschließen könnte wenns stört, z.B. Cisco AnyConnect oder so heißt einer. Wobei ich keine Ahnung hab wie dort dann die Netzwerkkarte heißt.

Aber du könntest das Script ja einfach mal starten dann siehst dus schon, das es geht
Das script lief ei 9000 Rechnern fehlerfrei, ergo denk ich wirds auch bei dir laufen

Aber ich gebs zu ist komisch gescriptet, ich häts auch anders gemacht kollegen halt

und wenn man die Daten speichern will in ne Datei hier ne Anleitung:
http://pc-know-how.g-websys.de/themen/004_vbs_script__inhalte_in_eine_d ...
Bitte warten ..
Mitglied: LinWinx86
04.05.2013 um 00:00 Uhr
Abend,

ca. tausendmal getestet mit Win XP, funktioniert ohne Probleme

IPCONFIG | FINDSTR "IP-Adresse" >ip.tmp
FOR /F "tokens=2,3,4 delims=:. " %%a IN (ip.tmp) DO SET SubNet=%%a.%%b.%%c
DEL ip.tmp
Bitte warten ..
Mitglied: ThePinky777
13.05.2013 um 12:59 Uhr
Zitat von LinWinx86:
Abend,

ca. tausendmal getestet mit Win XP, funktioniert ohne Probleme

> IPCONFIG | FINDSTR "IP-Adresse" >ip.tmp
> FOR /F "tokens=2,3,4 delims=:. " %%a IN (ip.tmp) DO SET SubNet=%%a.%%b.%%c
> DEL ip.tmp

jo funktioniert aber nur auf deutschem Betriebssystem, weil "IP-Adresse" als text gibts weder auf Englischem, Französischem, Spanischem und Schwedischen system, es reicht hierbei auch schon wenn ein anderer Language pack benutzt wird, das es nicht mehr geht.

daher kann man das script dann nur einsetzen wenn man das alles abfängt
wenn mans aus der WMI ausliest wie das VBS Script dann ist sprachversion wurst.
Bitte warten ..
Mitglied: format-c
13.05.2013 um 16:34 Uhr
Hätte LinWinx86 den ersten Beitrag dieses Threads aufmerksam gelesen, dann hätte sich sein Beitrag ganz erübrigt.


Grüße
format-c
Bitte warten ..
Mitglied: format-c
22.06.2013 um 14:32 Uhr
Hallo allerseits.

In meinem Beitrag über die Berechnung der Broadcast-Adresse habe ich eine andere Lösung präsentiert, die doch noch auf ipconfig basiert:

SETLOCAL EnableDelayedExpansion 
 
REM # IP-Adresse holen 
for /f "tokens=2 delims=[]" %%a in ('ping -n 1 -4 %COMPUTERNAME% ^| find /I "%COMPUTERNAME%"') do set ip_adresse=%%a 
 
for /f "tokens=2 delims=:" %%A in ('ipconfig ^| findstr "%ip_adresse% Subnet"') do ( 
	REM # IP-Adresse bereinigen (Leerzeichen entfernen) und in einer  
	REM # temporären Variable speichern 
	for /f %%a in ("%%A") do set gefunden=%%a 
	REM # Die Subnetzmaske soll nur dann ausgelesen werden, wenn sie 
	REM # unmittelbar auf die "richtige" IP-Adresse folgt, 
	REM # ansonsten wird sie verworfen. 
	IF '!gefunden!'=='%ip_adresse%' ( 
		set flag=1 
	) ELSE ( 
		IF '!flag!'=='1' ( 
			set subnetz_ip=!gefunden! 
			set flag= 
set gefunden=
Mit einem Flag funktioniert auch die Erkennung der Subnetzmaske zuverlässig.


Grüße
format-c
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Windows 7
gelöst Bereits eingebundener Drucker - IP Adresse lokal auslesen (17)

Frage von harald.schmidt zum Thema Windows 7 ...

LAN, WAN, Wireless
gelöst TP-Link WA501G als Client einrichten - Keine IP Adresse wir bezogen (14)

Frage von bestelitt zum Thema LAN, WAN, Wireless ...

E-Mail
gelöst Falsche SMTP Server IP Adresse (6)

Frage von laster zum Thema E-Mail ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...