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入门篇之正则表达式
Oct 20 Python
python字典的常用操作方法小结
May 16 Python
Python 正则表达式的高级用法
Dec 04 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
python 动态加载的实现方法
Dec 22 Python
pandas把所有大于0的数设置为1的方法
Jan 26 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
python解压zip包中文乱码解决方法
Nov 27 Python
python 视频下载神器(you-get)的具体使用
Jan 06 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 POST提交数据类
2016/07/15 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
php实现文件预览功能
2017/05/23 PHP
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
JS使用插件cryptojs进行加密解密数据实例
2017/05/11 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
Python 自动补全(vim)
2014/11/30 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python实现购物程序思路及代码
2017/07/24 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
python里 super类的工作原理详解
2019/06/19 Python
Python中类似于jquery的pyquery库用法分析
2019/12/02 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
大学生就业推荐信范文
2013/11/29 职场文书
抄作业检讨书
2014/02/17 职场文书
境外导游求职信
2014/02/27 职场文书
授权委托书范本
2014/04/03 职场文书
领导班子党的群众路线对照检查材料
2014/09/25 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
2021/04/17 Vue.js
Java输出Hello World完美过程解析
2021/06/13 Java/Android
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL