《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