Jump to content

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


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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.com/technet/scriptcenter/scripts/network/client/list/default.mspx

 

cu

blub

Link zu diesem Kommentar
  • 1 Monat später...

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.

Link zu diesem Kommentar

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

:)

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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???????????????

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
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?

Link zu diesem Kommentar

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.

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...