前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python:收集IP信息

Python:收集IP信息

作者头像
py3study
发布2020-01-13 11:02:23
6230
发布2020-01-13 11:02:23
举报
文章被收录于专栏:python3

下面通过两种方法实现收集IP信息

1、通过 ifconfig 命令输出IP信息,并以“\n\n”切片分成不同的网卡块

2、通过 ifconfig 命令输出IP信息,并以第一个字符在顶格的方式切片分成不同的网卡块

3、通过 ifconfig 命令输出IP信息,并用正则表达式来获得

#vim ip1.py

代码语言:javascript
复制
#!/ usr / bin / env python



从子流程导入Popen,PIPE



def getIfconfig():

    p = Popen(['ifconfig'],stdout = PIPE)

    数据= p.stdout.read()。split('\ n \ n')

    返回[如果数据为i,则i为i,而不是i.startswith('lo')]



def parseIfconfig(数据):

    dic = {}

    对于数据行:

        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]

    返回dic



如果__name__ =='__main__':

    数据= getIfconfig()

    打印parseIfconfig(data)

验证结果如下:

wKioL1db_e3SgWGWAAAPaJhu9Ss276.png
wKioL1db_e3SgWGWAAAPaJhu9Ss276.png
代码语言:javascript
复制
#vim ip2.py
#!/ usr / bin / env python



从子流程导入Popen,PIPE



def getIP():

    p = Popen(['ifconfig'],stdout = PIPE,stderr = PIPE)

    标准输出,标准错误= p.communicate()

    数据= [如果i为stdout.split('\ n')中的i,则为i]

    返回数据



def genIP(数据):

    new_line =''

    行= []

    用于输入数据:

        如果line [0] .split():

            lines.append(new_line)

            new_line =行+'\ n'

        其他:

            new_line + =线+'\ n'

    lines.append(new_line)

    返回[如果我而不是i.startswith('lo'),则i为i换行]



def parseIfconfig(数据):

    dic = {}

    对于数据行:

        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]

    返回dic



如果__name__ =='__main__':

    数据= getIP()

    data_list = genIP(数据)

    打印parseIfconfig(data_list)

验证结果如下:

wKiom1dcAkjCRFQyAAARRlZuRIY481.png
wKiom1dcAkjCRFQyAAARRlZuRIY481.png
代码语言:javascript
复制
#vim ip3.py
#!/ usr / bin / env python


汇入

从子流程导入Popen,PIPE



def getIfconfig():

    p = Popen(['ifconfig'],stdout = PIPE)

    数据= p.stdout.read()。split('\ n \ n')

    返回[如果数据为i,则i为i,而不是i.startswith('lo')]



def parseIfconfig(数据):

    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(数据)

    如果devname:

        devname = devname.group()

    其他:

        devname =''

    mac = re_mac.search(数据)

    如果是mac:

        mac = mac.group(1)

    其他:

        mac =''

    ip = re_ip.search(数据)

    如果IP:

        ip = ip.group(1)

    其他:

        ip =''

    返回{devname:[ip,mac]}



如果__name__ =='__main__':

    dic = {}

    数据= getIfconfig()

    对于我的数据:

        dic.update(parseIfconfig(i))

    打印骰子

验证结果如下:

wKioL1ddTtXjMmXjAAAPwamDxn4587.png
wKioL1ddTtXjMmXjAAAPwamDxn4587.png

可以看到三个方法的输出结果都是一样的字典,但是数据结构不同,第一种方法适合ifconfig命令执行后输出的网卡信息之间存在一个空行,第二种方法是系统比较通用的。第三种是通过正则方式来获得。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档