flix3793
Goto Top

IP zu Hostname - Listenweise

Hallo Forum,

ich stehe hier vor einem Wulst von Hostnames, und brauche dazu die IP-Adressen.

Das genaue Szenario:

ca. 200 Hosts, teils in der Domäne, teils nicht, deren Namen alle in einem Textfile liegen (hosts.txt).

Diese Hosts sollen nun alle zur Überwachung in unser Monitoring-Tool importiert werden. hierzu brauche ich letztendlich nur die IPs der Server untereinander in einem *.txt-File.

Meine Frage ist nun, wie ich möglichst einfach und schnell die IPs zu den Hostnames herausfinden kann. Am liebsten wäre mir da ne Batch oder ein einfaches Script, was folgendes macht:

*Doppelklick*
Schnappt sich "hosts.txt" <- Das sollte ich eigentlich hinbekommen, kein Problem
Besorgt sich die IPs zu den Hostnames <- Hier klemmts
Schmeißt nur die IPs schön untereinander in "ips.txt" <- Und hier :S
*Ende*

Fällt euch dazu etwas ein? Oder gibt es Freewaretools, die sowas können?

Danke schon mal! - Felix

Content-Key: 170956

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

Printed on: April 26, 2024 at 16:04 o'clock

Member: brammer
brammer Aug 04, 2011 at 13:54:05 (UTC)
Goto Top
Hallo.

wenn die Hostnames über den DNS Aufgelöst werden: ping hostname

Oder, mit netscan die P Range scannen und den Hostname mit auflösen lassen

brammer
Member: Flix3793
Flix3793 Aug 04, 2011 at 14:03:18 (UTC)
Goto Top
wenn die Hostnames über den DNS Aufgelöst werden: ping hostname

Die Idee hatte ich auch schon, das funktioniert prinzipiell auch. Aber wie bekomme ich die IP aus dem Ergebnis des Pings in ein Textfile?
Member: bastla
bastla Aug 04, 2011 at 14:07:15 (UTC)
Goto Top
Hallo Flix3793 und willkommen im Forum!
Aber wie bekomme ich die IP aus dem Ergebnis des Pings in ein Textfile?
So ähnlich, wie es über "nslookup" ginge:
for /f "tokens=2 delims=, " %%i in ('nslookup www.administrator.de') do set "IP=%%i"  
echo %IP%
- konkret (die Ähnlichkeit ist dann doch nicht ganz so groß face-wink):
for /f "tokens=2 delims=" %%i in ('ping -n 1 www.administrator.de^|findstr "["') do >>"D:\ips.txt" echo %%i
Grüße
bastla
Member: Flix3793
Flix3793 Aug 04, 2011 at 14:14:10 (UTC)
Goto Top
Also:


for /f "tokens=2 delims=, " %%i in ('ping BEISPIELSERVER01') do set "IP=%%i"

echo %IP% > ips.txt

so? o.O Wär ja zu schön... >_>
Member: bastla
bastla Aug 04, 2011 at 14:18:07 (UTC)
Goto Top
Hallo Flix3793!

Am besten gleich am Stück:
@echo off & setlocal
set "hosts=D:\hosts.txt"  
set "ips=D:\ips.txt"  

del "%ips%" 2>nul  
for /f "usebackq delims=" %%a in ("%hosts%") do (  
    for /f "tokens=2 delims=" %%i in ('ping -n 1 %%a^|findstr "["') do echo %%i  
)>>"%ips%"  
Grüße
bastla

P.S.:
Member: Flix3793
Flix3793 Aug 05, 2011 at 06:05:29 (UTC)
Goto Top
Okay, danke!
Das läuft so weit. Allerdings stehe ich jetzt vor dem nächsten Problem... face-sad
In der Liste von Hosts stehen immer mal wieder ein paar drin, die nicht erreichbar sind. Das an sich ist kein Problem, aber kann man bei denen nicht irgendwas in der IP-Liste einfügen? Also etwa so:

10.10.10.1
10.10.10.2
--- nicht gefunden
10.10.10.3
10.10.10.n

Ansonsten bringt mir das nämlich leider nicht allzu viel, weil ich die IPs nicht den Hosts zuordnen kann.
Member: Flix3793
Flix3793 Aug 05, 2011 at 07:46:39 (UTC)
Goto Top
Soo, habe einen kleinen Schritt weiter geschafft. Ich kann jetzt die Hosts gemeinsam mit den IPs in einer *.txt - Datei ausgeben. Diese lese ich dann sowieso mit excel ein und benutze "~" als Trennzeichen, um den Text in Spalten zu bringen. Der Code sieht jetzt so aus:

@echo off & setlocal 
set "hosts=D:\hosts.txt"  
set "ips=D:\ips.txt"   

del "%ips%" 2>nul   
for /f "usebackq delims=" %%a in ("%hosts%") do (   
    for /f "tokens=2 delims=" %%i in ('ping -n 1 %%a^|findstr "["') do echo %%i~%%a)>>"%ips%"  
pause

Das hat nun auch zur Folge, dass unerreichbare Hosts anscheinend einfach nicht ausgegeben werden. Ich schau nochmal drüber und gebe dann Bescheid.
Member: Flix3793
Flix3793 Aug 05, 2011 at 09:17:59 (UTC)
Goto Top
Soo, nun hat (fast) alles geklappt.

Das abfragen der IPs über die Hostnames war erfolgreich, ich habe nun ein Textfile, welches die folgende Formatierung hat:

XXX.XXX.XXX.XXX~HOSTNAME1
YYY.YYY.YYY.YYY~HOSTNAME2
ZZZ.ZZZ.ZZZ.ZZZ~HOSTNAME3

Dies kann ich nun in Excel importieren, indem ich das *.txt-File mit Excel öffne, und ihm sage, dass er "~" als Spaltentrennzeichen ansehen soll.
Dann bekomme ich eine Tabelle, die so aussieht:

_____________________________
| XXX.XXX.XXX.XXX | HOSTNAME1|
|_________________|__________|
| YYY.YYY.YYY.YYY | HOSTNAME2|
|_________________|__________|
| ZZZ.ZZZ.ZZZ.ZZZ | HOSTNAME3|
|_________________|__________|

Diese kann ich über einige Umwege nun mit dem Monitoring-Tool importieren. Das klappt auch - fast.

Nun stelle ich nämlich fest, dass einige Hosts fehlen. Natürlich erstmal die, deren IP ich mit dem Script nicht nachschlagen konnte. Es fehlen allerdings komischerweise noch mehr. Nun möchte ich herausfinden welche. Dazu habe ich zuersteinmal die Liste aller "Tests" aus dem Monitoring-Tool exportiert. Darin stehen aber nicht nur die Hostnames, sondern noch ne Menge anderer Kram. Gibt es eine möglichkeit, hier jetzt nur die hostnames rauszubekommen? Ein Test (bzw. Eintrag eines Hosts) sieht so aus:

; ------- Test #90 -------


Method      = Ping
;--- Common properties ---
;DestFolder = Root\StandortXY\Server\
Title       = Ping: BEISPIELHOSTNAME
Comment     = Ping 123.123.123.123
RelatedURL  = 
NamePattern = %methodname%: BEISPIELHOSTNAME
CmntPattern = Ping %host%
ScheduleMode= Regular
Schedule    = UNSERESCHEDULE
Interval    = 15
Alerts      =Ein Alert halt
ReverseAlert= No
UnknownIsBad= Yes
WarningIsBad= Yes
UseCommonLog= Yes
PrivLogMode = Default
CommLogMode = Default
;--- Test specific properties ---
Host        = 123.123.123.123
Timeout     = 2000
Retries     = 3
MaxLostRatio= 100
DisplayMode = time
DontFragment= No

Hier müsste ich also entweder an das kommen, was hinter

Title       = Ping: 
oder
NamePattern = %methodname%: 
steht.

Alle anderen Informationen sind für mich und für das Problem ja irrelevant.

Fällt euch da was ein? Ich hab nur (oh, schon wieder!) den Einfall, die Zeichenkette in ein neues File schreiben zu lassen.
Member: bastla
bastla Aug 05, 2011 at 09:55:10 (UTC)
Goto Top
Hallo Flix3739!

Etwa so:
@echo off & setlocal
set "Tests=D:\tests.txt"  
set "Liste=D:\Listetxt"  

del "%Liste%" 2>nul  
(for /f "tokens=2 delims=:" %%i in ('findstr /b "Titel" "%Tests%"') do echo %%i)>>"%Liste%"  
Grüße
bastla
Member: Flix3793
Flix3793 Aug 05, 2011 at 10:03:31 (UTC)
Goto Top
Du bist so ne Art Batchgott, oder? xD

Danke! Hat super funktioniert!
Ich musste erst noch bei

('findstr /b "Titel" "%Tests%"')  


aus dem "Titel" ein "Title" machen, aber das is ja kein Problem. face-smile
Hat spitzenmäßig geklappt, jetzt kann ich die neue Liste mit der alten abgleichen, und vielleicht finde ich dann raus, warum manche Hosts fehlen!

Danke schonmal an alle!
Member: bastla
bastla Aug 05, 2011 at 10:11:35 (UTC)
Goto Top
Hallo Flix3793!
Du bist so ne Art Batchgott, oder? xD
Nö, Batch-Bastler ... face-wink

