“人生苦短,我用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
運行截圖如下:
代碼如下:
#!/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--