详解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 相关文章推荐
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
Eclipse中Python开发环境搭建简单教程
Mar 23 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
python 链接和操作 memcache方法
Mar 04 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python3实现腾讯云OCR识别
Nov 27 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
在Pycharm中执行scrapy命令的方法
Jan 16 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
TensorFlow2.1.0最新版本安装详细教程
Apr 08 Python
python输入中文的实例方法
Sep 14 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
总结Python中逻辑运算符的使用
2015/05/13 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
详解用python写网络爬虫-爬取新浪微博评论
2019/05/10 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
使用django的objects.filter()方法匹配多个关键字的方法
2019/07/18 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
英国最大的女士服装零售商:Bonmarché
2017/08/17 全球购物
团工委书记自荐书范文
2013/12/17 职场文书
致1500米运动员广播稿
2014/02/07 职场文书
二手房购房意向书范本
2014/04/01 职场文书
初中学生期末评语
2014/04/24 职场文书
离婚协议书包括哪些内容
2014/10/16 职场文书
导游词怎么写
2015/02/04 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
如何在centos上使用yum安装rabbitmq-server
2021/03/31 Servers
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python