Search:

ipdata - Interface Konfigurationsdaten ausgeben

Bei der Konfiguration von Netzwerkkarten kommt man immer wieder zu folgenden Problem: man hat seine IP-Nummer und die Netzwerkmaske (wozu gibt es schließlich Netzwerkadministratoren?) braucht aber, um das Interface komplett zu konfigurieren noch die Netzwerkadresse (für's Routing) und die Broadcastadresse (für ifconfig). Unter Linux hat sich diese Frage übrigens etwas entspannt. Wenn ich das richtig gesehen habe sind die entsprechenden Befehle mittlerweile etwas toleranter gegenüber ihren Kommandozeileargumenten geworden.

Aber wir haben eigentlich alles zusammen, um ein Programm zu schreiben, das für uns die lästige Rechenarbeit übernimmt:

#!/usr/bin/gawk -f
#

#
# ipdata <ipnum>/<ipmask> ...
#
#	print network interface configuration data for every network
#	specification.
#

...
ipval(), ipmask() and ipstr() as in ipnumbers above
...

BEGIN {
	STDERR = "/dev/stderr";

	argi = 1;
	while (argi < ARGC) {
		iparg = ARGV[argi];  ARGV[argi++] = "";
		if (index(iparg, "/") == 0)
			iparg = iparg "/" 32;

		k = index(iparg, "/");
		ip = ipval(substr(iparg, 1, k-1));
		mask = ipmask(substr(iparg, k+1));

		first = and(ip, mask);
		last = or(ip, compl(mask));

		printf ("%s %s %s %s %s\n", iparg,
			ipstr(ip), ipstr(first), ipstr(last), ipstr(mask));
		}

	exit (0);
	}

ipdata erwartet IP-Nummern mit Netzwerkmaske als Argumente auf der Kommandozeilen und gibt die Konfigurationsdaten in der Reihenfolge

aus. Das sieht dann so aus:

# ipdata 192.168.4.1/24 192.168.1.1/255.255.252.0
192.168.4.1/28 192.168.4.1 192.168.4.0 192.168.4.15 255.255.255.240
192.168.1.1/255.255.252.0 192.168.1.1 192.168.0.0 192.168.3.255 255.255.252.0

Wo wir jetzt schon mal alle Daten zusammen haben können wir uns eigentlich auch ein kleines Shellskript schreiben, das die eigentliche Konfiguration für uns macht:

#!/bin/sh
#

#
# ipset <interface> <ipnum>/<mask>
#

interface=$1
set `ipdata $2`
#echo $*

ifconfig $interface $2 netmask $5 broadcast $4  &&
  route add -net $3 netmask $5 dev $interface

exit

Das ist natürlich nur hingeschmiert und nicht wirklich sauber programmiert. Aber ich bin auch kein *sh Programmierer und Shellprogrammierung ist nicht das worum es hier geht..

< dag | at | awk-scripting.de >