Skip to content

Instantly share code, notes, and snippets.

@initbrain
Last active November 4, 2023 17:35
Show Gist options
  • Save initbrain/6630524 to your computer and use it in GitHub Desktop.
Save initbrain/6630524 to your computer and use it in GitHub Desktop.
Script de renouvellement d'adresse IP (prise en charge des Livebox 1 et 2)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Julien Deudon (initbrain)
# Livebox_utility v0.2 du 26/09/2011
# Testé sous Windows XP SP3 (32bits) avec VirtualBox
# et sous Windows 7 Pro SP1 (64bits) grâce à Py2exe :
# https://www.initbrain.fr/static/code/Livebox_utility.rar
import urllib2, base64, re
from time import sleep
#import os # Pour logger l'IP
#from time import strftime, localtime # Pour logger l'heure d'attribution de l'IP
username = "admin" # Utilisateur et mot de passe par défaut
password = "admin" # Mot de passe à modifier si changé (recommandé)
def req(url,v1=None):
global source
request = urllib2.Request(url)
if v1: request.add_header("Authorization", "Basic %s" % base64.encodestring('%s:%s' % (username, password)).replace('\n', ''))
c=True
while c:
try:
connection = urllib2.urlopen(request)
except:
print "[-] Contact avec la Livebox échoué (nouvel essai dans 5s)"
sleep(5)
else:
c=False
source = connection.read()
connection.close()
def neg(v1=None):
if v1:
print "[~] Négociation en cours (30s) ..."
sleep(30)
negotiation=True
while negotiation:
req("http://192.168.1.1/srv_internet.html",1)
adsl_status = re.compile('"([\w&;]+)</font>", "adsl_status', re.MULTILINE).findall(source) # Récupération du status de la connexion
if "Connect&eacute;" in adsl_status:
negotiation=False
addr = re.compile('"([\d\.]+)</font>", "addr', re.MULTILINE).findall(source) # Récupération de l'adresse IP
if addr:
print "[+] Connecté ("+addr[0]+")"
#os.system("echo '"+strftime('%d/%m/%Y %H:%M:%S',localtime())+" -> "+addr[0]+"' >> ip.log")
else:
print "[~] Toujours en négociation (+10s) ..."
sleep(10)
else:
print "[~] Négociation en cours (5s) ..."
sleep(5)
negotiation=True
while negotiation:
req("http://192.168.1.1")
addr = re.compile('<td class="value">([\d\.]{4,})</td>', re.MULTILINE).findall(source) # Récupération de la nouvelle adresse IP
if addr:
negotiation=False
print "[+] Connecté ("+addr[0]+")"
#os.system("echo '"+strftime('%d/%m/%Y %H:%M:%S',localtime())+" -> "+addr[0]+"' >> ip.log")
else:
print "[~] Toujours en négociation (+5s) ..."
sleep(5)
if __name__ == "__main__":
req("http://192.168.1.1")
if "Statut ADSL" in source: # Livebox 1
print "[+] Livebox 1"
req("http://192.168.1.1/srv_internet.html",1)
adsl_status = re.compile('"([\w&;]+)</font>", "adsl_status', re.MULTILINE).findall(source) # Réupération du status de la connexion
if "Connect&eacute;" in adsl_status:
addr = re.compile('"([\d\.]+)</font>", "addr', re.MULTILINE).findall(source) # Récupération de l'adresse IP
if addr: print "[+] Connecté ("+addr[0]+")"
req("http://192.168.1.1/internetok.cgi",1) # Renouvellement de l'adresse IP
neg(1) # Récupération de la nouvelle adresse IP
else:
print "[-] Déconnecté"
choice=""
while choice not in ['o','O','y','Y','n','N']:
choice = raw_input("[?] Voulez-vous connecter votre Livebox à Internet ? (o/n) ")
if choice in ['o','O','y','Y']:
req("http://192.168.1.1/internetok.cgi?enblInternet=1",1) # Demande d'une adresse IP
neg(1)
elif "GUI_master" in source: # Livebox 2
print "[+] Livebox 2"
addr = re.compile('<td class="value">([\d\.]{4,})</td>', re.MULTILINE).findall(source) # Récupération de l'adresse IP
if addr: print "[+] Connecté ("+addr[0]+")"
req("http://192.168.1.1/index.cgi?authlogin="+username+"&authpasswd="+password+"&authaction=login") # Connexion
sessionid = re.compile("index\.cgi\?page=home&sessionid=([\w]+?)\'", re.MULTILINE).findall(source)
req("http://192.168.1.1/index.cgi?page=internet&action=reset&sessionid="+sessionid[0]) # Renouvellement de l'adresse IP
neg() # Récupération de la nouvelle adresse IP
else:
print "[!] Problème d'identification de la version de votre Livebox..."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment