详解Python判定IP地址合法性的三种方法


Posted in Python onMarch 06, 2018

IP合法性校验是开发中非常常用的,看起来很简单的判断,作用确很大,写起来比较容易出错,今天我们来总结一下,看一下3种常用的IP地址合法性校验的方法。

IPv4的ip地址格式:(1~255).(0~255).(0~255).(0~255)

方法1: 正则表达式判定法

最简单的实现方法是构造一个正则表达式。判断用户的输入与正则表达式是否匹配。若匹配则是正确的IP地址,否则不是正确的IP地址。

^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$

下面给出相对应的验证ip的正则表达式:

\d表示0~9的任何一个数字

{2}表示正好出现两次

[0-4]表示0~4的任何一个数字

| 的意思是或者

1\d{2}的意思就是100~199之间的任意一个数字

2[0-4]\d的意思是200~249之间的任意一个数字

25[0-5]的意思是250~255之间的任意一个数字

[1-9]\d的意思是10~99之间的任意一个数字

[1-9])的意思是1~9之间的任意一个数字

\.的意思是.点要转义(特殊字符类似,@都要加\\转义)

代码如下:

import re
def check_ip(ipAddr):
  compile_ip=re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
  if compile_ip.match(ipAddr):
    return True  
  else:  
    return False

方法2: 字符串拆解法

把ip地址当作字符串,以.为分隔符分割,进行判断

代码:

#!/usr/bin/python 
import os,sys 
def check_ip(ipAddr): 
    import sys 
    addr=ipAddr.strip().split('.') #切割IP地址为一个列表 
    #print addr 
    if len(addr) != 4: #切割后列表必须有4个参数 
        print "check ip address failed!"
        sys.exit() 
    for i in range(4): 
        try: 
            addr[i]=int(addr[i]) #每个参数必须为数字,否则校验失败 
        except: 
            print "check ip address failed!"
            sys.exit() 
        if addr[i]<=255 and addr[i]>=0:  #每个参数值必须在0-255之间 
            pass
        else: 
            print "check ip address failed!"
            sys.exit() 
        i+=1
    else: 
        print "check ip address success!"
if len(sys.argv)!=2: #传参加本身长度必须为2 
    print "Example: %s 10.0.0.1 "%sys.argv[0] 
    sys.exit() 
else: 
    check_ip(sys.argv[1]) #满足条件调用校验IP函数

方法3: 引入IPy类库

IPy库是一个处理IP比较强大的第三方库

IPy库的安装请自行查找。

import IPy 
 def is_ip(address): 
  try: 
    IPy.IP(address) 
    return True 
  except Exception as e: 
    return False

总结

三种方法都能够准确的判断出ip(IP V4)地址的合法性, 正则表达式代码量少, 逻辑简单, 但是正则表达式繁琐, 字符串判定法容易理解,但是代码量大, 使用类库,判断简洁,但是需要引入额外的库。各有利弊, 使用时自行选择即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
Jan 20 Python
python各种语言间时间的转化实现代码
Mar 23 Python
解决python Markdown模块乱码的问题
Feb 14 Python
学习python分支结构
May 17 Python
详解Python对JSON中的特殊类型进行Encoder
Jul 15 Python
django 自定义filter 判断if var in list的例子
Aug 20 Python
Django 实现Admin自动填充当前用户的示例代码
Nov 18 Python
python的time模块和datetime模块实例解析
Nov 29 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Python面向对象中类(class)的简单理解与用法分析
Feb 21 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
Jul 01 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
Python中enumerate()函数编写更Pythonic的循环
Mar 06 #Python
python距离测量的方法
Mar 06 #Python
Python入门之后再看点什么好?
Mar 05 #Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 #Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 #Python
python入门教程 python入门神图一张
Mar 05 #Python
详解TensorFlow在windows上安装与简单示例
Mar 05 #Python
You might like
PHP 简单数组排序实现代码
2009/08/05 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
javascript延时重复执行函数 lLoopRun.js
2007/06/29 Javascript
文本链接逐个出现的js脚本
2007/12/12 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
得到form下的所有的input的js代码
2013/11/07 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
JavaScript获取各大浏览器信息图示
2015/11/20 Javascript
javascript bom是什么及bom和dom的区别
2015/11/26 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
微信小程序 实例开发总结
2017/04/26 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
python实现自动网页截图并裁剪图片
2018/07/30 Python
python实现求特征选择的信息增益
2018/12/18 Python
Python 读取 YUV(NV12) 视频文件实例
2019/12/09 Python
Python安装tar.gz格式文件方法详解
2020/01/19 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
毕业生文员求职信
2013/11/03 职场文书
北京申奥口号
2014/06/19 职场文书
领导干部对照检查材料
2014/08/24 职场文书
国防教育标语
2014/10/08 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
2016年春节问候语
2015/11/11 职场文书
《穷人》教学反思
2016/02/19 职场文书
Python进度条的使用
2021/05/17 Python
前端JavaScript大管家 package.json
2021/11/02 Javascript
英镑符号 £
2022/02/17 杂记
TV动画《间谍过家家》公开PV
2022/03/20 日漫