使用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(‘eth1’)