Das Abgleichen könnte (direkt an der Kommandozeile) etwa so gehen:
findstr /v /g:D:\Liste.txt D:\hosts.txt>D:\Differenz.txt
Grüße
bastla
Member: Flix3793
Flix3793 Aug 05, 2011 at 10:20:54 (UTC)
Goto Top
Das versuch ich zuhause mal, jetzt mach ich erstmal alle, die hier grade vom Arbeitsplatz aus lesen neidisch, indem ich laut "FEIERABEND" rufe! face-wink

Hab mir jetzt alles heimgeschickt, was ich brauche, und Langeweile werd ich auch haben. :D
Ich meld mich dann, wenn ich zuhause bin. =)

Bis nachher dann!
Member: Flix3793
Flix3793 Aug 08, 2011 at 06:02:05 (UTC)
Goto Top
Hey, guten Morgen alle!

Ich bin über's Wochenende irgendwie absolut nicht motiviert gewesen, weiterzuwühlen - aber grade ist mir was aufgefallen.

Einer der Hosts (nennen wir ihn BEISPIELHOST1), der absolut sicher im Monitoring erfasst ist, und den ich auch mit strg-F im Exportfile finde (dort, wo noch so viele unnütze Infos stehen), landet nicht in "Liste.txt", welche ich ja zur Vervollständigung des Monitorings nutze.

Er ist wie alle anderen auch bis zur Title-Zeile, die wir ja auslesen wollen folgendermaßen beschriftet:

; ------- Test #95 -------


Method      = Ping
;--- Common properties ---
;DestFolder = Root\StandortB\Server\
Title       = Ping: BEISPIELHOST1
Ein anderer Host, welcher sauber ausgelesen und in "Liste.txt" eingetragen wurde sieht genauso aus:
; ------- Test #178 -------


Method      = Ping
;--- Common properties ---
;DestFolder = Root\StandortA\Server\
Title       = Ping: BEISPIELHOST2

Ich versteh nicht, worin die sich unterscheiden. Der Hostname kann auch bspw. nicht zu lang sein, da auch welche erfolgreich übernommen wurden, die sehr viel längere Hostnames tragen. Zahlen/Sonderzeichen habe ich auch in einigen anderen Hostnames drin. Ich versteh's nicht. face-sad
Member: bastla
bastla Aug 08, 2011 at 09:59:12 (UTC)
Goto Top
Hallo Flix3793!

Verarbeitet wird zunächst einmal nur, was
findstr /b "Title" "D:\tests.txt"
liefert - das kannst Du direkt an der Kommandozeile testen.

Grüße
bastla
Member: Flix3793
Flix3793 Aug 08, 2011 at 10:05:45 (UTC)
Goto Top
Hab's schon hinbekommen, der import hat jetzt zu 110% geklappt.

(Warum 110%?!)
-> Weil ich versehentlich ein altes Importfile mit eingebunden hab, wodurch jetzt ne Menge mittlerweile aus dem Betrieb genommene Server in der Liste sind. Die darf ich jetzt alle manuell rausnehmen. face-smile )

Aber was ich wollte hab ich erreicht - danke an alle und ein besonders dickes Danke an dich, bastla! face-smile face-smile face-smile
Member: bastla
bastla Aug 08, 2011 at 10:10:15 (UTC)
Goto Top
Hallo Flix3793!

Freut mich, dass es jetzt passt. face-smile

Wo hatte es denn geklemmt?

Grüße
bastla
Member: Flix3793
Flix3793 Aug 08, 2011 at 10:27:19 (UTC)
Goto Top
Hey!

Irgendwie hatte das Batchskript beim Auslesen der Hostnames aus der Exportdatei bei manchen ein Leerzeichen davor mitgenommen, dadurch wurden sie nicht richtig zurück importiert. Komische Sache.... Aber hat jetzt hingehauen.

Danke nochmals!

(Achja, falls wer gut massieren kann, mein Nacken hätte es langsam nötig. Das ganze Theater hier musste ich an nem Monitor machen, der ca. 2m über dem Tisch an der Wand hängt und auf dem wir aus Sicherheitsgründen keine Fernwartungstools haben ._.' *knacks* *knirsch*)

Lg, Felix!
Member: bastla
bastla Aug 08, 2011 at 10:31:42 (UTC)
Goto Top
[OT]
Hallo Flix3793!

Ich wusste immer schon, dass es Jobs gibt, die eigentlich nur im Liegen zu ertragen sind ... face-wink

Grüße
bastla
[/OT]
Member: Flix3793
Flix3793 Aug 08, 2011 at 13:18:21 (UTC)
Goto Top
~ot~

Joa, schon - aber seit wann gehört Fachinformatiker da dazu? o.O face-big-smile

~/ot~