在 Python 中验证 IP 地址

2024 年 8 月 29 日 | 阅读 6 分钟

在本教程中,我们将学习如何使用多种方法在 Python 中验证 IP 地址。这在编写操作系统级别的程序时很有用。如果我们正在开发 Django 或 Flask 的 Web 应用程序,我们可能需要确定用户的 IP 地址是否有效。IP 地址验证对于防止欺诈、为用户提供有针对性的位置服务等至关重要。

让我们简要介绍一下 IP 地址。

什么是 IP (Internet Protocol) 地址?

IP 代表互联网协议,它是分配给连接到互联网的每台计算机的唯一地址。它指的是一组规则,这些规则在一定程度上控制着数据如何在互联网上传输。它结合了 DNS 解析和信息从一台计算机到另一台计算机的传输。

IP 地址主要有两种版本 - IPv4 和 IPv6。

IPv4 与 IPv6

我们可能熟悉 IPv4 地址。IPv4 由四个数字(每个数字在 0 到 255 之间)组成,用句点分隔。IP 地址格式是一个 32 位数字地址,写成四个十进制数,称为(八进制)。它提供了 43 亿个唯一地址的组合。

示例 -

IPv6

它是较新的版本,与前一个版本略有不同。它看起来如下。

它使用字母数字字符的组合。它拥有的可用空间数量是 IPv4 地址的两倍多。它是一个 128 位地址空间,结合了 2¹²⁸ 个唯一地址,而 IPv4 允许 43 亿个唯一空间地址。这比 IPv4 多 10²⁸ 倍。

为什么我们需要 IPv6?

尽管 IPv4 被称为“版本 4”,但它是第一个被创建的 IP 版本,自互联网发明以来一直存在。当时,工程师们无法想象 43 亿个 IP 地址不足以满足需求。到 2022 年,各种智能手机、笔记本电脑和平板电脑已经使用了约 42.9 亿个地址。

如何在 Python 中验证 IP 地址

在本节中,我们将看到各种验证 IP 地址的方法。

方法 - 1 使用 count() 方法

让我们理解以下示例

示例 -

输出

Valid IP Address

说明

在上面的代码中,我们使用 **count()** 方法来计算 **. (点)** 分隔符。如果分隔符的计数少于 3,则输入的 IP 地址无效。然后我们检查每个数字在句点之间的范围。如果条件满足,则输入的 IP 地址有效。

这是一个验证 IP 地址的简单示例。

方法 - 2:使用 set()

让我们理解以下示例 -

示例 -

输出

Valid Ip address

解释 -

在代码中,我们初始化了一个 count 变量,它计算 IP 地址中 . 点的数量。如果分隔符的计数少于 3,则输入的 IP 地址无效,如果条件为真,则将 set_val 初始化为一个集合。在 set_val 中,我们将 0 到 256 之间的数字作为字符串添加。之后,我们再次初始化 count 变量,并将 temp 初始化为空字符串。for 循环迭代并检查字符串是否不等于点;如果条件为 True,则将该字符串添加到 temp。否则,我们检查字符串是否已存在于 set_val 中;如果为真,则将 count 增加一并清空 temp。

然后我们验证 count;如果它等于四,那么我们有一个有效的 IP 地址。

方法 - 3:使用 ipaddress() 模块

Python 带有一个名为 **ipaddress** 的实用模块,可用于验证 IP 地址并对 IP 地址执行一些基本的算术运算。它不会显式地评估 IP 地址是否有效,但我们需要使用一些逻辑来完成它。

它提供了最健壮和安全的方法来确定有效的 IP 地址。它同时支持 IPv4 和 IPv6 地址。

要使用此模块,我们需要将其导入 Python 代码中。

让我们理解下面的例子。

示例 -

输出

The IP address '127.0.0.2.4' is not valid
The IP address 127.0.0.0 is valid

使用此模块的优点是它可以验证 IPv4 和 IPv6 地址。

输出

The IP address 2001:db8:75a2::8a2e:340:5625 is valid

使用 Regex 验证 IP

在此方法中,我们将使用自定义正则表达式来检查提供的 IP 字符串的形状。Python 提供了 re 库,用于解析和匹配 Regex。

此方法不如 ipaddress 模块高效和健壮;它需要更多的代码行,并且会检查字符串不仅形状正确,而且其中的值在 0 到 255 之间。我们还必须编写两个逻辑来检查 IPv4 和 IPv6 地址。

要验证 IPv4,我们创建匹配 IPv4 地址的 Regex 字符串。让我们理解以下 Regex。

"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

让我们逐个理解它的组件。

  • [0-9] - 它表示我们正在搜索 0 到 9 之间的数字字符。
  • {1,3} - 它表示我们正在查找前一个字符集的一到三次实例。
  • \. - 它告诉解析器检查 . 字符。在 Regex 中,我们需要使用 \ 转义来指定我们要查找的是特殊字符。

这三个组件构成 IP 地址的一个字节(例如 255.)。现在我们重复这三个组件四次。

我们需要导入 re 模块才能在 Python 中使用 Regex。接下来,我们将使用 **match()** 函数将输入与正则表达式进行匹配。

示例 -

输出


现在让我们实现完整的验证函数。

示例 -

输出

The IP address 127.0.0.1 is valid

结论

在本教程中,我们学习了各种验证 IP 地址的方法,包括内置的 ipaddress 模块。我们了解了 IPv4 与 IPv6 地址的不同之处以及为什么我们需要 IPv6 地址。您可以轻松找到您系统上的当前 IP 地址。打开设备设置,然后打开系统偏好设置 > 网络 > 根据您的连接选择 WiFi 或以太网。