Charliewolf 2020-01-03
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)