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 with的用法
Aug 22 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
windows下python安装paramiko模块和pycrypto模块(简单三步)
Jul 06 Python
python创建列表和向列表添加元素的实现方法
Dec 25 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
python验证码识别教程之滑动验证码
Jun 04 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
python list多级排序知识点总结
Oct 23 Python
opencv设置采集视频分辨率方式
Dec 10 Python
django 文件上传功能的相关实例代码(简单易懂)
Jan 22 Python
Python基于模块Paramiko实现SSHv2协议
Apr 28 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 函数语法介绍一
2009/06/14 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
解析php多线程下载远程多个文件
2013/06/25 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
PHP常见过waf webshell以及最简单的检测方法
2019/05/21 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
JavaScript中URL编码函数代码
2011/01/11 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
详解Appium+Python之生成html测试报告
2019/01/04 Python
用openCV和Python 实现图片对比,并标识出不同点的方式
2019/12/19 Python
利用python实现逐步回归
2020/02/24 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
python获取栅格点和面值的实现
2020/03/10 Python
django实现更改数据库某个字段以及字段段内数据
2020/03/31 Python
python中sort sorted reverse reversed函数的区别说明
2020/05/11 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
专科毕业生求职简历的自我评价
2013/10/12 职场文书
自我鉴定200字
2013/10/28 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
Django框架中视图的用法
2022/06/10 Python