Ouverture de ports (Python)

Bonjour à tous ! :wave:

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. :slight_smile:
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 ?

Merci beaucoup pour votre aide !!
:slight_smile:

hello,

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…

Bonjour @bof !

Merci pour votre réponse rapide !

J’ai fais quelques recherches sur internet et je vois…qu’il n’y à pas beaucoup d’aide. :slight_smile:

Le problème avec curl c’est qu’il faut avoir le mot de passe de la box pour pouvoir accéder à l’interface d’administration, non ?

Merci

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 :wink:
source:
curl - HTTP Cookies

PS: il y a peut être un moyen avec un « headless browser »" d’accéder à la box…
j’ai trouvé un addons pour firefox (Selenium IDE – Adoptez cette extension pour 🦊 Firefox (fr)) qui génère un script reste plus qu’a trouvé le moyen de le faire fonctionner en ligne de commande…
peut être avec selenium-side-runner
How to manage browsers binaries using WebDriverManager in Selenium?

Effectivement, on voit rarement des conseils concernant ce sujet. Mais heureusement qu’il y a des forums de ce genre, vous ne trouvez pas?

1 « J'aime »

Oui, heureusement ça permet d’échanger les connaissances.

C’est un avantage pour nous, non ?

pour en revenir à nos moutons :wink:
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:

  1. 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

  2. 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…)

  3. 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

. selenium ide docs

… selenium python

. la compilation du driver firefox pour Rpi
https://firefox-source-docs.mozilla.org/testing/geckodriver/ARM.html
. les sources du driver Source code

Bonjour @bof !

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.