Linuxの下でPythonはIPアドレスのコードを取得します
3008 ワード
「lnmpワンタッチインストールパッケージ」ではipアドレスを取得する必要があり、2つのケースがあります.サーバがプライベートネットワークアドレスだけでパブリックネットワークアドレスがない場合、このとき取得したIP(すなわちプライベートネットワークアドレス)はサーバの位置を判断するために使用できません.そこで、そのゲートウェイアドレスを取って、サーバーが国内にあるか国外にあるかを判断する(スクリプトは国内のユーザーが迅速にダウンロードできるようにyumソースが自動的に163に設定され、この場合、ゲートウェイアドレスを取得する必要がある).サーバにパブリックネットワークアドレスがある場合、取得したIPアドレスは、サーバの地理的位置を直接判断するために使用することができる.
サーバIPを取得し、パブリックアドレスがあればパブリックアドレスを取得し、パブリックアドレスがなければプライベートアドレスを取得します.次は、以前shellでローカルIPスクリプトを取得しました.
Python版:get_local_ip.py:
パブリックアドレスが直接取得され、パブリックアドレスがない場合はゲートウェイアドレス(IPアドレスを判断するための地理的位置):get_public_ip.py
サーバIPの地理的位置を判断する:get_ip_area.py
サーバ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_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
パブリックアドレスが直接取得され、パブリックアドレスがない場合はゲートウェイアドレス(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()
サーバ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]