サマリー: “人生苦短,我用Python”。Python的高效有一部分是跟它豐富的模塊分不開(kāi)的。Python有很多第三方模塊可以幫助我們完成一些事情,減少開(kāi)發(fā)時(shí)間。Python pypi庫(kù)中一個(gè)模塊名字叫“netifaces”,使用C語(yǔ)言寫(xiě)的一個(gè)第三方模塊??梢裕?nbsp; 1.獲取本機(jī)的所有網(wǎng)關(guān) 2.
“人生苦短,我用Python”。Python的高效有一部分是跟它豐富的模塊分不開(kāi)的。Python有很多第三方模塊可以幫助我們完成一些事情,減少開(kāi)發(fā)時(shí)間。
Python pypi庫(kù)中一個(gè)模塊名字叫“netifaces”,使用C語(yǔ)言寫(xiě)的一個(gè)第三方模塊??梢裕?/p>
1.獲取本機(jī)的所有網(wǎng)關(guān)
2.獲取本機(jī)所有的接口Interface(網(wǎng)卡NIC)
3.獲取本機(jī)指定接口的詳細(xì)信息,包括IP地址、子網(wǎng)掩碼、廣播地址、MAC地址等
不過(guò)遺憾的是這個(gè)模塊的功能太有限以及會(huì)帶出一些令人困惑的信息,例如Windows系統(tǒng)上的子網(wǎng)掩碼可能不正確等。
PS:要想獲取公網(wǎng)地址,可以使用很多種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
運(yùn)行截圖如下:
代碼請(qǐng)移步到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)
最后:不要重復(fù)制造輪子。重復(fù)制造輪子對(duì)自己而言,雖然制造的過(guò)程是學(xué)習(xí)鞏固的過(guò)程,但重復(fù)制造輪子對(duì)別人沒(méi)有好處,人生苦短,別重復(fù)制造輪子,除非你制造的足夠好。
tag:python獲取MAC地址,python獲取網(wǎng)關(guān)地址,python獲取IP地址