Как настроить "IP-адрес","DNS", "имя хоста","MAC-адрес" в Python?

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

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

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

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

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

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

Rgs KC

2 ответа

Решение
#!/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

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

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

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

Другие вопросы по тегам