Python:收集IP信息
2016-06-11 20:26
441 查看
下面通过两种方法实现收集IP信息
1、通过 ifconfig 命令输出IP信息,并以“\n\n”切片分成不同的网卡块
2、通过 ifconfig 命令输出IP信息,并以第一个字符在顶格的方式切片分成不同的网卡块
3、通过 ifconfig 命令输出IP信息,并用正则表达式来获得
# vim ip1.py
验证结果如下:
# vim ip2.py
验证结果如下:
# vim ip3.py
验证结果如下:
可以看到三个方法的输出结果都是一样的字典,但是数据结构不同,第一种方法适合ifconfig命令执行后输出的网卡信息之间存在一个空行,第二种方法是系统比较通用的。第三种是通过正则方式来获得。
1、通过 ifconfig 命令输出IP信息,并以“\n\n”切片分成不同的网卡块
2、通过 ifconfig 命令输出IP信息,并以第一个字符在顶格的方式切片分成不同的网卡块
3、通过 ifconfig 命令输出IP信息,并用正则表达式来获得
# vim ip1.py
#!/usr/bin/env python from subprocess import Popen, PIPE def getIfconfig(): p = Popen(['ifconfig'], stdout=PIPE) data = p.stdout.read().split('\n\n') return [i for i in data if i and not i.startswith('lo')] def parseIfconfig(data): dic = {} for lines in data: line_list = lines.split('\n') devname = line_list[0].split()[0] macaddr = line_list[0].split()[-1] ipaddr = line_list[1].split()[1].split(':')[1] dic[devname] = [ipaddr, macaddr] return dic if __name__ == '__main__': data = getIfconfig() print parseIfconfig(data) |
# vim ip2.py
#!/usr/bin/env python from subprocess import Popen, PIPE def getIP(): p = Popen(['ifconfig'], stdout=PIPE, stderr=PIPE) stdout, stderr = p.communicate() data = [i for i in stdout.split('\n') if i] return data def genIP(data): new_line = '' lines = [] for line in data: if line[0].split(): lines.append(new_line) new_line = line + '\n' else: new_line += line + '\n' lines.append(new_line) return [i for i in lines if i and not i.startswith('lo')] def parseIfconfig(data): dic = {} for lines in data: line_list = lines.split('\n') devname = line_list[0].split()[0] macaddr = line_list[0].split()[-1] ipaddr = line_list[1].split()[1].split(':')[1] dic[devname] = [ipaddr, macaddr] return dic if __name__ == '__main__': data = getIP() data_list = genIP(data) print parseIfconfig(data_list) |
# vim ip3.py
#!/usr/bin/env python import re from subprocess import Popen, PIPE def getIfconfig(): p = Popen(['ifconfig'], stdout=PIPE) data = p.stdout.read().split('\n\n') return [i for i in data if i and not i.startswith('lo')] def parseIfconfig(data): re_devname = re.compile(r'(br|eth|em|virbr|lo|bound)[\d:]+',re.M) re_mac = re.compile(r'HWaddr ([0-9A-F:]{17})',re.M) re_ip = re.compile(r'inet addr:([\d\.]{7,15})',re.M) devname = re_devname.search(data) if devname: devname = devname.group() else: devname = '' mac = re_mac.search(data) if mac: mac = mac.group(1) else: mac = '' ip = re_ip.search(data) if ip: ip = ip.group(1) else: ip = '' return {devname: [ip, mac]} if __name__ == '__main__': dic = {} data = getIfconfig() for i in data: dic.update(parseIfconfig(i)) print dic |
可以看到三个方法的输出结果都是一样的字典,但是数据结构不同,第一种方法适合ifconfig命令执行后输出的网卡信息之间存在一个空行,第二种方法是系统比较通用的。第三种是通过正则方式来获得。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- 房产界已上市和IPO路上的难兄难弟:房天下与房多多
- Python将excel导入到mysql中
- 什么是Mac OS X?跟Linux有什么区别
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- Python在CAM软件Genesis2000中的应用