【问题标题】:how to setup "ip address","DNS", "hostname","MAC address" in python?如何在 python 中设置“IP 地址”、“DNS”、“主机名”、“MAC 地址”?
【发布时间】:2017-08-11 21:57:31
【问题描述】:

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

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

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

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

由于我发现没有模块可以直接设置网卡状态,所以我在这里寻求帮助,看看是否有人可以提供帮助或提供更好的方法。

任何提示都会被应用。 谢谢!

Rgs KC

【问题讨论】:

    标签: python macos ip hostname nic


    【解决方案1】:
    #!/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
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。也请尽量不要用解释性的 cmets 挤满你的代码,这会降低代码和解释的可读性!
    【解决方案2】:

    我之前做过这个,没有明确的 Python 操作系统接口来连接低级操作系统特定的东西。您只需为 UNIX(/Windows/Mac) 命令编写一个(特定于操作系统的)包装器。这并不难,只是乏味。

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

    interface to subprocess.Popen() is admittedly irritating,您几乎肯定会最终为自己的理智编写一个包装器,以提供合理的默认 arg 值并整理您的代码。显然要密切注意命令退出状态、路径前缀等。不确定您对可移植性的关心程度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 2014-12-02
      • 1970-01-01
      相关资源
      最近更新 更多