详解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 Queue模块详细介绍及实例
Dec 27 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
django定期执行任务(实例讲解)
Nov 03 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
Python3解释器知识点总结
Feb 19 Python
使用Python制作一个打字训练小工具
Oct 01 Python
使用Python求解带约束的最优化问题详解
Feb 11 Python
python中的 zip函数详解及用法举例
Feb 16 Python
python游戏开发的五个案例分享
Mar 09 Python
PyQt5事件处理之定时在控件上显示信息的代码
Mar 25 Python
Django-imagekit的使用详解
Jul 06 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 dirname()与__FILE__常量的应用
2013/06/24 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
实例介绍PHP中zip_open()函数用法
2019/02/15 PHP
jQuery选择头像并实时显示的代码
2010/06/27 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
javascript实现下雨效果
2017/03/27 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
python通过文件头判断文件类型
2015/10/30 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
python相似模块用例
2016/03/04 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
关于Django外键赋值问题详解
2017/08/13 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
Python装饰器用法与知识点小结
2020/03/09 Python
python 成功引入包但无法正常调用的解决
2020/03/09 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
中英文自我评价常用句型
2013/12/19 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
机械专业求职信
2014/05/25 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
环保建议书作文400字
2015/09/14 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
golang语言指针操作
2022/04/14 Golang