ubuntu logo

IP Reconnect unter Ubuntu Linux - Neue IP Adresse mit Unitymedia Kabel Modem

04.12.2008 | Programmierung,Linux | kevin | 9 Kommentare

Wer kennt das Problem nicht? Da muß man mal schnell ne neue IP Adresse haben und dann stehste da ... denn so einfach ist das ganze gar nicht! Für Windows gibts fertige Scripts, aber für Ubuntu/Linux konnte ich nichts finden.


Neugierig und wissensdurstig wie ich nunmal bin, habe ich mich dran gesetzt und nach einer Lösung gesucht und auch gefunden.

Wieso man sowas braucht? Naja, z.B. um

  • bei Rapidshare, Fileload, oder Netload die Wartezeit zu umgehen
  • ein zweites anonymes Blog Posting abzugeben
  • nochmal bei einem Voting abzustimmen
  • .... da gibts noch hunderte andere Gründe

Natürlich kann man das ganze manuell über die Weboberflächen von Modem und Router bewerksteligen, aber das ist ja keine Herausforderung und zudem auch nur schlecht zu automatisieren.

Was es bisher nicht gab, war ein lauffähiges Reconnect Script für folgende Kombination:

  • Ubuntu Linux (also ein Bash Script)
  • Netgear Router (54 Mbps Wireless Router model WGR614 v7)
  • Motorola Kabel Modem von Unity Media (Cable Modem SBV5121E)

Das ganze Script ist Programmierer-typisch "ausreichend schlecht" kommentiert ;-) und damit eventuell nicht für Noobs Anfänger zu gebrauchen ... aber ich will ja nicht so sein und bitte daher meine Hilfestellung in den Kommentaren an.

Das Reconnect Skript

#!/bin/bash

# ------------------------------------------------------------------------------
# Die folgenden Variable bitte an Eure Umgebung anpassen
USER_MODEM="admin"
PASS_MODEM="motorola"
USER_ROUTER="admin"
PASS_ROUTER="passwort"
LOG_PATH="/home/kevin/scripts/ips/"
# ------------------------------------------------------------------------------

# ******************************************************************************
# AB HIER NUR NOCH EDITIEREN, WENN IHR WISST WAS IHR TUT ;)
# ******************************************************************************

# ------------------------------------------------------------------------------
# Ein paar Variablen die wir spaeter noch benoetigen
curdate=`date +%Y-%m-%d`
tempip="/tmp/findip.html"
iphistory=$LOG_PATH""$curdate"-iphistory.log"
maczahl=$LOG_PATH"mac.txt"
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Überprüfe ob das Verzeichniss schon existiert, wenn nicht erstelle es
if [ ! -d $LOG_PATH ]
then
  `mkdir $LOG_PATH`
fi
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Ein paar Variablen die wir spaeter noch benoetigen
curdate=`date +%Y-%m-%d-`
iphistory="/home/kevin/scripts/ips/"$curdate"iphistory.log"
tempip="/tmp/findip.html"
maczahl="/home/kevin/scripts/ips/mac.txt"
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Finde aktuelle IP heraus
wget -q -O $tempip http://checkip.dyndns.org/index.html
WAN_IP=`sed 's/<html><head><title>Current IP Check<\/title><\/head><body>Current IP Address: //g' $tempip | sed 's/<\/body><\/html>//g'`
rm $tempip
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Warmstart Kabel Modem
curl "http://192.168.100.1/loginData.htm?loginUsername="$USER_MODEM"&loginPassword="$PASS_MODEM"&LOGIN_BUTTON=Login "
curl "http://192.168.100.1/reset.htm?reset_modem=Restart+Cable+Modem"
# ------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# Schritt 1 (Zaehlschleife): Wert auslesen der letzten 11/12 Stelle der Mac-Adresse
if [ -f $maczahl ]
then
  MAC_ZAHL=`cat $maczahl`
else
  MAC_ZAHL=10
fi
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# MAC-Übergabe an Router und Restart
# Spoofmac=0000000000 durch die ersten 10 Stellen Eurer Router MAC ersetzen
curl "http://$USER_ROUTER:"$PASS_ROUTER"@192.168.1.1/ether.cgi" -d "system_name=WGR614v7&domain_name=&WANAssign=dhcp&DNSAssign=0&MACAssign=2&Spoofmac=0000000000"$MAC_ZAHL"&apply=%DCbernehmen&runtest=no&wan_proto=dhcp&wan_netmask=255.255.252.0&wan_dns_sel=0&wan_dns1_pri=0.0.0.0&wan_dns1_sec=&wan_hwaddr_sel=2&wan_hwaddr2=00%3A00%3A00%3A00%3A00%3A"$MAC_ZAHL
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Schritt2: Wert um Wert 1 erhöhen. Die IP-Adresse wird per DHCP vom KABEL-Provider zugewiesen.
let "MAC_ZAHL += 1"
if [ $MAC_ZAHL -ge 61 ]
then
   MAC_ZAHL=10
fi
echo $MAC_ZAHL > $maczahl
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Neue WAN-IP ermitteln!
wget -q -O $tempip http://checkip.dyndns.org/index.html
WAN_IP_NEW=`sed 's/<html><head><title>Current IP Check<\/title><\/head><body>Current IP Address: //g' $tempip | sed 's/<\/body><\/html>//g'`
rm $tempip
# ------------------------------------------------------------------------------

# ------------------------------------------------------------------------------
# Log-Datei befüllen
echo "===================================
`date`
Vorher: $WAN_IP
Nachher: $WAN_IP_NEW" >> $iphistory
# ------------------------------------------------------------------------------

Anleitung

  • Den Code in eine neue Datei z.B. reconnect.sh kopieren & speichern
  • Variablen im oberen Skript Bereich an Eure Umgebung anpassen
  • MAC Adresse anpassen: Spoofmac=0000000000 mit den ersten 10 Zeichen der zwölfstelligen MAC des Routers ersetzen. Die letzten zwei Ziffern NICHT EINTRAGEN, die werden zufällig generiert damit man auch tatsächlich eine neue IP bekommt.
  • Datei ausführbar machen chmod a+x reconnect.sh
  • Testen mit ./reconnect.sh

Hintergrund:

Unitymedia vergibt nur in festen Zyklen neue IPs und merkt sich anhand der MAC Adresse Eure alte IP. Wenn das Modem neugestartet wird, wird also erstmal kontrolliert ob es eine aktuelle IP für die MAC Adresse gibt und NUR eine neue vergeben, wenn eine neue/geänderte MAC Adresse vorliegt.
Deswegen muß diese zwangsläufig erst durch das Skript geändert werden.

Disclaimer

DAS GANZE IST EIN REIN AKADEMISCHER VERSUCH! ICH DISTANZIERE MICH AUSDRÜCKLICH VON DER AKTIVEN NUTZUNG DER HIER AUFGEZEIGTEN TECHNISCHEN MACHBARKEITSSTUDIE UND ÜBERNEHME KEINE HAFTUNG FÜR EVENTUELLE SCHÄDEN JEGLICHER ART.

Wieso der Disclaimer?

Naja, als Programmierer habe ich einfach versucht eine selbstgestellte Aufgabe zu lösen. Mir geht es nicht darum, diese auch anzuwenden. Das Script habe ich veröffentlicht, um anderen bei ähnlich gelagerten Problemen eine erste Lösungsskizze anzubieten! Wer es nutzt, ist selbst verantwortlich...

Bedenkt, das der IP Adressraum ein begrenzter Bereich ist. Ein Mißbrauch der aufgezeigten Lösung hätte negative Konsequenzen für alle User.
Eine einmal benutzte IP Adresse wird mitunter 24 Stunden beim Provider gesperrt (Lease Time) bis diese wieder in den IP Pool zurückwandert, darüber sollte man sich mal Gedanken machen! Wenn jeder DSL Kunde das 100 mal pro Tag machen würde, könnte sich nachher niemand mehr einloggen...

Achso, das ganze ist nicht zu 100% auf meinem Mist gewachsen, ich hab mir im Gulli Forum Anregungen zu den curl Aufrufen geholt.

Viel Spaß beim Testen und hinterlasst doch ein Kommentar und/oder auch ein "Danke".

War der Artikel für Euch wertvoll? Wollt Ihr Euch den Beitrag merken
oder das Lesezeichen mit anderen Menschen teilen?!? Dann los:
 

Kommentare

modo1979 schrieb am 01.06.09, 01:59:

super wenns gehen würde


Kevin schrieb am 01.06.09, 14:52:

Was soll ich sagen, bei mir funktioniert es. Was genau klappt denn bei Dir nicht?


Steffan schrieb am 02.13.09, 04:02:

Danke kevin,super funktioniert


bohnjovi schrieb am 06.21.09, 21:59:

Ich habe nicht verstanden. Wie man, wohin, dass machen muss. Kannst du die fertige Datei machen?, und ich werde es herunterladen, oder mach ein paar Scrinshot, dass, wohin machen, aufzusparen und abzuschreiben
BITTE bitte bitte!!!!!!!!


Kevin schrieb am 06.21.09, 22:57:

Öffne einfach einen Editor, speicher die Datei ab. Dann in der Bash ein "chmod a+x dateiname" und die Datei über "./dateiname" ausführen.

Linux Basics kannst Du z.B. bei ubuntuusers.de nachlesen :)


Rainer schrieb am 02.27.10, 11:33:

Was mache ich, wenn ich keinen Router sondern nur eine Netzwerkkarte habe?


Kevin schrieb am 02.28.10, 20:27:

Hallo Rainer, Du hast ja entweder ein Modem/Router oder aber eine feste IP. Zweites ist normalerweise nur bei Unternehmennetzen der Fall, da helfen nur Proxies.
Wenn Du aber zuhause sitzt, wovon ich ausgehe, wirst Du auch ein Gerät haben das zwischen Deinem Computer und dem Netz (also Deinem Provider) kommuniziert. Das musst Du identifizieren und dann nachschauen wie man damit ein Reconnect hinbekommt.


Rainer schrieb am 02.28.10, 20:47:

Hi Kevin,
Danke für die Rückmeldung. Ich habe exakt das Kabelmodem für das Script (Motorola SBV5121E) und betreibe das über eine PCI-Netzwerkkarte. Bei Windows konnte ich die MAC-Adresse der Netzwerkkarte über das Programm "MacMakeUp" ändern. Meine Frage ist jetzt: Wie mach ich das mit Ubuntu?
Bzw.: Wie muss Dein Script dafür geändert werden? Dort wird ja sowohl das Kabelmodem, als auch der Router (WGR614) angesprochen.


Kevin schrieb am 02.28.10, 21:14:

Das sollte mit dem Befehl "sudo ifconfig eth0 hw ether *mac-addresse*" gehen, allerdings kommt es da wohl zu Komplikationen in Verbindung mit dem Networkmanager (habs nicht getestet, nur gelesen). Am besten mal im Ubuntuusers Forum unter http://forum.ubuntuusers.de/ stöbern ;)







Captcha Code:

Impulse

Es ist immer etwas Wahnsinn in der Liebe. Es ist aber auch immer etwas Vernunft im Wahnsinn.

Friedrich Nietzsche


BIGACE CMS

"Kinderleicht zu bedienen, einfach zu erweitern", so der Leitsatz des in Deutschland entwickelten und PHP basierten Web CMS.
BIGACE - mehr erfahren


Footer Links...

... sind out. Dafür LinkLove, dies ist ein DoFollow Blog! Askimet läuft und hat bisher 419 mal zugeschlagen.

Ihr könnt mich gerne auf interessante Infos aufmerksam machen, gebloggt werden kann immer ;-D

Suche

Und wenn Sie partout nicht finden, wonach Sie suchen, hier ist Ihre Chance es doch noch aufzustöbern: