详解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网络编程学习笔记(四):域名系统
Jun 09 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
Django框架中render_to_response()函数的使用方法
Jul 16 Python
浅谈python 线程池threadpool之实现
Nov 17 Python
读取本地json文件,解析json(实例讲解)
Dec 06 Python
Windows 7下Python Web环境搭建图文教程
Mar 20 Python
python实现电脑自动关机
Jun 20 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
搞清楚 Python traceback的具体使用方法
May 13 Python
处理Selenium3+python3定位鼠标悬停才显示的元素
Jul 31 Python
Python列表list常用内建函数实例小结
Oct 22 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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 默默经典版本
2009/08/04 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
ThinkPHP控制器详解
2015/07/27 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
15条JavaScript最佳实践小结
2013/08/09 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
跟我学习javascript的最新标准ES6
2015/11/20 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
DataTables+BootStrap组合使用Ajax来获取数据并且动态加载dom的方法(排序,过滤,分页等)
2016/11/09 Javascript
详解jquery easyui之datagrid使用参考
2016/12/05 Javascript
ES6学习笔记之正则表达式和字符串正则方法分析
2017/04/25 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
深入理解ES6之数据解构的用法
2018/01/13 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
vue中配置scss全局变量的步骤
2020/12/28 Vue.js
[02:32]DOTA2亚洲邀请赛 C9战队出场宣传片
2015/02/07 DOTA
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
在python中利用try..except来代替if..else的用法
2019/12/19 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
iostream与iostream.h的区别
2015/01/16 面试题
加工操作管理制度
2014/01/19 职场文书
对教师的评语
2014/04/28 职场文书
英语系毕业生求职信
2014/07/13 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
党员倡议书
2015/01/19 职场文书
会议新闻稿
2015/07/17 职场文书
学雷锋活动简报
2015/07/20 职场文书