Linux下Python获取IP地址的代码
《lnmp一键安装包》中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器的位置,于是取其网关地址用来判断服务器在国内还是国外(脚本为了使国内用户快速下载,yum源自动设置成163,这个情况就需要获取网关地址);如果服务器有公网地址,这时获取的IP地址可用来直接判断服务器地理位置。
获取服务器IP,如果有公网地址就取公网地址,没有公网地址就取私网网址
下面是之前我用shell来获取本地IP脚本:
IP=`ifconfig|grep'inetaddr:'|cut-d:-f2|grep-v^10\.|grep-v^192\.168|grep-v^172\.|\
grep-v^127\.|awk'{print$1}'|awk'{print;exit}'`
[!-n"$IP"]&&IP=`ifconfig|grep'inetaddr:'|cut-d:-f2|grep-v^127\.|\
awk'{print$1}'|awk'{print;exit}'`
Python版:get_local_ip.py:
#!/usr/bin/envpython
importsocket
defGet_local_ip():
"""
Returnstheactualipofthelocalmachine.
Thiscodefiguresoutwhatsourceaddresswouldbeusedifsometraffic
weretobesentouttosomewellknownaddressontheInternet.Inthis
case,aGoogleDNSserverisused,butthespecificaddressdoesnot
mattermuch.Notrafficisactuallysent.
"""
try:
csock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
csock.connect(('8.8.8.8',80))
(addr,port)=csock.getsockname()
csock.close()
returnaddr
exceptsocket.error:
return"127.0.0.1"
if__name__=="__main__":
local_IP=Get_local_ip()
printlocal_IP
有公网地址直接获取,没有公网地址就获取网关地址(用于判断IP地址的地理位置):get_public_ip.py
#!/usr/bin/envpython
importre,urllib2
classGet_public_ip:
defgetip(self):
try:
myip=self.visit("http://www.whereismyip.com/")
except:
try:
myip=self.visit("http://www.ip138.com/ip2city.asp")
except:
myip="Sosorry!!!"
returnmyip
defvisit(self,url):
opener=urllib2.urlopen(url)
ifurl==opener.geturl():
str=opener.read()
returnre.search('\d+\.\d+\.\d+\.\d+',str).group(0)
if__name__=="__main__":
getmyip=Get_public_ip()
printgetmyip.getip()
判断服务器IP地理位置:get_ip_area.py
#!/usr/bin/envpython #coding:utf-8 try: importsys,urllib2,json apiurl="http://ip.taobao.com/service/getIpInfo.php?ip=%s"%sys.argv[1] content=urllib2.urlopen(apiurl).read() data=json.loads(content)['data'] code=json.loads(content)['code'] ifcode==0: printdata['country_id'] else: printdata except: print"Usage:%sIP"%sys.argv[0]