Zum Inhalt wechseln


Foto

DHCP-Verwaltung (Reservierungen) per Batch möglich?


  • Bitte melde dich an um zu Antworten
33 Antworten in diesem Thema

#1 W2K-Networker

W2K-Networker

    Member

  • 158 Beiträge

 

Geschrieben 07. Juni 2006 - 11:36

Hallo in die Runde hier!

Ich habe hier ein Problem mit der Verwaltung bzw. des umorganisierens des DHCP's.

Zuerst ein paar Infos:

-Netzwerk mit ca. 200 Clients
-DHCP auf W2KS (soll aber auf nen W2K3)

Ich will/muss den DHCP-Adressbereich umorganisieren, d.h. alle IP-Adressen sollen nur per Reservierung vergeben werden. Dynamisch angeforderte IP's werden zwar vergeben, bekommen aber vom Squid u.a. beim Versuch ins Internet zu kommen eine von uns erstellte Fehlerseite.

Jetzt sind hier im DHCP-Bereich knapp 200 vergebene Leases und um neue IP's bzw. Reservierungen im neuen Bereich vergeben zu können, muss ich mir zum einen die jeweilige MAC-Adresse auslesen um diese dann in eine neue Reservierung im neuen Bereich zu tun.

Jetzt suche ich nun schon lange verzweifelt nach einer Möglichkeit z.B. die Rechner anzupingen (somit sind sie auf alle Fälle keine Leichen), die MAC-Adresse zu ermitteln und das ganze in eine Reservierung im neuen DHCP-Bereich zu schreiben.
Mit netsh dhcp server kann ich zwar Reservierungen löschen, nicht jedoch anlegen oder einen neuen Bereich anlegen, jedoch nicht das benötigte, Reservierungen erstellen.

Um es nochmal einfach auszudrücken möchte ich folgendes erreichen:

1. Rechner anpingen (entweder über IP-Bereich oder Rechnernamen aus einer txt-Datei)
2. MAC ermitteln
3. Daten über ein Skript in den neuen Bereich im DHCP-Server schreiben

Hoffe das war jetzt nicht zu schwer ausgedrückt und hoffe vielmehr auf hilfreiche Ideen.

Grüße aus der Hauptstadt ... und Grüße auch an alle WM-Begeisterten
Windows-Netzwerker

Es ist nicht immer alles so wie es scheint.

#2 blub

blub

    Moderator

  • 7.605 Beiträge

 

Geschrieben 07. Juni 2006 - 19:51

Hi,
Unter 2003 ist es überhaupt kein Problem, eine statische Reservierung einzutragen
add reservedip ReservedIP MACAddress [ClientName] [ClientComment] [{DHCP | BOOTP | BOTH}] (s. 2003 OnlineHilfe)
mit w2k schauts sicher trauriger aus. Evtl. geht da was mit "netsh exec", indem du eine Datei im Dumpformat einliest

z.B.
- mit win32_Pingstatus kannst du abfragen, ob ein Client verfügbar ist
- mit win32_networkadapter bekommst du die MAC
such mal in der MSDN (msdn. microsoft.com) nach diesen Classen

cu
blub

#3 grizzly999

grizzly999

    Board Veteran

  • 17.691 Beiträge

 

Geschrieben 07. Juni 2006 - 20:02

Das Tool DHCPCMD aus den dem Resource Kit Tools von NT 4.0 kann das auch, und ich meine, dass das Tool bei 200 immer noch funktioniert: http://support.micro...om/?kbid=232213

Den Download gibt es hier: http://www.microsoft...tured/NTKit.asp


grizzly999
MVP [Windows Server - Directory Services]
www.ServerHowTo.de -Das MCSEboard.de HowTo Projekt ist online!

#4 W2K-Networker

W2K-Networker

    Member

  • 158 Beiträge

 

Geschrieben 08. Juni 2006 - 06:49

danke für die schnelle hilfe,

für blub:

mit add reservedip ReservedIP MACAddress [ClientName] [ClientComment] [{DHCP | BOOTP | BOTH}] werd ich gleich mal probieren, hab die syntax dafür auch gefunden.

was aber die sachen mit win32_Pingstatus und win32_networkadapter betrifft brauch ich dafür ja programmierkenntnisse, die ich leider noch nicht hab.
gibts da auch noch ne andere möglichkeit an die mac über die befehlszeile bzw. über ein skript zu kommen oder kannst du mir ein skript erstellen, was das macht?!

für grizzly999:

