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学习笔记之os模块使用总结
Nov 03 Python
在Python中用get()方法获取字典键值的教程
May 21 Python
梯度下降法介绍及利用Python实现的方法示例
Jul 12 Python
利用Tkinter和matplotlib两种方式画饼状图的实例
Nov 06 Python
详解基于django实现的webssh简单例子
Jul 17 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
Feb 20 Python
python实现简单加密解密机制
Mar 19 Python
python实现从wind导入数据
Dec 03 Python
打包PyQt5应用时的注意事项
Feb 14 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
QML实现钟表效果
Jun 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
聊天室php&mysql(三)
2006/10/09 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
2013/05/23 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
2014/04/21 PHP
利用PHP如何实现Socket服务器
2015/09/23 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
react-navigation 如何判断用户是否登录跳转到登录页的方法
2017/12/01 Javascript
js生成1到100的随机数最简单的实现方法
2020/02/07 Javascript
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
详解Python的Django框架中的模版继承
2015/07/16 Python
python 标准差计算的实现(std)
2019/07/29 Python
原生python实现knn分类算法
2019/10/24 Python
详解Python中第三方库Faker
2020/09/25 Python
python 实现逻辑回归
2020/12/30 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
Linux操作面试题
2012/05/16 面试题
如何用JQuery进行表单验证
2013/05/29 面试题
自荐信需注意事项
2014/01/25 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
表彰大会新闻稿
2015/07/17 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android