详解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中的引用和拷贝浅析
Nov 22 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
Apr 23 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
Dec 11 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
用python实现名片管理系统
Jun 18 Python
Python实现手绘图效果实例分享
Jul 22 Python
python实现自定义日志的具体方法
May 28 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读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
php验证码实现代码(3种)
2015/09/07 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
JavaScript实现开关等效果
2017/09/08 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
Python中Class类用法实例分析
2015/11/12 Python
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python处理按钮消息的实例详解
2017/07/11 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
Django安装配置mysql的方法步骤
2018/10/15 Python
用Python将结果保存为xlsx的方法
2019/01/28 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
django2.2 和 PyMySQL版本兼容问题
2020/02/17 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
电子狗项圈:eDog Australia
2019/12/04 全球购物
Shell如何接收变量输入
2012/09/24 面试题
播音主持女孩的自我评价分享
2013/11/20 职场文书
找工作最新求职信
2013/12/22 职场文书
综合实践教学反思
2014/01/31 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
离婚协议书样本
2015/01/26 职场文书
同学聚会邀请函
2015/01/30 职场文书
python实现批量移动文件
2021/04/05 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript