Linux下Python獲取IP地址的代碼
《lnmp一鍵安裝包》中需要獲取ip地址,有2種情況:如果服務(wù)器只有私網(wǎng)地址沒有公網(wǎng)地址,這個時候獲取的IP(即私網(wǎng)地址)不能用來判斷服務(wù)器的位置,于是取其網(wǎng)關(guān)地址用來判斷服務(wù)器在國內(nèi)還是國外(腳本為了使國內(nèi)用戶快速下載,yum源自動設(shè)置成163,這個情況就需要獲取網(wǎng)關(guān)地址);如果服務(wù)器有公網(wǎng)地址,這時獲取的IP地址可用來直接判斷服務(wù)器地理位置。
獲取服務(wù)器IP,如果有公網(wǎng)地址就取公網(wǎng)地址,沒有公網(wǎng)地址就取私網(wǎng)網(wǎng)址
下面是之前我用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_local_ip.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__": local_IP = Get_local_ip() print local_IP
有公網(wǎng)地址直接獲取,沒有公網(wǎng)地址就獲取網(wǎng)關(guān)地址(用于判斷IP地址的地理位置):get_public_ip.py
#!/usr/bin/env python import re,urllib2 class 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-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]
相關(guān)文章
python使用for...else跳出雙層嵌套循環(huán)的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于python使用for...else跳出雙層嵌套循環(huán)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Jinja2實(shí)現(xiàn)模板渲染與訪問對象屬性流程詳解
要了解jinja2,那么需要先理解模板的概念。模板在Python的web開發(fā)中廣泛使用,它能夠有效的將業(yè)務(wù)邏輯和頁面邏輯分開,使代碼可讀性增強(qiáng),并且更加容易理解和維護(hù)。模板簡單來說就是一個其中包含占位變量表示動態(tài)部分的文,模板文件在經(jīng)過動態(tài)賦值后,返回給用戶2023-03-03