如何在python中设置“ip地址”、“DNS”、“hostname”、“MAC address”?

2024-04-19 07:03:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个网络安全IP扫描程序的脚本,这样的工具可能需要欺骗它的主机网卡状态,以便测试,例如, 要设置NIC的ip地址, 要设置DNS地址, 设置主机名时, MAC地址和 启用/禁用NIC适配器。在

我在google上搜索发现,大多数soultion都在使用“popen”调用系统现有的工具,比如

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

从系统中得到回报。另外还有一些模块可以读取网卡的状态,比如netifaces,但似乎所有的模块都是“只读”的,但不能直接访问。在

因为我发现没有任何模块可以直接设置网卡状态,所以我在这里请求帮助,看看是否有人可以帮忙或展示更好的方法。在

任何提示都会通知你的。 谢谢!在

Rgs公司 KC公司


Tags: 模块工具程序ip脚本osdns状态
2条回答

我以前做过这个,没有一个明确的Python操作系统接口来处理类似的底层操作系统。您只需为UNIX(/Windows/Mac)命令编写一个(特定于操作系统的)包装器。这不难,只是乏味。在

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

对于interface to subprocess.Popen() is admittedly irritating,几乎可以肯定的是,您将为自己的理智编写一个包装器,以提供正常的默认参数值并整理代码。显然,要密切关注命令的退出状态、路径前缀等,不确定您有多在乎可移植性。在

#!/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

相关问题 更多 >