Top-Themen

Aktuelle Themen (A bis Z)

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

Tipp Entwicklung Batch & Shell

IP-Adresse per Batch auslesen

Mitglied: format-c

format-c (Level 1) - Jetzt verbinden

21.03.2013, aktualisiert 22.03.2013, 21475 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 ..
Ähnliche Inhalte
Internet
Verfassungsschutzchef will IP-Adressen von Abrufern von Enthauptungsvideos
Information von BassFishFoxInternet13 Kommentare

Es lief mal wieder Wuensch Dir was. Die Präsidenten der deutschen Geheimdienste haben in einer ersten öffentlichen Anhörung im ...

Windows 7
Win7 IP-Adresse lässt sich nicht aus der LAN-Karte entfernen
Erfahrungsbericht von SierjoergWindows 78 Kommentare

Hallo liebe Kolleginen und Kollegen, ich habe mich dazu entschlossen diese Anleitung zu schreiben, da ich gestern auf dieses ...

SAN, NAS, DAS
QNAP Installationsproblem wenn der Client mehre statische IP-Adressen hat
Erfahrungsbericht von StefanKittelSAN, NAS, DAS6 Kommentare

Hallo, ich schreibe das mal hier, vieleicht hilft es ja dem einen oder anderem. Ich habe gestern hier zwei ...

Windows Netzwerk
Internet IP Adresse mit Windows Desktop Tool BGInfo anzeigen lassen
Tipp von aquiWindows Netzwerk11 Kommentare

Für einzelne Admins (und auch User) ist es mitunter hilfreich sich diverse Windows Systemparameter auf dem Bildschirmhintergrund anzeigen zu ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Windows Server
DNS Forwarding an andere Domäne
Frage von detox91Windows Server9 Kommentare

Hallo, für Testzwecke haben wir bei uns eine zweite Windows Domäne (B.local) aufgebaut, welche komplett unabhängig und isoliert der ...