Programm zum wechseln der IP

Mondi

Mondi

Grünschnabel
Hallo

als zuerst mal ich suche kein Programm das meine Internet IP wechselt.

zu meiner Situation:

- Betriebssystem openSUSE 10.1 auf meinem NB
- muss am Tag 5 mal meine IP Adresse, die DNS Server und das Standardgateway ändern
- die Verwendung von DHCP ist nicht Möglich
- Insgesamt muss ich zwischen 42 verschiedenen Konfigurationen wechseln je nach Kunde

Anforderungen an das Tool:

1. Möglichkeit Profile anzulegen (z.B. wie bei der Firefox Erweiterung zum wechseln der Proxys)
2. eventuell die Möglichkeit auch den Proxy mit zu Definieren
3. sofortige Übername des jeweiligen Profils und neu starten des Netzwerkinterfaces

ich hoffe das mir jemand eine Empfehlung für ein Tool geben kann wobei ein kurzer Erfahrungsbericht super währe.
 
Ein Tool für sowas ist mir nicht bekannt, aber erstell dir doch einfach selber die Profile sowie ein script welches dir je nach Profilangabe die Profile-Datei parst und lädt, also sowas wie

Code:
chprofile kunde_1
 
Ich denke da könnte dir vll ein shellskript weiterhelfen
 
dank das habe ich mir fat gedacht da ich schon 2 tage mit der suche bei googel bescheftigt war dann mus ich mir wol eins basteln aber trozdem danke noch ma.
 
Hi!

Der Thread ist ja schon etwas älter, aber ich hatte das gleiche Problem und habe mir ein kleines Skript geschrieben, dass eine große case-Bedingung enthielt die je nachdem welchen String ich übergebe die notwendigen Befehle (ipconfig, route) mit den entsprechenden Parametern ausführt.

Gestern habe ich dann hier nochmal reingeschaut und gedacht, dass der ein oder der andere sowas vielleicht auch benötigt und es sich selbst von Grund auf programmieren müsste. Also hab ich noch einige Verbesserungen daran vorgenommen und den Tipp von supersucker übernommen die Profile in eigene Dateien auszulagern.

Die von Theton geposteten Programme sehen alle gut aus, erschienen mir allerdings als overkill für mein kleines Problemchen das ich momentan regelmäßig zwischen 2-3 Netzwerk-Konfigurationen wechseln muss.

Hier nun mein Skript und ein Beispiel-Profil:
netup.sh
Code:
#!/bin/sh
#
# NETwork setUP
# Version 0.4.1
#

# Configuration
PFDIR="."

# Flags
PF=""
VRB=0
SIM=0
PRT=0

# Initialisation
IF="eth0"
PN=""
IP=""
NM=""
GW=""
NS1=""
NS2=""
DHCP=0

netup_config () {
	local PN=$1
	local IF=$2
	local IP=$3
	local NM=$4
	local GW=$5
	local NS1=$6
	local NS2=$7

	echo "Setup:"
	echo "------"
	if [ $PN ] ; then
		echo "Profile     : $PN"
	fi
	if [ $IF ] ; then
		echo "Interface   : $IF"
	fi
	if [ $IP ] ; then
		echo "Address     : $IP"
	fi
	if [ $NM ] ; then
		echo "Netmask     : $NM"
	fi
	if [ $GW ] ; then
		echo "Gateway     : $GW"
	fi
	if [ $NS1 ] ; then
		echo "Nameserver1 : $NS1"
	fi
	if [ $NS2 ] ; then
		echo "Nameserver2 : $NS2"
	fi

	return 0;
}

netup_interface () {
	local SIM=$1
	local IF=$2
	local IP=$3
	local NM=$4

	if [ $IF ] && [ $IP ] && [ $NM ] ; then
		(($SIM)) || ifconfig $IF $IP netmask $NM >/dev/null 2>&1
	else
		return 1
	fi

	return $?
}

netup_gateway () {
	local SIM=$1
	local IF=$2
	local GW=$3

	if [ $IF ] && [ $GW ] ; then
		(($SIM)) || route add default gw $GW dev $IF >/dev/null 2>&1
	else
		return 1
	fi

	return $?
}

netup_nameserver () {
	local SIM=$1
	local NS1=$2
	local NS2=$3

	if [ ! -w "/etc/resolv.conf" ] ; then
		return 1
	fi

	if [ $NS1 ] ; then
		(($SIM)) || echo "nameserver $NS1" >/etc/resolv.conf 2>/dev/null
		if [ $? = 0 ] && [ $NS2 ] ; then
			(($SIM)) || echo "nameserver $NS2" >>/etc/resolv.conf 2>/dev/null
		fi
	else
		return 1
	fi

	return $?
}

netup_dhcp () {
	local SIM=$1
	local IF=$2

	if [ $IF ] ; then
		(($SIM)) || dhclient $IF >/dev/null 2>&1
	else
		return 1
	fi

	return $?
}

title () {
	echo "netup (NETwork setUP) 0.4.1"
	echo ""
}

usage () {
	echo "Usage: ${0##*/} [options] profile"
	echo ""
	echo "Options:"
	echo " -i, --interface IF      Set the interface to IF (default: eth0)"
	echo " -s, --simulate          Don't do anything just simulate"
	echo " -v, --verbose           Verbose outputs (e.g. for debugging)"
	echo " -l, --list              Give a list of available profiles"
	echo " -p, --print             Print setup of the given profile"
	echo " -h, --help              Display this help and exit"
	echo ""

	return 0
}

profiles () {
	IFS=$'\t'

	echo "Profiles:"
	echo "---------"
	for file in $PFDIR/*.pf ; do
		file=${file##*/}
		file=${file%\.pf}
		if [ "$file" = "*" ] ; then
			echo "None"
		elif [ -f "$PFDIR/$file.pf" ] ; then
			echo "$file"
		fi
	done

	return 0
}

title
if [ $# -lt 1 ] ; then
	usage
	exit 1
fi

while [ "$1" ] ; do
	if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
		usage
		exit 0
	elif [ "$1" = "-l" ] || [ "$1" = "--list" ] ; then
		profiles	
		exit 0
	elif [ "$1" = "-p" ] || [ "$1" = "--print" ] ; then
		PRT=1
	elif [ "$1" = "-s" ] || [ "$1" = "--simulate" ] ; then
		SIM=1
	elif [ "$1" = "-v" ] || [ "$1" = "--verbose" ] ; then
		VRB=1
	elif [ "$1" = "-i" ] || [ "$1" = "--interface" ] ; then
		IF="$2"
		shift
	elif [ -f "$PFDIR/$1.pf" ] ; then
		PF="$PFDIR/$1.pf"
	else
		if [ -z "${1##-*}" ] ; then
			echo "Unknown option"
		else
			echo "No such profile"
		fi
		exit 1
	fi
	shift
done

if [ -z "$PF" ] ; then
	echo "No profile specified"
	exit 1
else
	. "$PF"
fi

if [ $PRT = 1 ] || [ $VRB = 1 ] ; then
	netup_config $PN $IF $IP $NM $GW $NS1 $NS2
	(($PRT)) && exit 0
	echo ""
fi

if [ $DHCP = 0 ] ; then
	echo -n "Configuring interface '$IF'... "
	if netup_interface $SIM $IF $IP $NM ; then
		echo "Done"
	else
		echo "Failed"
	fi
	echo -n "Configuring default gateway... "
	if netup_gateway $SIM $IF $GW ; then
		echo "Done"
	else
		echo "Failed"
	fi
	echo -n "Configuring nameserver... "
	if netup_nameserver $SIM $NS1 $NS2 ; then
		echo "Done"
	else
		echo "Failed"
	fi
else
	echo -n "Starting DHCP client... "
	if netup_dhcp $SIM $IF ; then
		echo "Done"
	else
		echo "Failed"
	fi
fi

exit 0

sample.pf
Code:
#
# Profile: Sample
#

PN="Sample"
IP="192.168.0.2"
NM="255.255.255.0"
GW="192.168.0.1"
NS1="192.168.0.1"

Verbesserungsvorschläge oder Anpassungen an dem Skript sind herzlich willkommen :D !

Ich weiß nicht ob ich z.Z. noch dazu komme Änderungen daran vorzunehmen aber hier mal eine Liste was aus meiner Sicht noch zu verbessern wäre:
To-Do:
  • Anpassbarkeit an andere Systeme erhöhen durch seperate Config-Datei
  • Fehler-Ausgaben der aufgerufenen Programme speichern und am Ende ausgeben (nach 'echo "Failed"')
  • Erstellung von Profilen durch das Skript (aus übergebenen Parametern oder der aktuellen Netzwerk-Konfiguration)
  • Mehr Optionen zu den Profilen hinzufügen (z.B. Broadcastmaske)
  • etc.

Hoffe das es jemand nützlich findet :) !

EDIT:
Ach ja, der Aufruf sieht am Beispiel von sample.pf so aus:
Code:
$./netup.sh sample
netup (NETwork setUP) 0.4

Configuring interface 'eth0'... Done
Configuring default gateway... Done
Configuring nameserver... Done

EDIT (2006-12-15 17:12):
Wer mein Script ausprobiert sollte wissen das ich gerade herausgefunden habe das die Optionen zum Simulieren (-s) nicht wie gewünscht funktioniert. Die Datei /etc/resolv.conf wird dabei überschrieben auch wenn der Schalter "-s" auf der Kommandozeile angegeben ist!

EDIT (2006-12-15 17:50):
Ich habe den Fehler den ich in EDIT (2006-12-15 17:12) beschrieben habe behoben und den Code oben aktualisiert.

Gruß,
Philip
 
Zuletzt bearbeitet:
SCMP ist in diesem Zusammenhang eine sehr interessante Geschichte:
Klick
 
Danke für den Tipp!

Ich muss zugeben, dass ich mir vor allem die ersten beiden erwähnten Webseiten angeschaut habe :) .
 
Zurück
Oben