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 相关文章推荐
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
python使用MySQLdb访问mysql数据库的方法
Aug 03 Python
Python中Django 后台自定义表单控件
Mar 28 Python
机器学习python实战之决策树
Nov 01 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
python对html过滤处理的方法
Oct 21 Python
python实现关闭第三方窗口的方法
Jun 28 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
用pip给python安装matplotlib库的详细教程
Feb 24 Python
Python数据分析之绘图和可视化详解
Jun 02 Python
Python中使用tkFileDialog实现文件选择、保存和路径选择
May 20 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中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
yii添删改查实例
2015/11/16 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
超清晰的document对象详解
2007/02/27 Javascript
JavaScript 特殊字符
2007/04/05 Javascript
javascript replace方法与正则表达式
2008/02/19 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
2016/04/23 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
对Python函数设计规范详解
2019/07/19 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
北京捷通华声语音技术有限公司Java软件工程师笔试题
2012/04/10 面试题
酒店总经理职务说明书
2014/02/26 职场文书
校园活动宣传方案
2014/03/28 职场文书
爱国之歌(8首)
2019/09/29 职场文书
七年级作文之下雨天
2019/12/23 职场文书
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS