详解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中的CURL PycURL使用例子
Jun 01 Python
详解在Python和IPython中使用Docker
Apr 28 Python
Python抓取电影天堂电影信息的代码
Apr 07 Python
python 定义给定初值或长度的list方法
Jun 23 Python
Python3 串口接收与发送16进制数据包的实例
Jun 12 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Python中拆分字符串的操作方法
Jul 23 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
python如何操作mysql
Aug 17 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
Jun 05 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中include/require/include_once/require_once使用心得
2016/08/28 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
PHP实现的支付宝支付功能示例
2019/03/26 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
2013/04/24 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
jQuery实现图片渐入渐出切换展示效果
2015/08/15 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
JavaScript Date对象应用实例分享
2017/10/30 Javascript
Node.js使用cookie保持登录的方法
2018/05/11 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
python设计模式大全
2016/06/27 Python
Python彩色化Linux的命令行终端界面的代码实例分享
2016/07/02 Python
python并发2之使用asyncio处理并发
2017/12/21 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Watchshop德国:欧洲在线手表No.1
2019/06/20 全球购物
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
村委会主任先进事迹
2014/01/15 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
美术毕业生求职信
2014/02/25 职场文书
教学督导岗位职责
2015/04/10 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL