Linuxの下でPythonはIPアドレスのコードを取得します

3008 ワード

「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_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]