【python】ip和域名合法性校验

1.校验ip

方式1 - ipv4-正则匹配

^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$

^                               # 开始匹配字符串
(
  (25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)   # 匹配 0 到 255 的数字
  \.
){3}                            # 重复匹配上述组合,确保有三个点号分隔的数字
(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)      # 匹配最后一组数字
$                               # 结束匹配字符串

def is_valid_ip(IP):
    pattern = r'^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$'

    if re.match(pattern, IP):
        return True
    else:
        return False

方式2 - ipaddress 库

官方文档
https://docs.python.org/3/library/ipaddress.html

import ipaddress

def get_ip_version(ip):
    try:
        ip_obj = ipaddress.ip_address(ip)
        return ip_obj.version
    except ValueError:
        return None

# 示例用法
ipv4_address = "192.168.1.1"
ipv6_address = "2001:db8::1"
invalid_address = "not_an_ip"

ip_version_ipv4 = get_ip_version(ipv4_address)
ip_version_ipv6 = get_ip_version(ipv6_address)
ip_version_invalid = get_ip_version(invalid_address)

print(f"{ipv4_address} 的版本是: {ip_version_ipv4}")
print(f"{ipv6_address} 的版本是: {ip_version_ipv6}")
print(f"{invalid_address} 的版本是: {ip_version_invalid}")

2.校验域名

英文域名-正则匹配

^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$ 正则解释

^                           # 开始匹配字符串
(                           # 开始捕获组
  (?!-)                     # 负向前瞻断言,确保域名的每一部分不以破折号开头
  [A-Za-z0-9-]{1,63}        # 匹配 1 到 63 个字母、数字或破折号(域名每一部分的长度限制)
  (?<!-)                    # 负向后顾断言,确保域名的每一部分不以破折号结尾
  \.                        # 匹配点号(域名中的分隔符)
)+                          # 重复匹配上述捕获组,确保有至少一个点号
[A-Za-z]{2,6}               # 匹配域名的顶级域名(TLD),2到6个字母
$                           # 结束匹配字符串

def is_valid_domain(domain):
    """校验域名,只支持英文域名"""
    if len(domain) > 254:
        return False
    if not re.match("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$", domain):
        return False

    return True
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值