python IP格式校驗

2021-08-02 09:57:53 字數 2908 閱讀 2809

校驗對於web開發同學來說,寫**時是必不可少的。

不管前端有沒有做校驗,後端還是必須得要做校驗。出於安全性考慮,可以有效的防止sql注入。

校驗其實是一件很無聊的事情,重複寫著**。所以整理出通用的介面還是蠻有必要的。今天貼出一版python的ip校驗介面,包括ipv4和ipv6的校驗

ipv4:

def validate_ip(ip_str):

sep = ip_str.split('.')

if len(sep) != 4:

return false

for i,x in enumerate(sep):

try:

int_x = int(x)

if int_x < 0 or int_x > 255:

return false

except valueerror, e:

return false

return true

ipv4校驗較簡單,原理如上述**,以「.」分割一下,然後對每位進行範圍校驗,不在0~255的就校驗失敗。

ipv6:

ipv6位址大小為128位。首選的 ipv6 位址表示為:

***x:***x:***x:***x:***x:***x:***x:***x

,其中每個 

x是代表乙個 4 位的十六進製制數字。

v6相比較v4的話,稍微複雜。首先,我們要明白ipv6有哪些格式都屬於合法的:

1. 正常情況

ffff:0000:0000:ffff:ffff:ffff:ffff;ffff

2.前導0省略:

如:ffff:0000:0000:0fff:ffff:ffff:ffff;ffff,可以寫成:

ffff:0:0:fff:ffff:ffff:ffff;ffff

3.雙冒號形式:

如:ffff:0000:0000:0fff:ffff:ffff:ffff;ffff,可以寫成:

ffff::0fff:ffff:ffff:ffff;ffff

4.相容ipv4的ipv6格式:

如:ffff:0000:0000:0fff:ffff:ffff:192.168.0.1也是合法的。

有了上面這些合法的格式,貼上**:

# -*- coding:utf-8 -*-

import os

import sys

import re

def validate_ip(ip_str):

'''validate a hexidecimal ipv6 ip address.

:param ip_str: string to validate as a hexidecimal ipv6 ip address.

:type ip_str: str

:returns: ``true`` if a valid hexidecimal ipv6 ip address,

``false`` otherwise.

:raises: typeerror

'''#:regex for validating an ipv6 in hex notation

# _hex_re_1 = re.compile(r'^([0-9a-fa-f]:)[0-9a-fa-f]$')

_hex_re = re.compile(r'^:([0-9a-fa-f]:)[0-9a-fa-f]:$')

# _hex_re = re.compile(r'^([0-9a-fa-f]:)[0-9a-fa-f]:$')

#:regex for validating an ipv6 in dotted-quad notation

_dotted_quad_re = re.compile(r'^:([0-9a-fa-f]:)(\d\.)\d$')

if _hex_re.match(ip_str):

if ':::' in ip_str:

return false

if '::' not in ip_str:

halves = ip_str.split(':')

return len(halves) == 8 and halves[0] != '' and halves[-1] != ''

halves = ip_str.split('::')

if len(halves) != 2:

return false

if halves[0] != '' and halves[0][0] == ':':

return false

if halves[-1] != '' and halves[-1][-1] == ':':

return false

return true

if _dotted_quad_re.match(ip_str):

if ':::' in ip_str:

return false

if '::' not in ip_str:

halves = ip_str.split(':')

return len(halves) == 7 and halves[0] != ''

halves = ip_str.split('::')

if len(halves) > 2:

return false

hextets = ip_str.split(':')

quads = hextets[-1].split('.')

for q in quads:

if int(q) > 255 or int(q) < 0:

return false

return true

return false

原理也比較簡單,先利用正則匹配,然後在考慮其他特殊情況。

結束!!!

值校驗 範圍校驗 長度校驗 格式校驗

1 值校驗 1.1 null註解 被註解的元素必須為null null message 必須為null private string username 1.2 notnull註解 被註解的元素必須不為null notnull message 必須不為null private string usern...

js 校驗時間格式

var bagin input one val 2.驗證時間格式是否正確 驗證通過返回時間戳格式,例如 2017 01 01,2017,01,01 否則返回null ar bagin r bagin.match d d d if bagin r null 3.驗證時間是否合法 注意 此段必須放置在驗...

Python IP 的處理模組

ip的處理方面經常需要處理 大量的ip位址。包括網路效能,網路掩碼,廣播位址,子網數,ip型別進行判斷。ipy 模組就可以很好的解決這個問題。安裝方式 pip install ipy 判斷 ip 的型別 from ipy import ip ip ip 192.168.1.2 ip.version ...