2010-07-27 30 views
1

Je veux écrire un script pour la sécurité IP du réseau porpose, un tel outil peut avoir besoin d'usurper son statut de carte d'hôte pour tester, par exemple, pour configurer l'adresse IP de la carte réseau, pour configurer l'adresse DNS, pour configurer le nom d'hôte , adresse MAC et activer/désactiver l'adaptateur de cartes réseau.comment configurer "adresse IP", "DNS", "nom d'hôte", "adresse MAC" en python?

I googlé et trouvé le plus soultion utilise « popen » système invoquant des outils existants tels que

>>> import os 
>>> p=os.popen("/sbin/ifconfig eth0") 
>>> t=p.read() 
>>> p.close() 

pour obtenir le retour du système. Il y a aussi des modules qui peuvent lire l'état de la carte réseau, comme les netifaces, mais ils semblent tous être "LIRE SEULEMENT" mais ne peuvent pas être directement connectés.

Comme je n'ai trouvé aucun module pouvant configurer le statut de la carte réseau directement, je demande ici de l'aide pour voir si quelqu'un peut donner un coup de main ou montrer une meilleure façon.

Toutes les indications seront indiquées. Merci!

Rgs KC

Répondre

0

Je l'ai fait précédemment, il n'y a pas d'interface explicite os Python pour farcir OS spécifique à bas niveau comme ça. Vous avez juste à écrire un wrapper (spécifique à l'OS) aux commandes UNIX (/ Windows/Mac). Ce n'est pas dur, juste ennuyeux.

os.popen*() is very deprecated (since 2.4), use subprocess module.

Le interface to subprocess.Popen() is admittedly irritating, vous finirez presque sûrement d'écrire un wrapper pour votre propre santé afin de fournir des valeurs d'arguments par défaut raisonnables et de désencombrer votre code. Évidemment, faites très attention aux états de sortie des commandes, aux préfixes de chemins, etc. Vous ne savez pas à quel point vous vous souciez de la portabilité.

0
#!/usr/bin/env python 
# -*- coding:utf-8 -*- 
# 
# Copyright 2014 by mimvp.com 


def get_valid_ip(cls, ip_str): 
    ip_str_new = '' 
    ip_re = re.compile(r'\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b') 
    ipList = ip_re.findall(ip_str) 
    if len(ipList) >= 1: 
     ip_str_new = ipList[0] 
     ip_str_new = ip_str_new.lstrip("0")  # '05.9.87.163' ==> '5.9.87.163' 
    return ip_str_new 


if __name__ == '__main__': 
    result = os.popen("/sbin/ifconfig en0 | grep broadcast") 
    ip_inet = result.read() 
    for ip_str in ip_inet.split(" "): 
     if self.get_valid_ip(ip_str) : 
      print ip_str 
+2

Bien que cet extrait de code peut résoudre la question, [y compris une explication] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) aide vraiment à améliorer la qualité de votre message Rappelez-vous que vous répondez à la question pour les lecteurs dans le futur, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code. Essayez également de ne pas surcharger votre code avec des commentaires explicatifs, ceci réduit la lisibilité du code et des explications! – Machavity