详解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代码调试的几种方法总结
Apr 15 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
Python实现简单的语音识别系统
Dec 13 Python
Python matplotlib绘图可视化知识点整理(小结)
Mar 16 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
django ajax json的实例代码
May 29 Python
详解Django中间件的5种自定义方法
Jul 26 Python
在cmder下安装ipython以及环境的搭建
Oct 19 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 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
Sony CFR 320 修复改造
2020/03/14 无线电
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP读取PPT文件的方法
2015/12/10 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
PHP+Apache实现二级域名之间共享cookie的方法
2019/07/24 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
2017/12/06 jQuery
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
python文件和目录操作函数小结
2014/07/11 Python
Python多线程和队列操作实例
2015/06/21 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
解决已经安装requests,却依然提示No module named requests问题
2018/05/18 Python
详解Python循环作用域与闭包
2019/03/21 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
使用python实现飞机大战游戏
2020/03/23 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
英国助听器购物网站:Hearing Direct
2018/08/21 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
授权委托书范本
2014/04/03 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
幼师大班个人总结
2015/02/13 职场文书
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技