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 相关文章推荐
linux 下实现python多版本安装实践
Nov 18 Python
python在Windows8下获取本机ip地址的方法
Mar 14 Python
Python中的数据对象持久化存储模块pickle的使用示例
Mar 03 Python
python判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
基于h5py的使用及数据封装代码
Dec 26 Python
Tensorflow中tf.ConfigProto()的用法详解
Feb 06 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
python 利用panda 实现列联表(交叉表)
Feb 06 Python
总结Python常用的魔法方法
May 25 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循环获取GET和POST值的代码
2008/04/09 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP常用技巧汇总
2016/03/04 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
基于jquery的表格排序
2010/09/11 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
jQuery zTree树插件动态加载实例代码
2017/05/11 jQuery
jquery实现楼层滚动效果
2018/01/01 jQuery
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
JS实现简易日历效果
2021/01/25 Javascript
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
python通过shutil实现快速文件复制的方法
2015/03/14 Python
在Python的Flask框架中实现单元测试的教程
2015/04/20 Python
pyqt5自定义信号实例解析
2018/01/31 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
2019/06/12 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
Python图像处理库PIL的ImageDraw模块介绍详解
2020/02/26 Python
Python 如何测试文件是否存在
2020/07/31 Python
详解python metaclass(元类)
2020/08/13 Python
俄罗斯最大的消费电子连锁零售商:Mvideo
2017/06/25 全球购物
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
高中毕业生自我鉴定例文
2013/12/29 职场文书
水果超市创业计划书
2014/01/27 职场文书
党员对照检查材料思想汇报(党的群众路线)
2014/09/24 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android