当前位置: 移动技术网 > IT编程>脚本编程>Python > python的netiface模块使用demo

python的netiface模块使用demo

2020年07月20日  | 移动技术网IT编程  | 我要评论

python使用netifaces模块demo,用来获取网卡以及网卡上相关信息,包括IP,网关等。下面的代码也可以下载


#!/usr/bin/python
# -*- coding: utf-8 -*-

from __future__ import print_function
import netifaces

def netifaces_demo():

    print('netifaces demo'.center(140, '*'))
    
    print('family id name map'.center(140, '-'))
    for k,v in netifaces.address_families.items():
        print("id = {0}, name = {1}".format(k, v))

    print('interface info'.center(140, '-'))

    for nic_name in netifaces.interfaces():
        ifaddr = netifaces.ifaddresses(nic_name)
        for family_id, net_infos in ifaddr.items():
            print("nic_name: {} family_id: {}  family_name: {} ".format(nic_name, family_id, netifaces.address_families[family_id]), end="")
            for e in net_infos:
                for k,v in e.items():
                    print("%s: %s " % (k, v), end="")
            print("")
                    
    # 输出默认的网关
    print('gateway info'.center(140, '-'))
    for l in netifaces.gateways().keys():
        if isinstance(l, str) and l.startswith('default'):
            print("gateways: default, ", end="")
            for k, v in netifaces.gateways()['default'].items():
                print("family_id: %d, family_name: %s, gateway_ip: %s, nic_name: %s" % (k, netifaces.address_families[k], v[0], v[1]))
            break

    for family_id, infos in netifaces.gateways().items():
        if isinstance(family_id, str) and family_id == 'default':
            continue
        for l in infos:
            print("family_id: %d, family_name: %s, gateway_ip: %s, nic_name: %s, is_default: ." % (family_id, netifaces.address_families[family_id], l[0], l[1]))

def get_ipv4_eth_info(eth_name):
    '''
    [{'broadcast': u'192.168.0.255', 'netmask': u'255.255.255.0', 'addr': u'192.168.0.108'}]

    '''
    ifaddr = netifaces.ifaddresses(eth_name)
    if netifaces.AF_INET not in ifaddr.keys():
        return None
    return ifaddr[netifaces.AF_INET]

def get_ipv4_default_gateway():
    '''
    (u'192.168.0.1', u'en0')
    '''
    gateways = netifaces.gateways()
    flag = False
    for k in gateways.keys():
        if isinstance(k, str) and k == 'default':
            flag = True
            break
    if flag is False:
        return None
    infos = gateways['default']
    if netifaces.AF_INET not in infos.keys():
        return None
    
    return gateways['default'][netifaces.AF_INET]

def get_ipv4_gateway():
    gateways = netifaces.gateways()
    flag = False
    for k in gateways.keys():
        if k == netifaces.AF_INET:
            flag = True
            break
    if flag is False:
        return None
    return gateways[netifaces.AF_INET]

def get_ethname_by_ip(ip):
    for nic_name in netifaces.interfaces():
        ifaddr = netifaces.ifaddresses(nic_name)
        for family_id, net_infos in ifaddr.items():
            for e in net_infos:
                if 'addr' in e.keys() and e['addr'] == ip:
                    return nic_name
    return None

def main():
    netifaces_demo()

    print('interface test'.center(140, '*'))
    print(get_ipv4_eth_info('en0'))
    print(get_ipv4_default_gateway())
    print(get_ipv4_gateway())
    print(get_ethname_by_ip('127.0.0.1'))
    print(get_ipv4_eth_info(get_ethname_by_ip('127.0.0.1')))

if __name__ == '__main__':
    main()

本文地址:https://blog.csdn.net/wfh2015/article/details/107441582

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网