Comment faire pour affecter une adresse IP à l'interface en python?
J'ai un script python qui défini l'IP4 adresse de mon sans-fil et filaire interfaces. Jusqu'à présent, j'utilise subprocess
commande comme :
subprocess.call(["ip addr add local 192.168.1.2/24 broadcast 192.168.1.255 dev wlan0"])
Comment puis-je régler l'IP4 adresse d'une interface à l'aide de bibliothèques python?
et si il y a un moyen d'obtenir un déjà existant de la propriété intellectuelle configurations à l'aide de bibliothèques python ?
- diviser l'argument:
call(shlex.split("ip addr add local..."))
sinon, vous devriez obtenir "Aucun fichier ou répertoire d'erreur". - stackoverflow.com/questions/166506/...
Vous devez vous connecter pour publier un commentaire.
Définir une adresse par les anciens
ioctl
interface:(réglage du masque de réseau est fait avec
SIOCSIFNETMASK = 0x891C
)Les adresses Ip peuvent être récupérées de la même manière: Trouver des adresses IP à l'aide de Python stdlib
Je crois qu'il y est un python de mise en œuvre de Netlink si vous souhaitez l'utiliser sur
ioctl
SIOCADDRT
(0x890B). Je propose de vous familiariser avec Netlink si vous allez faire beaucoup d'interfaçage avec le réseau de l'interface.Avec pyroute2.IPRoute:
Avec pyroute2.IPDB:
Vous avez plusieurs options pour le faire à partir de votre programme en python.
On pourrait utiliser la
ip
outil comme vous l'a montré. Si ce n'est pas la meilleure option à tout cela, on fait le travail tout en étant un peu lent et arkward de programme.Une autre façon de faire les choses
ip
ne sur votre propre en utilisant le noyau netlink interface directement. Je sais que libnl a quelques expérimentale (?) liaisons python. Cela peut fonctionner, mais vous aurez à traiter avec beaucoup de bas niveau de stuff. Je ne recommanderais pas cette façon de simple "à définir et à obtenir" ips mais c'est le plus "correct" et de moyen fiable de le faire.La meilleure façon à mon avis (si vous ne voulez définir et obtenir ips) serait d'utiliser le aux gestionnaires de réseau interface dbus. Tout cela est très limitée et peut avoir ses propres problèmes (il peut se comportent pas de la manière que vous aimeriez qu'il) c'est le plus simple si le NetworkManager est en cours d'exécution de toute façon.
Choisir le
libnl
approche si vous souhaitez obtenir vos mains dans le cambouis, c'est clairement supérieure, mais aussi beaucoup plus de travail. Vous pouvez aussi sortir avec NetworkManager interface dbus, selon vos besoins et le système général de l'installation. Sinon, vous pouvez la laisser comme ça.