Как настроить "IP-адрес", "DNS", "имя хоста", "MAC-адрес" в Python? - PullRequest
1 голос
/ 27 июля 2010

Я хочу написать сценарий для проверки IP-адреса безопасности сети, такому инструменту может потребоваться подделка статуса сетевого адаптера для тестирования, например, настроить IP-адрес NIC, настроить DNS-адрес, пока настраивать имя хоста, MAC-адрес и включить / отключить адаптер NIC.

Я гуглил и обнаружил, что большая часть души использует "popen", вызывая существующие инструменты системы, такие как

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

чтобы получить возврат из системы. Также есть модули, которые могут считывать статус NIC, такие как netifaces, но, похоже, все они «только для чтения», но не могут напрямую связываться.

Поскольку я обнаружил, что никакие модули не могут напрямую устанавливать статус NIC, я прошу помочь, чтобы узнать, может ли кто-нибудь помочь или показать более лучший способ.

Любые намеки будут оценены. Спасибо!

Rgs KC

Ответы [ 2 ]

0 голосов
/ 11 августа 2017
#!/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
0 голосов
/ 04 июля 2011

Я делал это ранее, нет явного интерфейса Python OS для подобных низкоуровневых ОС-вещей.Вам просто нужно написать (специфичную для ОС) оболочку для команд UNIX (/ Windows / Mac).Это не сложно, просто утомительно.

os.popen * () очень устарело (начиная с версии 2.4), используйте модуль подпроцесса .

Интерфейс для подпроцесса.Popen () по общему признанию раздражает , вы почти наверняка закончите тем, что напишите обертку для вашего собственного здравого смысла, чтобы предоставить вменяемые значения arg по умолчанию и загромождать ваш код.Очевидно, обратите пристальное внимание на статусы выхода команд, префиксы путей и т. Д. Не уверен, насколько вы заботитесь о переносимости.

...