Linux下Python获取IP地址的代码


Posted in Python onNovember 30, 2014

《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]
Python 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
python实现socket端口重定向示例
Feb 10 Python
python自定义类并使用的方法
May 07 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
使用python存储网页上的图片实例
May 22 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
Python实现图片转字符画的代码实例
Feb 22 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
执行Python程序时模块报错问题
Mar 26 Python
python套接字socket通信
Apr 01 Python
Python re模块介绍
Nov 30 #Python
Python os模块介绍
Nov 30 #Python
Python实现的检测网站挂马程序
Nov 30 #Python
Python实现网站文件的全备份和差异备份
Nov 30 #Python
Python3 能振兴 Python的原因分析
Nov 28 #Python
Python3 正在毁灭 Python的原因分析
Nov 28 #Python
关于你不想知道的所有Python3 unicode特性
Nov 28 #Python
You might like
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
学习php分页代码实例
2013/10/24 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
jcrop基本参数一览
2013/07/16 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Vue中img的src属性绑定与static文件夹实例
2017/05/18 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
Python中的列表知识点汇总
2015/04/14 Python
Python入门之modf()方法的使用
2015/05/15 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
Python使用剪切板的方法
2017/06/06 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python实现自动访问网页的例子
2020/02/21 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
车工岗位职责
2013/11/26 职场文书
服装机修工岗位职责
2013/12/26 职场文书
推广活动策划方案
2014/08/23 职场文书
购房委托书范本
2014/09/18 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python