Python获取网卡信息(名称、MAC、

发布时间:2019-09-23 17:01:06编辑:auto阅读(1900)

        “人生苦短,我用Python”。Python的高效有一部分是跟它丰富的模块分不开的。Python有很多第三方模块可以帮助我们完成一些事情,减少开发时间。

    Python pypi库中一个模块名字叫“netifaces”,使用C语言写的一个第三方模块。可以:

        1.获取本机的所有网关

        2.获取本机所有的接口Interface(网卡NIC)

        3.获取本机指定接口的详细信息,包括IP地址、子网掩码、广播地址、MAC地址等

    不过遗憾的是这个模块的功能太有限以及会带出一些令人困惑的信息,例如Windows系统上的子网掩码可能不正确等。

    PS:要想获取公网地址,可以使用很多种API,例如:

        # Use 3rd party web-sites to get your IP  
        # Please note that I do not recommend following curl/wget method due to security reasons. You have been warned:    
        curl ifconfig.me    
        curl icanhazip.com    
        curl ipecho.net/plain    
        curl ifconfig.co    
        curl http://ip.chinaz.com/getip.aspx

    运行截图如下:

    p_w_picpath

    p_w_picpath

    代码请移步到GitHub:https://github.com/DingGuodong/LinuxBashShellScriptForOps/blob/master/projects/WindowsSystemOps/Network/getNetworkStatus.py

    代码如下:

    #!/usr/bin/python
    # encoding: utf-8
    # -*- coding: utf8 -*-
    """
    Created by PyCharm.
    File:               LinuxBashShellScriptForOps:getNetworkStatus.py
    User:               Guodong
    Create Date:        2016/11/2
    Create Time:        16:20
    
    show Windows or Linux network Nic status, such as MAC address, Gateway, IP address, etc
    
    # python getNetworkStatus.py
    Routing Gateway:               10.6.28.254
    Routing NIC Name:              eth0
    Routing NIC MAC Address:       06:7f:12:00:00:15
    Routing IP Address:            10.6.28.28
    Routing IP Netmask:            255.255.255.0
     """
    import os
    import sys
    
    try:
        import netifaces
    except ImportError:
        try:
            command_to_execute = "pip install netifaces || easy_install netifaces"
            os.system(command_to_execute)
        except OSError:
            print "Can NOT install netifaces, Aborted!"
            sys.exit(1)
        import netifaces
    
    routingGateway = netifaces.gateways()['default'][netifaces.AF_INET][0]
    routingNicName = netifaces.gateways()['default'][netifaces.AF_INET][1]
    
    for interface in netifaces.interfaces():
        if interface == routingNicName:
            # print netifaces.ifaddresses(interface)
            routingNicMacAddr = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0]['addr']
            try:
                routingIPAddr = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr']
                # TODO(Guodong Ding) Note: On Windows, netmask maybe give a wrong result in 'netifaces' module.
                routingIPNetmask = netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['netmask']
            except KeyError:
                pass
    
    display_format = '%-30s %-20s'
    print display_format % ("Routing Gateway:", routingGateway)
    print display_format % ("Routing NIC Name:", routingNicName)
    print display_format % ("Routing NIC MAC Address:", routingNicMacAddr)
    print display_format % ("Routing IP Address:", routingIPAddr)
    print display_format % ("Routing IP Netmask:", routingIPNetmask)

    最后:不要重复制造轮子。重复制造轮子对自己而言,虽然制造的过程是学习巩固的过程,但重复制造轮子对别人没有好处,人生苦短,别重复制造轮子,除非你制造的足够好。

    tag:python获取MAC地址,python获取网关地址,python获取IP地址

    --end--

关键字