Adressreservierungen für Windows 2008 R2 DHCP-Server

Mit folgendem AWK-Skript kann man aus einer Textdatei die netsh-Befehle erstellen, die man benötigt, um Adressreservierungen für den Windows 2008 R2 DHCP-Server auf der Konsole zu generieren.
Wie diese Textdatei einfach erstellt werden kann, findest Du hier.

#!/usr/bin/awk -f

# Copyright 2013 Christian Fuchs <>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# ----------------------------
# Skript zum Erstellen der festen Adressvergabe im
# Windows 2008 R2 DHCP-Server
#
# Die Quelldatei wird aus einer nmap-XML-Datei per xsltproc
# generiert und hat folgenden Aufbau:
# IP-ADRESSE;MAC-ADRESSE;HOSTNAME
#
# Der Hostname kann ggf. leer sein.
#
#
# Aufruf der Datei:
# ./skript < quelle.txt # # Die Ausgabedatei besteht aus folgenden Befehlen, die auf dem # Windows DHCP-Server ausgeführt werden müssen. # Die IP-Adressen des Servers und des Bereichs (Scope) muessen angepasst # werden. Siehe Variablen. # # netsh Dhcp Server \\10.10.16.190 Scope 10.10.16.0 Add reservedip 10.10.16.228 00137277585d "pc00137277585d.lan.local" "PC Foo Bar" "DHCP" # ^^ Server ^^ ^^ Bereich ^^ ^ IP ^ ^ MAC-Adr. ^ ^^^ Hostname FQDN ^^^ ^ Kommentar (optional)^ ^ DHCP, BOOTP, oder beides ^ # # Erlaeuterung zu gensub-Befehl # gensub (Suchmuster, "ersetzen durch", "G", string) # Das "G" sorgt dafuer, dass alle Vorkommen von "Suchmuster" # ersetzt werden. BEGIN { FS=","; # Feldtrenner festlegen SERVER="10.10.16.190"; SCOPE="10.10.16.0"; DOMAIN="lan.local" } { # Ueberpruefen, ob der Hostname leer ist. Wenn ja, dann wird # der Hostname aus der MAC-Adresse und einem vorangestellten "PC" # generiert. if ( $3 == "") { # Ueberpruefen, ob in der Spalte 2 evtl. der Hostname steht # Ueberpruefen, ob in Spalte 2 eine MAC steht is_mac=match($2, /([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]/); # NEIN if ( is_mac == 0 ) { HOSTNAME=$2; # keine MAC, deswegen steht hier der Hostname } # JA else { # Es ist eine MAC. Dewegen generieren wir den Hostname wie oben # beschrieben HOSTNAME="pc"gensub(/:/, "", "G", $2)"." DOMAIN; } # Spalte 3 ist nicht leer } else { HOSTNAME=$3; } # Ueberpruefen, ob das 2. Feld eine MAC-Adresse ist is_mac=match($2, /([0-9A-F][0-9A-F]:){5}[0-9A-F][0-9A-F]/); if ( is_mac == 0 ) { MAC="keine MAC"; } else { MAC=gensub(/:/, "", "G", $2); } # Ausgabe des Befehls print "netsh dhcp server \\\\" SERVER " scope " SCOPE " add reservedip " $1 " "MAC " \"" HOSTNAME "\" " "\"Kommentar\" " "\"DHCP\""; ; };

Schreibe einen Kommentar