linux及windows下利用Python获取IP地点
利用Python可以用很简朴的要领获得本机IP地点,不外在Windows和Linux下的要领稍有纷歧样的,下面就来具体先容下:
Windows下得到IP地点的要领
要领一 利用socket模块
利用拨号上网的话,一般都有一个当地ip和一个外网ip,利用python可以很容易的获得这两个ip 利用gethostbyname和gethostbyname_ex两个函数可以实现
#利用socket模块 import socket #获得当地ip localIP = socket.gethostbyname(socket.gethostname()) print"local ip:%s "%localIP ipList = socket.gethostbyname_ex(socket.gethostname())for i in ipList: if i != localIP: print"external IP:%s"%i
可能
#引入socket模块 import socket myname = socket.getfqdn(socket.gethostname()) myaddr = socket.gethostbyname(myname)
要领二 利用正则表达式和urllib2模块
该要领获取公网IP利用的是操作其他网站提供的IP检测成果,然后在利用python抓取页面,正则匹配或得。不外该要领较量精确哦
import re,urllib2 from subprocess import Popen, PIPE print "本机的私网IP地点为:" + re.search('\d+\.\d+\.\d+\.\d+',Popen('ipconfig', stdout=PIPE).stdout.read()).group(0) #操作其他网站提供的接口,利用urllib2获取个中的ip print "本机的公网IP地点为:" + re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http://www.ip138.com").read()).group(0)
Linux下得到IP地点的要领
上面的要领在Linux下也可以利用,除此之外,Linux下还可以用下面的要领获得本机IP地点。
import socket import fcntl import struct def get_ip_address(ifname): skt = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print skt pktString = fcntl.ioctl(skt.fileno(), 0x8915, struct.pack('256s', ifname[:15])) print pktString ipString = socket.inet_ntoa(pktString[20:24]) print ipString return ipString print get_ip_address('lo') print get_ip_address('etp')