如何在Python中设置“IP地址”、“DNS”、“主机名”、“MAC地址”?
我想写一个脚本,用于网络安全的IP扫描。这个工具可能需要伪装它的网络接口卡(NIC)状态来进行测试,比如:
- 设置网络接口的IP地址,
- 设置DNS地址,
- 设置主机名,
- 设置MAC地址,
- 启用或禁用网络接口适配器。
我在网上搜索,发现大多数解决方案是使用“popen”来调用系统中现有的工具,比如:
>>> import os
>>> p=os.popen("/sbin/ifconfig eth0")
>>> t=p.read()
>>> p.close()
这样可以从系统获取返回结果。另外,还有一些模块可以读取网络接口的状态,比如netifaces,但似乎它们都是“只读”的,不能直接写入。
因为我找不到可以直接设置网络接口状态的模块,所以我在这里寻求帮助,希望有人能提供一些建议或更好的方法。
任何提示都非常感谢!
祝好,
KC
2 个回答
我之前做过这件事,Python的os模块并没有直接提供一些低级的、特定于操作系统的功能。你需要自己写一个(特定于操作系统的)包装器来调用UNIX(或Windows/Mac)的命令。这并不难,只是比较麻烦。
os.popen*()这个方法已经很过时了(自2.4版本起),建议使用subprocess模块。
subprocess.Popen()的接口确实有点让人烦人,你几乎肯定会为了让自己更好理解而写一个包装器,来提供一些合理的默认参数值,并让代码更简洁。显然,你需要特别注意命令的退出状态、路径前缀等等。不知道你有多在意代码的可移植性。
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,程序就会做出反应。这种反应可以是显示一个消息、打开一个新页面,或者执行其他的代码。
为了实现这些功能,我们通常会使用“事件”这个概念。事件就像是程序中的一个信号,告诉程序某件事情发生了。比如,当你点击鼠标、按下键盘,或者页面加载完成时,都会产生事件。
程序员可以为这些事件设置“监听器”,就像是一个守卫,时刻关注这些事件的发生。一旦事件发生,监听器就会触发相应的代码,让程序执行预定的操作。
总之,事件和监听器是让程序与用户互动的重要工具。通过它们,程序能够根据用户的动作做出反应,从而提供更好的使用体验。
#!/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