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 相关文章推荐
python 判断自定义对象类型
Mar 21 Python
十个Python程序员易犯的错误
Dec 15 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
SQLite3中文编码 Python的实现
Jan 11 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
python读取Excel实例详解
Aug 17 Python
Django模板Templates使用方法详解
Jul 19 Python
Python编程快速上手——strip()函数的正则表达式实现方法分析
Feb 29 Python
Java Spring项目国际化(i18n)详细方法与实例
Mar 20 Python
Python参数传递对象的引用原理解析
May 22 Python
使用pandas实现筛选出指定列值所对应的行
Dec 13 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 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
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
python遍历数组的方法小结
2015/04/30 Python
Python之父谈Python的未来形式
2016/07/01 Python
Linux下python制作名片示例
2018/07/20 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
python中的时区问题
2021/01/14 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
波兰补充商店:Muscle Power
2018/10/29 全球购物
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
Java面试题及答案
2012/09/08 面试题
计算机专业毕业生的自我评价
2013/11/18 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
领班岗位职责范文
2014/02/06 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
领导干部对照检查材料
2014/08/24 职场文书
个人批评与自我批评
2014/10/15 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
小学安全工作总结2015
2015/05/18 职场文书
Linux中如何安装并部署Redis
2022/04/18 Servers