Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置";ip地址&引用;域名系统&引用;主机名“&引用;MAC地址“;用python?_Python_Macos_Ip_Hostname_Nic - Fatal编程技术网

如何设置";ip地址&引用;域名系统&引用;主机名“&引用;MAC地址“;用python?

如何设置";ip地址&引用;域名系统&引用;主机名“&引用;MAC地址“;用python?,python,macos,ip,hostname,nic,Python,Macos,Ip,Hostname,Nic,我想写一个用于网络安全IP扫描的脚本,这样的工具可能需要欺骗它的主机NIC状态以进行测试,例如, 要设置NIC的ip地址, 要设置DNS地址, 在设置主机名时, MAC地址和 启用/禁用NIC适配器 我在谷歌上搜索发现,大多数soultion都使用“popen”调用系统现有工具,如 >>> import os >>> p=os.popen("/sbin/ifconfig eth0") >>> t=p.read() >>> p

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

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

>>> import os
>>> p=os.popen("/sbin/ifconfig eth0")
>>> t=p.read()
>>> p.close() 
从系统中获取返回。此外,还有一些模块可以读取NIC的状态,如netifaces,但似乎所有这些模块都是“只读”的,但不能直接连接

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

任何提示都将被告知。 谢谢

Rgs
KC

我以前做过这件事,像这样的底层操作系统没有明确的Python操作系统接口。您只需为UNIX(/Windows/Mac)命令编写一个(特定于操作系统的)包装器。这并不难,只是单调乏味


最后,您几乎肯定会为自己的理智编写一个包装器,以提供合理的默认arg值并整理代码。显然,请密切注意命令退出状态、路径前缀等。不确定您是否关心可移植性。

虽然此代码片段可能会解决这个问题,但确实有助于提高帖子的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。还请尽量不要用解释性注释挤满你的代码,这会降低代码和解释的可读性!
#!/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