Last active
November 4, 2023 17:35
-
-
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)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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é" 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é" 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