1

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

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

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

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

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

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

Rgs KC

4

2 回答 2

0

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

os.popen*() 非常不推荐使用(从 2.4 开始),使用 subprocess 模块

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

于 2011-07-04T00:27:22.977 回答
0
#!/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
于 2017-08-11T13:09:38.183 回答