Kevin Papst PHP Freelancer aus Berlin

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

I

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 Downloadseiten die Wartezeit zu umgehen
  • ein weiteres anonymes Blog Kommentar abzugeben
  • nochmal bei einem Voting abzustimmen
  • …. da gibts noch hunderte andere schlechte 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 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.

Viel Spaß beim Testen und für Fragen nutzt die Kommentarfunktion.

Kevin Papst PHP Freelancer aus Berlin

Rubriken

Stichwörter

Get in touch