使用 python 获取 Linux 的 IP 信息(通过 ifconfig 命令)

简介: 我们可以使用 python 代码通过调用 ifconfig 命令来获取 Linux 主机的 IP 相关信息,包括:网卡名称、MAC地址、IP地址等。 第一种实现方式: 1 #!/usr/bin/python 2 #encoding: utf-8 3 4 from subpro...

我们可以使用 python 代码通过调用 ifconfig 命令来获取 Linux 主机的 IP 相关信息,包括:网卡名称、MAC地址、IP地址等。

第一种实现方式:

 1 #!/usr/bin/python
 2 #encoding: utf-8
 3 
 4 from subprocess import Popen, PIPE
 5 
 6 def getIfconfig():
 7     p = Popen(['ifconfig'], stdout = PIPE)
 8     data = p.stdout.read().split('\n\n')
 9     return [i for i in data if i and not i.startswith('lo')]
10 
11 def parseIfconfig(data):
12     dic = {}
13     for devs in data:
14         lines = devs.split('\n')
15         devname = lines[0].split()[0]
16         macaddr = lines[0].split()[-1]
17         ipaddr  = lines[1].split()[1].split(':')[1]
18         dic[devname] = [ipaddr, macaddr]
19     return dic
20         
21 
22 if __name__ == '__main__':
23     data = getIfconfig()
24     print parseIfconfig(data)

 

 

第二种实现方式:

 1 #!/usr/bin/python
 2 #encoding: utf-8
 3 
 4 from subprocess import Popen, PIPE
 5 
 6 def getIP():
 7     p = Popen(['ifconfig'], stdout = PIPE, stderr = PIPE)
 8     stdout, stderr = p.communicate()
 9     data = [i for i in stdout.split('\n') if i]
10     return data
11 
12 def genIP(data):
13     new_line = ''
14     lines = []
15     for line in data:
16         if line[0].strip():
17             lines.append(new_line)
18             new_line = line + '\n'
19         else:
20             new_line += line + '\n'
21     lines.append(new_line)
22     return [i for i in lines if i and not i.startswith('lo')]
23 
24 def parseIP(data):
25     dic = {}
26     for devs in data:
27         lines = devs.split('\n')
28         devname = lines[0].split()[0]
29         macaddr = lines[0].split()[-1]
30         ipaddr  = lines[1].split()[1].split(':')[1]
31         dic[devname] = [ipaddr, macaddr]
32     return dic
33 
34 if __name__ == '__main__':
35     data = getIP()
36     nics = genIP(data)
37     print parseIP(nics)

 

第三种方式实现(正则表达式):

 1 #!/usr/bin/python
 2 #encoding: utf-8
 3 
 4 from subprocess import Popen, PIPE
 5 import re
 6 
 7 def getIfconfig():
 8     p = Popen(['ifconfig'], stdout = PIPE)
 9     data = p.stdout.read().split('\n\n')
10     return [i for i in data if i and not i.startswith('lo')]
11         
12 def parseIfconfig(data):
13     dic = {}
14     # re.M 多行模式,改变'^'和'$'的行为
15     for line in data:
16         re_devname = re.compile(r'(\w+).*Link encap', re.M)
17         re_macaddr = re.compile(r'HWaddr\s([0-9A-F:]{17})', re.M)
18         re_ipaddr  = re.compile(r'inet addr:([\d\.]{7,15})', re.M)
19         devname  = re_devname.search(line)
20         mac      = re_macaddr.search(line)
21         ip       = re_ipaddr.search(line)
22         if devname:
23             devname = devname.group(1)
24         else:
25             devname = ''
26 
27         if mac:
28             mac = mac.group(1)
29         else:
30             mac = ''
31 
32         if ip:
33             ip = ip.group(1)
34         else:
35             ip = ''
36         dic[devname] = [mac, ip]
37     return dic
38 
39 if __name__ == '__main__':
40     data = getIfconfig()
41     print parseIfconfig(data)

实验结果:

{'eth1': ['00:0C:29:18:1C:7F', '172.16.254.8'], 'eth0': ['00:0C:29:18:1C:75', '192.168.0.8']}

 

相关文章
|
1月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
304 1
二、Linux文本处理与文件操作核心命令
|
1月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
558 56
|
20天前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
176 2
|
1月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
83 0
Linux内存问题排查命令详解
|
1月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
150 16
|
1月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
235 137
|
2月前
|
Linux 网络安全 开发工具
技术栈:这50条最常用的 Linux 命令你一定要会!
建议多在终端中实践,遇到不懂的命令就用 man 或 --help 了解详情!
458 0
|
网络协议 Linux Windows
linux(三十四)网络管理命令ifconfig、lspci
linux(三十四)网络管理命令ifconfig、lspci
304 1
|
Linux
Linux命令(7)之ifconfig
Linux命令(7)之ifconfig
145 3
|
监控 安全 Linux
【专栏】Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip
【4月更文挑战第28天】本文介绍了Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip,以及它们在测试网络连通性、追踪路由、查看网络状态、安全扫描和接口配置等场景的应用。通过学习和运用这些命令,系统管理员和网络爱好者能更有效地诊断和管理网络问题,确保网络稳定运行。
945 0