das mit DHCPCMD hab ich auch schon gefunden, hab mich da nur noch nicht rangetraut, weil es für bzw. im ressource kit von nt mit drin ist.
aus diesem grund ja auch das beispiel mit rechner anpingen (ping [rechnername]), dann mac auslesen (arp -a) und diese dann weiter verarbeiten. problem bei arp -a ist nur das ich da alle mac's angezeigt bekomme und es somit einen benutzereingriff erforderlich macht.
Windows-Netzwerker

Es ist nicht immer alles so wie es scheint.

#5 blub

blub

    Moderator

  • 7.605 Beiträge

 

Geschrieben 08. Juni 2006 - 11:33

hi,
dhcpcmd hat keinen guten Ruf. Es sind wohl schon häufiger DHCP-Datenbanken damit hopps gegangen. Wenn möglich, nutze "netsh dhcp server ..."

an die mac adresse kommst du remote z.B. mit nbtstat -a bzw. A

pack diese Zeile in eine Datei z.B. "getmacs.bat"
for /F %%a in (rechner.txt) do nbtstat -a %%a |find /i "mac"
und leg daneben eine Datei rechner.txt, in die du Zeilenweise deine Rechnernamen einträgst.

zu win32_pingstatus und anderen netzwerkbezogenen Classen findest du hier einige Beispiele: Konkret das letzte der Liste "ping multiple computers"
http://www.microsoft...st/default.mspx

cu
blub

#6 W2K-Networker

W2K-Networker

    Member

  • 158 Beiträge

 

Geschrieben 13. Juli 2006 - 14:14

hi,

sorry für die späte rückmeldung.

ich habe das jetzt folgerndermaßen aufgebaut:

for /F %%a in (C:\rechner.txt) do ping -n 1 %%a
for /F %%a in (C:\rechner.txt) do nbtstat -a %%a |find /i "mac"

es funktioniert gut, nur mit noch einem problem.
ich bekomme die mac-adressen nur in dem dos-fenster angezeigt.
wenn ich die befehlszeile so erweitere "for /F %%a in (C:\rechner.txt) do nbtstat -a %%a |find /i "mac">c:\macs.txt", wird zwar die datei macs.txt erstellt, jedoch steht nix drin.
es ist aber notwendig, dass ich die macs auch in einer datei habe, damit ich sie mit einem weiteren befehl in die reservierung einbinden kann.
als beispiel hab ich das hier gefunden:

NETSH DHCP SERVER \\%computername% ADD SCOPE ScopeAddress SubnetMask "Scope Name" "Scope Comment"

ist es möglich diese befehlszeile so zu erweitern, dass die rechnernamen aus rechner.txt in das feld %computername%, "Scope Name" und "Scope Comment" eingesetzt werden und die mac aus macs.txt in das feld ScopeAddress?!

weiterhin ist es wichtig zu wissen, ob der erste rechner aus macs.txt auch der erste rechner ist aus rechner.txt. nicht das die beiden dateien unterschiedlich sind und somit die zuordnung nicht stimmt.

ich weiß, es ist bestimmt nicht leicht. ich bin auch schon seit tagen am basteln und testen, aber bis jetzt wollte es nicht klappen.
es wäre somit echt klasse, wenn es hier einen gibt, der da den einen oder anderen tip hat.
Windows-Netzwerker

Es ist nicht immer alles so wie es scheint.

#7 Das Urmel

Das Urmel

    Gast

  • 2.657 Beiträge

 

Geschrieben 13. Juli 2006 - 19:04

Etwas ähnliches hab ich mal aus meinem Fundus rausgekramt, wenns hilft:
@ECHO OFF
setlocal
if (%1) == () (set mylog=machines.log)
if NOT (%1) == () (set mylog=%1)
@ECHO. >%mylog%
for /F "Skip=3 Tokens=1,2*" %%i in ('net view') do call :mach %%i %%j %%k
@ECHO. >>%mylog%
:loop
start %mylog%
endlocal
goto end
:mach
set compi=%1
set usr=%2
set usr1=%3
if "%compi%" == "Der" goto end
getmac %compi% | find /i "tcpip" > mac.txt
for /F "tokens=1,2" %%l in ( 'type mac.txt') do set mac=%%l
Echo %compi:~2,15% %mac% >>%mylog%
:end


kein php, schlichtes Batch - getmac.exe stammt ausm Reskit.
Output sieht dann aus wie folgt

rechner1 00-E0-4C-79-06-EC
rechner2 00-11-2F-A7-49-58
rechner3 00-E0-18-E1-90-36
rechner4 00-0B-6A-05-39-52
:)
mfg
Das Urmel
..lesen und verstehen - das Manko etlicher
... ich denke dennoch drüber nach, ehrlich :)

#8 blub

blub

    Moderator

  • 7.605 Beiträge

 

Geschrieben 13. Juli 2006 - 19:31

"for /F %%a in (C:\rechner.txt) do nbtstat -a %%a |find /i "mac">>c:\macs.txt"

:)

cu
blub

#9 W2K-Networker

W2K-Networker

    Member

  • 158 Beiträge

 

Geschrieben 14. Juli 2006 - 12:11

für Das Urmel:

danke für die zeilen.
das tool getmac gibt es bei xp auch, heisst dort getmac.exe. nur die syntax scheint eine andere zu sein. mein dos-fenster zeigt mir bei der ausführung deiner zeilen:

Geben Sie "GETMAC /?" ein, um die Syntax anzuzeigen.
FEHLER: Ungültige(s) Option/Argument - "\\RECHNER".

die syntax für getmac ist: getmax /s [Rechnername]
ausgabe:

Physikal. Adresse Transportname
=================== ==========================================================
00-0C-6E-36-33-46 \Device\Tcpip_{2E62A0E4-8F46-4791-B089-52C57FFC763A}

jetzt hab ich versucht die befehlszeilen anzupassen, jedoch finde ich nicht die stelle an der vor den rechnernamen \\ gesetzt wird. das \\ müsste durch /s ersetzt werden, damit es der syntax entspricht, denk ich.

wenn du mir die zeilen etwas erklären könntest oder für mich anpassen, wäre ich dir sehr dankbar. weil dann kann ich nächste woche endlich den dhcp neu machen.

für blub:

danke für den tip, jetzt klappts, wenn auch noch nicht so wie es soll. aber ich bin fleißig am basteln.

vielen dank schonmal im voraus und ein schönes we.
Windows-Netzwerker

Es ist nicht immer alles so wie es scheint.

#10 Das Urmel

Das Urmel

    Gast

  • 2.657 Beiträge

 

Geschrieben 15. Juli 2006 - 19:50

Die Zeile

getmac %compi% | find /i "tcpip" > mac.txt

ist wohl für das getmac an XP anzupassen, mein Code stamt von W2K, daher der Unterschied.
Ist aber leicht anzupassen
getmac /s %compi:~2,15% | find /i "tcpip" > mac.txt
sollte dann unter Xp laufen.
Da bei meinem Script die Rechner via net view aus dem Netz geholt werden, ist das nunmal so
\\Rechner
Nimm deine textdatei als Grundlage statt "net view", dann sollte es schon klappen
wenn du nur getmac /S %compi% anstelle des Originals nimmst.
Viel Erfolg
mfg
Das Urmel
..lesen und verstehen - das Manko etlicher
... ich denke dennoch drüber nach, ehrlich :)

#11 W2K-Networker

W2K-Networker

    Member

  • 158 Beiträge

 

Geschrieben 18. Juli 2006 - 06:34

hallo,

hab nun die batch folgendermaßen angepasst:

@ECHO OFF
setlocal
if (%1) == () (set mylog=machines.log)
if NOT (%1) == () (set mylog=%1)
@ECHO. >%mylog%
for /F "Skip=3 Tokens=1,2*" %%i in (%SystemDrive%\rechner.txt) do call :mach %%i %%j %%k
@ECHO. >>%mylog%
:loop
start %mylog%
endlocal
goto end
:mach
set compi=%1
set usr=%2
set usr1=%3
if "%compi%" == "Der" goto end
getmac /s %compi% > mac.txt
for /F "tokens=1,2" %%l in ( 'type mac.txt') do set mac=%%l
Echo %compi% %mac% >>%mylog%
:end

wenn ich die jetzt starte, dauert es einen moment bis machines.log aufpoppt und in dieser datei 3 rechnernamen mit deren macs stehen. bei einem computernamen sagt er sogar deaktiviert.
mach ich das fenster wieder zu wars das.
in machines.log stehen drei rechner mit macs und in rechner.txt stehen die 6 rechner mit denen ich das skript erstmal testen will.

was mach ich falsch????????????????????? und was macht die batch wann???????????????
Windows-Netzwerker

Es ist nicht immer alles so wie es scheint.

#12 Das Urmel

Das Urmel

    Gast

  • 2.657 Beiträge

 

Geschrieben 18. Juli 2006 - 07:30

Entweder sind 3 deiner Rechner nicht online im Netz und für getmac nicht erreichbar, oder du hast in deiner Rechner.txt nicht
Rechner1
Rechner2
Rechner3
.........
fein Zeile fürZeile geschrieben.
Erstellt wird schlicht eine neue Datei, die beides nebeneinander schreibt.
Genau das was du wolltest?
Das ist die Zeile vor dem :END die das bewirkt.
Die ersetzt du (Zeile mit Echo ... vor dem :End) mit deinem Test den du in deiner Antwort #6 geschrieben hast. Das must du noch selbst machen.
mfg
Das Urmel
..lesen und verstehen - das Manko etlicher
... ich denke dennoch drüber nach, ehrlich :)

#13 lefg

lefg

    Expert Member

  • 20.481 Beiträge

 

Geschrieben 18. Juli 2006 - 08:01

1. Rechner anpingen (entweder über IP-Bereich oder Rechnernamen aus einer txt-Datei)
2. MAC ermitteln
3. Daten über ein Skript in den neuen Bereich im DHCP-Server schreiben

Ich frage mich, ob dieses überhaupt die geeignete Methode ist?

Wäre es nicht einfacher, per GPO auf jeder Ws ein Script mit ipconfig /all auszuführen, dabei die MAC zu extrahieren und davon eine Datei in ein Share auf dem Server zu schreiben?

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)


#14 W2K-Networker

W2K-Networker

    Member

  • 158 Beiträge

 

Geschrieben 18. Juli 2006 - 09:55

hallo lefg,

also ich bin für alle ideen offen.
die idee die ich angefangen habe, war die die mir dazu einfiel.
wenn es da noch andere möglichkeiten gibt, immer her damit.

wie denke ich jedem bekannt ist, gibt es in einem gewachsenen netzwerk auch mit der zeit viele leichen.
es ging mir bei der sache somit auch darum, nur für noch verfügbare rechner eine dhcp-reservierung einzurichten. somit zwei fliegen mit einer klappe zu schlagen, daher die idee zuerst die rechner anpingen, dann die mac zu extrahieren und dann eine reservierung im dhcp einzurichten.

aber deine idee klingt auch interessant.
kannst du mir bitte mehr dazu sagen.
danke.
Windows-Netzwerker

Es ist nicht immer alles so wie es scheint.

#15 lefg

lefg

    Expert Member

  • 20.481 Beiträge

 

Geschrieben 18. Juli 2006 - 10:19

Hallo W2K-Networker,

ich nehme mal an, der Gedanke auf Ws Skripte per GPO in der Computerkonfiguration auszuführen, ist dir nicht fremd.

Mit dem Skript werden per ipconfig /all un der For-Schleife und der Textiteration /f die gewünschten Daten wie Hostname, IP und MAC erfasst und in Variable übertragen. Mit der Variablen %Hostname% ist eine Textdatei mit dem gewünschten Inhalt, z.B. der MAC erstellt, diese Datei direkt auf einem Share des Servers gespeichert. Geht ein Rechner ins Netz, wird die Richtlinie und das Skript ausgeführt, erscheint für den Rechner eine Datei auf dem Server.

Diese Dateien müssen dan ausgewertet werden, die gewünschten Daten in eine neue datei transformiert werden. Diese Datei sollte dann in einer vom DHCP benötigten Form vorliegen.

Ich hänge mal den Dump eines ersten Entwurfes an.

Call :Hostname
echo %Hostname%
Call :MAC
echo %MAC%

pause

:Hostname
for /f "tokens=* Skip=3" %%i in ('ipconfig /all') do Set Hostname=%%i & goto :eof

:MAC
for /f "tokens=* Skip=14" %%i in ('ipconfig /all') do set MAC=%%i & goto :eof

Falls du Interesse hast, unterstütze und berate ich dich gerne.

Gruß

Edgar

Das Messbare messen, das Nichtmessbare messbar machen. Galilei.

 

Diskutiere nicht mit ***en, denn sie ziehen dich auf ihr Niveau und schlagen dich dort mit Erfahrung! (Hab ich bei Tom abgeguckt)

 

Koinzidenz begründet keine Korrelation und ist kein Beweis für Kausalität. (Hab ich bei Daniel abgeguckt) https://de.wikipedia...rgo_propter_hoc

 

Absolutistischer“ Geschäftsführungs-Dogmatismus, der jedwede Empirie aus der „Werkstatt“ schlichtweg ignoriert , führt eben zumeist früher als später ….  (Hab ich von Klabautermann)