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 控制语句
Nov 03 Python
Python实现partial改变方法默认参数
Aug 18 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
Mar 11 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
使用CodeMirror实现Python3在线编辑器的示例代码
Jan 14 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
python实现微信防撤回神器
Apr 29 Python
python对文件目录的操作方法实例总结
Jun 24 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
Python csv文件的读写操作实例详解
Nov 19 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
用Python远程登陆服务器的步骤
Apr 16 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
通过文字传递创建的图形按钮
2006/10/09 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
深入PHP变量存储的详解
2013/06/13 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
初识SmartJS - AOP三剑客
2014/06/08 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
三分钟带你玩转jQuery.noConflict()
2016/02/15 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
javascript入门之数组[新手必看]
2016/11/21 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
JavaScript实现雪花飘落效果
2020/12/27 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python的类实例属性访问规则探讨
2015/01/30 Python
django反向解析和正向解析的方式
2018/06/05 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
Python的UTC时间转换讲解
2019/02/26 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
python使用配置文件过程详解
2019/12/28 Python
Python timer定时器两种常用方法解析
2020/01/20 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
利用PyQt5+Matplotlib 绘制静态/动态图的实现代码
2020/07/13 Python
python中如何设置代码自动提示
2020/07/15 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
总裁办公室主任职责
2014/01/02 职场文书
六年级数学教学反思
2014/02/03 职场文书
抄作业检讨书
2014/02/17 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
年终晚会活动方案
2014/08/21 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
单位租房协议范本
2014/12/03 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers