详解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统计cpu利用率的方法
Jun 02 Python
python文件拆分与重组实例
Dec 10 Python
Python后台开发Django会话控制的实现
Apr 15 Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
用Pelican搭建一个极简静态博客系统过程解析
Aug 22 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
python内置函数sorted()用法深入分析
Oct 08 Python
Python中logging日志库实例详解
Feb 19 Python
python3 xpath和requests应用详解
Mar 06 Python
Python基于Twilio及腾讯云实现国际国内短信接口
Jun 18 Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 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
网络资源
2006/10/09 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
php实现图片添加描边字和马赛克的方法
2014/12/10 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
jquery随机展示头像代码
2011/12/21 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
react项目从新建到部署的实现示例
2021/02/19 Javascript
Python2.x版本中maketrans()方法的使用介绍
2015/05/19 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
浅谈dataframe中更改列属性的方法
2018/07/10 Python
Windows下python3.6.4安装教程
2018/07/31 Python
Django中的ajax请求
2018/10/19 Python
Python装饰器用法与知识点小结
2020/03/09 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
详解Python中的Lock和Rlock
2021/01/26 Python
python编程的核心知识点总结
2021/02/08 Python
纯CSS实现颜色渐变效果(包含环形渐变、线性渐变、彩虹效果等)
2014/05/07 HTML / CSS
做一个能自适应高度的textarea的示例代码
2019/09/06 HTML / CSS
物业管理求职自荐信
2013/09/25 职场文书
八年级英语教学反思
2014/01/09 职场文书
请假条范文大全
2014/04/10 职场文书
逃课检讨书
2015/01/26 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
贷款工作证明模板
2015/06/12 职场文书
关于教师节的广播稿
2015/08/19 职场文书
Oracle笔记
2021/04/05 Oracle
浅析JavaScript中的变量提升
2022/06/01 Javascript