《lnmp一键安装包》中需要获取ip地址,有2种情况:如果服务器只有私网地址没有公网地址,这个时候获取的IP(即私网地址)不能用来判断服务器的位置,于是取其网关地址用来判断服务器在国内还是国外(脚本为了使国内用户快速下载,yum源自动设置成163,这个情况就需要获取网关地址);如果服务器有公网地址,这时获取的IP地址可用来直接判断服务器地理位置。
获取服务器IP,如果有公网地址就取公网地址,没有公网地址就取私网网址
下面是之前我用shell来获取本地IP脚本:
- IP=`ifconfig | grep ‘inet addr:’ | 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 ‘inet addr:’ | cut -d: -f2 | grep -v ^127\. | \
 - awk ‘{print $1}’ | awk ‘{print;exit}’`
 
Python版:get_ipaddr.py:
- #!/usr/bin/env python
 - import socket
 - def Get_local_ip():
 - “””
 - Returns the actual ip of the local machine.
 - This code figures out what source address would be used if some traffic
 - were to be sent out to some well known address on the Internet. In this
 - case, a Google DNS server is used, but the specific address does not
 - matter much. No traffic is actually sent.
 - “””
 - try:
 - csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 - csock.connect((‘8.8.8.8’, 80))
 - (addr, port) = csock.getsockname()
 - csock.close()
 - return addr
 - except socket.error:
 - return “127.0.0.1”
 - if __name__ == “__main__“:
 - IPADDR = Get_local_ip()
 - print IPADDR
 
有公网地址直接获取,没有公网地址就获取网关地址(用于判断IP地址的地理位置):get_public_ipaddr.py
- #!/usr/bin/env python
 - import re,urllib2
 - class Get_public_ip:
 - def getip(self):
 - try:
 - myip = self.visit(“http://ip.chinaz.com/getip.aspx”)
 - except:
 - try:
 - myip = self.visit(“http://ipv4.icanhazip.com/”)
 - 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()
 
判断服务器IP地理位置: get_ipaddr_state.py
- #!/usr/bin/env python
 - #coding:utf-8
 - try:
 - import sys,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’]
 - if code == 0:
 - print data[‘country_id’]
 - else:
 - print data
 - except:
 - print “Usage:%s IP” % sys.argv[0]
 
Sat Oct 19 22:12:04 CST 2013