1.通過模塊netifaces獲取,當系統為Windows時,可能會有報錯現象
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)
2.獲取外網ip
!/usr/bin/env python # 通過訪問查詢ip的網址,在響應頁面正則獲取ip地址,網站需要時常更新,在頁面不能出現多個ip import re,urllib2 class Get_public_ip: def getip(self): try: myip = self.visit("http://www.bejson.com/httputil/queryip/") except: try: myip = self.visit("https://www.8684.cn/ip") except: myip = "So sorry!!!" return myip def visit(self,url): opener = urllib2.urlopen(url) if url == opener.geturl(): str = opener.read() return re.search('\d+\.\d+\.\d+\.\d+',str).group(0) if __name__ == "__main__": getmyip = Get_public_ip() print getmyip.getip()
3.在知道網卡時候可以很快獲取局域網內的ip
import struct import fcntl import socket def getip(ethname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0X8915, struct.pack('256s', ethname[:15]))[20:24]) if __name__ == '__main__': print getip('enp3s0') # enp3s0 是ifconfig后看出來的
4.獲取出的是127的,不太好,不明白應用場景
import socket #獲取計算機名稱 hostname=socket.gethostname() #獲取本機IP ip=socket.gethostbyname(hostname) print(ip)