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编程之event对象的用法实例分析
Mar 23 Python
利用Python操作消息队列RabbitMQ的方法教程
Jul 19 Python
python re模块的高级用法详解
Jun 06 Python
Python实现快速计算词频功能示例
Jun 25 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
用pyqt5 给按钮设置图标和css样式的方法
Jun 24 Python
在python中画正态分布图像的实例
Jul 08 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
使用python实现名片管理系统
Jun 18 Python
Python模拟登录和登录跳转的参考示例
Oct 30 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
163的邮件用phpmailer发送(实例详解)
2013/06/24 PHP
10个简化PHP开发的工具
2014/12/25 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
JavaScript 模仿vbs中的 DateAdd() 函数的代码
2007/08/13 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
2016/06/21 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
用Python实现一个简单的线程池
2015/04/07 Python
python从入门到精通(DAY 2)
2015/12/20 Python
详解配置Django的Celery异步之路踩坑
2018/11/25 Python
Python和Go语言的区别总结
2019/02/20 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
大学生学业生涯规划
2014/01/05 职场文书
2014年小班元旦活动方案
2014/02/16 职场文书
党政领导班子民主生活会整改措施
2014/09/18 职场文书
小学班主任个人总结
2015/03/03 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Java基于字符界面的简易收银台
2021/06/26 Java/Android