W2K-Networker 11 Geschrieben 7. Juni 2006 Melden Teilen Geschrieben 7. Juni 2006 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 Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 7. Juni 2006 Melden Teilen Geschrieben 7. Juni 2006 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 Zitieren Link zu diesem Kommentar
grizzly999 11 Geschrieben 7. Juni 2006 Melden Teilen Geschrieben 7. Juni 2006 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.microsoft.com/?kbid=232213 Den Download gibt es hier: http://www.microsoft.com/ntworkstation/downloads/Recommended/Featured/NTKit.asp grizzly999 Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 8. Juni 2006 Autor Melden Teilen Geschrieben 8. Juni 2006 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. Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 8. Juni 2006 Melden Teilen Geschrieben 8. Juni 2006 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 Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 13. Juli 2006 Autor Melden Teilen Geschrieben 13. Juli 2006 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. Zitieren Link zu diesem Kommentar
Das Urmel 10 Geschrieben 13. Juli 2006 Melden Teilen Geschrieben 13. Juli 2006 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 :) Zitieren Link zu diesem Kommentar
blub 115 Geschrieben 13. Juli 2006 Melden Teilen Geschrieben 13. Juli 2006 "for /F %%a in (C:\rechner.txt) do nbtstat -a %%a |find /i "mac">>c:\macs.txt" :) cu blub Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 14. Juli 2006 Autor Melden Teilen Geschrieben 14. Juli 2006 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. Zitieren Link zu diesem Kommentar
Das Urmel 10 Geschrieben 15. Juli 2006 Melden Teilen Geschrieben 15. Juli 2006 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 Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 18. Juli 2006 Autor Melden Teilen Geschrieben 18. Juli 2006 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??????????????? Zitieren Link zu diesem Kommentar
Das Urmel 10 Geschrieben 18. Juli 2006 Melden Teilen Geschrieben 18. Juli 2006 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. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 18. Juli 2006 Melden Teilen Geschrieben 18. Juli 2006 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? Zitieren Link zu diesem Kommentar
W2K-Networker 11 Geschrieben 18. Juli 2006 Autor Melden Teilen Geschrieben 18. Juli 2006 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. Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 18. Juli 2006 Melden Teilen Geschrieben 18. Juli 2006 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 Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.