详解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更加充分的使用Sqlite3
Dec 11 Python
Python iter()函数用法实例分析
Mar 17 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
有关Python的22个编程技巧
Aug 29 Python
Python配置虚拟环境图文步骤
May 20 Python
Python 串口读写的实现方法
Jun 12 Python
pandas通过字典生成dataframe的方法步骤
Jul 23 Python
Python reversed函数及使用方法解析
Mar 17 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 Python
python基础之类方法和静态方法
Oct 24 Python
Python实现简单得递归下降Parser
May 02 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微信开发之音乐回复功能
2018/06/14 PHP
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jQuery live( type, fn ) 委派事件实现
2009/10/11 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
js取float型小数点后两位数的方法
2014/01/18 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
javascript和jQuery实现网页实时聊天的ajax长轮询
2016/07/20 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
如何在Python中编写并发程序
2016/02/27 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
javascript实现用户必须勾选协议实例讲解
2021/03/24 Javascript
优秀广告词大全
2014/03/19 职场文书
募捐倡议书
2014/04/14 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
年度评优评先方案
2014/06/03 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
2015公务员试用期工作总结
2014/12/12 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
pytest配置文件pytest.ini的详细使用
2021/04/17 Python
详解非极大值抑制算法之Python实现
2021/06/28 Python