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判断文件和文件夹是否存在的方法
May 21 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
Python中使用装饰器来优化尾递归的示例
Jun 18 Python
Python爬取当当、京东、亚马逊图书信息代码实例
Dec 09 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
python实现抖音点赞功能
Apr 07 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
keras的三种模型实现与区别说明
Jul 03 Python
Python打印不合法的文件名
Jul 31 Python
Python中glob库实现文件名的匹配
Jun 18 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类
2008/04/09 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
Laravel Validator自定义错误返回提示消息并在前端展示
2019/05/09 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
在js(jquery)中获得文本框焦点和失去焦点的方法
2012/12/04 Javascript
js获取html页面节点方法(递归方式)
2013/12/13 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
使用webpack-dev-server处理跨域请求的方法
2018/04/18 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
微信小程序 生成携带参数的二维码
2019/10/23 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
JavaScript常用工具函数汇总(浏览器环境)
2020/09/17 Javascript
Python对象类型及其运算方法(详解)
2017/07/05 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
有关Python的22个编程技巧
2018/08/29 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
2020/04/30 Python
解决django 向mysql中写入中文字符出错的问题
2020/05/18 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Python字符串及文本模式方法详解
2020/09/10 Python
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
广州盈通面试题
2015/12/05 面试题
学生拾金不昧表扬信
2014/01/21 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
幼儿体育课教学反思
2016/02/16 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
《现实主义勇者的王国再建记》第三弹OST全曲试听片段公开
2022/04/04 日漫
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL