《lnmp一鍵安裝包》中需要獲取ip地址,有2種情況:如果服務(wù)器只有私網(wǎng)地址沒(méi)有公網(wǎng)地址,這個(gè)時(shí)候獲取的IP(即私網(wǎng)地址)不能用來(lái)判斷服務(wù)器的位置,于是取其網(wǎng)關(guān)地址用來(lái)判斷服務(wù)器在國(guó)內(nèi)還是國(guó)外(腳本為了使國(guó)內(nèi)用戶快速下載,yum源自動(dòng)設(shè)置成163,這個(gè)情況就需要獲取網(wǎng)關(guān)地址);如果服務(wù)器有公網(wǎng)地址,這時(shí)獲取的IP地址可用來(lái)直接判斷服務(wù)器地理位置。
獲取服務(wù)器IP,如果有公網(wǎng)地址就取公網(wǎng)地址,沒(méi)有公網(wǎng)地址就取私網(wǎng)網(wǎng)址
下面是之前我用shell來(lái)獲取本地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_local_ip.py:
#!/usr/bin/env pythonimport socketdef 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__": local_IP = Get_local_ip() print local_IP
有公網(wǎng)地址直接獲取,沒(méi)有公網(wǎng)地址就獲取網(wǎng)關(guān)地址(用于判斷IP地址的地理位置):get_public_ip.py
#!/usr/bin/env pythonimport re,urllib2class Get_public_ip: def getip(self): try: myip = self.visit("http://www.whereismyip.com/") except: try: myip = self.visit("http://www.ip138.com/ip2city.asp") 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()
判斷服務(wù)器IP地理位置: get_ip_area.py
#!/usr/bin/env python#coding:utf-8try: 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 dataexcept: print "Usage:%s IP" % sys.argv[0]
|
新聞熱點(diǎn)
疑難解答
圖片精選