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中条件选择和循环语句使用方法介绍
Mar 13 Python
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
Python基于identicon库创建类似Github上用的头像功能
Sep 25 Python
使用Python爬取最好大学网大学排名
Feb 24 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Python3使用Matplotlib 绘制精美的数学函数图形
Apr 11 Python
Python后台开发Django会话控制的实现
Apr 15 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
python中format函数如何使用
Jun 22 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
python中Pexpect的工作流程实例讲解
Mar 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
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
javascript生成随机颜色示例代码
2014/05/05 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
python flask安装和命令详解
2019/04/02 Python
django认证系统实现自定义权限管理的方法
2019/08/28 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
html5利用canvas实现颜色容差抠图功能
2019/12/23 HTML / CSS
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
《石榴》教学反思
2014/03/02 职场文书
元旦联欢会主持词
2014/03/26 职场文书
开学第一周值周总结
2015/07/16 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
Mysql 一主多从的部署
2022/05/20 MySQL