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 tempfile模块学习笔记(临时文件)
May 25 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
Python读取键盘输入的2种方法
Jun 16 Python
基于python实现名片管理系统
Nov 30 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
python实现文件助手中查看微信撤回消息
Apr 29 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
python中adb有什么功能
Jun 07 Python
django 实现后台从富文本提取纯文本
Jul 02 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 高效率写法 推荐
2010/02/21 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
PH P5.2至5.5、5.6的新增功能详解
2014/07/14 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
2015/12/23 PHP
php从数据库读取数据,并以json格式返回数据的方法
2018/08/21 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
深入理解javascript中return的作用
2013/12/30 Javascript
第一次接触JS require.js模块化工具
2016/04/17 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
AngularJS中$http的交互问题
2017/03/29 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
Vue2.0实现组件数据的双向绑定问题
2018/03/06 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
Vue高版本中一些新特性的使用详解
2018/09/25 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
2018/12/11 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
微信小程序用户拒绝授权的处理方法详解
2019/09/20 Javascript
Windows中安装使用Virtualenv来创建独立Python环境
2016/05/31 Python
Python获取当前路径实现代码
2017/05/08 Python
Python三种遍历文件目录的方法实例代码
2018/01/19 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
IGK Hair官网:喷雾、洗发水、护发素等
2020/11/03 全球购物
Java程序员面试90题
2013/10/19 面试题
销售顾问岗位职责
2014/02/25 职场文书
社区居务公开实施方案
2014/03/27 职场文书
工作保证书范文
2014/04/29 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
岳庙导游词
2015/02/04 职场文书
2015年教师节感言
2015/08/03 职场文书
2016年党员读书月活动总结
2016/04/06 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js
Python PIL按比例裁剪图片
2022/05/11 Python