Python獲取網卡信息(名稱、MAC、IP、網關等)

    “人生苦短,我用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--

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章