Je fais appel à vous car je bloque depuis plusieurs semaine sur un problème.
Nous avons créer une messagerie instantané peer-to-peer en Python avec le module socket. Jusqu’ici tout va bien.
Nous aimerions cependant, pouvoir se connecter entre nous depuis des réseaux différent (je suis chez moi et je veux me connecter à un autre client hors de mon réseau local), je sais qu’on peut utiliser les tables NAT/PAT mais nous voudrions que ce soit automatique.
Nous avons regardé aussi pour le module Python upnpy mais celui-ci ne fonctionne pas tout le temps, parfois il fonctionne à merveille et parfois il crash, des bugs on été envoyé sur le dépot officiel mais pour le moment il n’y a aucun correctif.
Ma question est donc, connaiteriez-vous une methode simple et efficace pour ouvrir/fermer les ports automatiquement sur la box en Python sur Mac, Linux et Windows ?
il existe des modules curl pour python et en théorie on devrait pouvoir accéder ainsi a l’interface d’administration d’une box mais en pratique, même si ce serait sans doute efficace, ça risque de pas être vraiment simple…
clair ! les difficultés commence là … en précisant le type de box, (et curl, user,password ) tu trouves des exemples dans différents langages…
Mais après quelques bidouilles sur ma livebox, il semble que les cookies que la livebox génère soit issue de javascript et que curl ne gère pas ce type de cookie … mal barré !
avec les outils de développement web de firefox on doit pouvoir récupérer les sources des html, javascript, etc. présent sur la livebox;
sur ma vieille livebox V2 le fichier scripts.js (http://livebox.home/scripts.js) semble être le carrefour du système ! mais de la à y comprendre quelque chose ! ça dépasse mon niveau de compétennce
source: curl - HTTP Cookies
pour en revenir à nos moutons
il est possible de se connecter à une livebox 2 ( sans doute aussi a d’autres ! ) en python avec selenium:
pas vraiment simple ça demanderai un tuto mais en simplifiant:
on crée un script
. installer selenium ide sur firefox
. on crée un « test » ( en fait il suffit de faire la connexion sur la livebox en ayant au préalable, appuyer sur "enregistrement )
. une fois l’enregistrement terminé on exporte au format python
on le rejoue dans un script python3
. on installe avant selenium avec pip3 install selenium (et idem avec pytest)
. on modifie le script python issue de l’exportation ( en fait il suffit d’utiliser les différentes fonctions que l’ide génère et rajouter quelques « time.sleep » quand les temps de réponse de la box sont trop long…)
compilation du driver pour firefox (geckodriver) sur raspberry pi4 PIos.
. j’ai utilisé firefox donc j’ai eu besoin du driver firefox ( non? sisi ! ) pour ça j’en ai compilé un a partir des source (geckodriver 30.0)
. je l’ai collé dans un répertoire accessible par le systeme ( /usr/local/bin )
. pour d’autres systèmes (windows, mac, llinux) il faudra trouver les drivers correspondants
A noter que même si ce buziness m’a simplement servi a avoir un script pour allumer (ou éteindre ) le wifi sur une box, il doit pouvoir se connecter et interagir avec d’autres serveurs web.
En source les liens utiles (download et documentations)
. selenium ide
Merci beaucoup pour votre réponse, cela a dû vous demander beaucoup de votre temps pour trouver cette solution.
Malheureusement, ce n’est pas possible de mettre cela en place. En effet, il faut toujours demander le mot de passe d’administration de la box ! De plus, comme vous l’avez vous-même préciser plus haut cela ne fonctionne que pour un modèle, j’ai testé avec la Livebox 4 la Livebox play et la Livebox Pro et bien sûr, les interfaces ne sont pas du tout les mêmes alors si nous devions en plus faire cela pour tout les opérateurs cela devient impossible.
Cependant, il y a encore de l’espoir, ce n’ai pas tout à fait abouti, mais j’ai commencé à lire le code source de programme (Syncthing, Bitwarden, 0A.D) qui utilise l’UpNP. J’espère que je trouverai une solution.
En tout cas merci quand même pour l’outil ci-dessus @bof , je ne le connaissais pas, mais il peut m’être utile dans d’autres projets.