==========================  网络地址函数和操作符 ========================== .. container:: sect1 :name: FUNCTIONS-NET .. container:: titlepage .. container:: .. container:: .. rubric:: 9.12. 网络地址函数和操作符 :name: 网络地址函数和操作符 :class: title `表 9.37 `__\ 展示了可以用于\ ``cidr``\ 和 ``inet``\ 类型的操作符。 操作符\ ``<<``\ 、\ ``<<=``\ 、 ``>>``\ 、\ ``>>=``\ 和 ``&&``\ 测试用于子网包含。它们只考虑两个地址的网 络部分(忽略任何主机部分),然后判断其中一个网络部分是等于另外一个或者是 另外一个的子网。 .. container:: table :name: CIDR-INET-OPERATORS-TABLE **表 9.37. ``cidr``\ 和\ ``inet``\ 操作符** .. container:: table-contents +---------+----------------------------+----------------------------+ | 操作符 | 描述 | 例子 | +=========+============================+============================+ | ``<`` | 小于 | ``inet '192.168.1 | | | | .5' < inet '192.168.1.6'`` | +---------+----------------------------+----------------------------+ | ``<=`` | 小于等于 | ``inet '192.168.1. | | | | 5' <= inet '192.168.1.5'`` | +---------+----------------------------+----------------------------+ | ``=`` | 等于 | ``inet '192.168.1 | | | | .5' = inet '192.168.1.5'`` | +---------+----------------------------+----------------------------+ | ``>=`` | 大于等于 | ``inet '192.168.1. | | | | 5' >= inet '192.168.1.5'`` | +---------+----------------------------+----------------------------+ | ``>`` | 大于 | ``inet '192.168.1 | | | | .5' > inet '192.168.1.4'`` | +---------+----------------------------+----------------------------+ | ``<>`` | 不等于 | ``inet '192.168.1. | | | | 5' <> inet '192.168.1.4'`` | +---------+----------------------------+----------------------------+ | ``<<`` | 被包含在内 | ``inet '192.168.1.5 | | | | ' << inet '192.168.1/24'`` | +---------+----------------------------+----------------------------+ | ``<<=`` | 被包含在内或等于 | ``inet '192.168.1/24' | | | | <<= inet '192.168.1/24'`` | +---------+----------------------------+----------------------------+ | ``>>`` | 包含 | ``inet '192.168.1/2 | | | | 4' >> inet '192.168.1.5'`` | +---------+----------------------------+----------------------------+ | ``>>=`` | 包含或等于 | ``inet '192.168.1/24' | | | | >>= inet '192.168.1/24'`` | +---------+----------------------------+----------------------------+ | ``&&`` | 包含或者被包含contains or | ``inet '192.168.1/24' & | | | is contained by | & inet '192.168.1.80/28'`` | +---------+----------------------------+----------------------------+ | ``~`` | 按位 NOT | ``~ inet '192.168.1.6'`` | +---------+----------------------------+----------------------------+ | ``&`` | 按位 AND | ``inet '192.168 | | | | .1.6' & inet '0.0.0.255'`` | +---------+----------------------------+----------------------------+ | ``|`` | 按位 OR | ``inet '192.168 | | | | .1.6' | inet '0.0.0.255'`` | +---------+----------------------------+----------------------------+ | ``+`` | 加 | ` | | | | `inet '192.168.1.6' + 25`` | +---------+----------------------------+----------------------------+ | ``-`` | 减 | `` | | | | inet '192.168.1.43' - 36`` | +---------+----------------------------+----------------------------+ | ``-`` | 减 | ``inet '192.168.1.4 | | | | 3' - inet '192.168.1.19'`` | +---------+----------------------------+----------------------------+ `表 9.38 `__\ 展示了所有可以用于\ ``cidr``\ 和\ ``inet``\ 类型的函数。函数\ ``abbrev``\ 、\ ``host``\ 和\ ``text``\ 主要是为了提供可选的显示格式用的。 .. container:: table :name: CIDR-INET-FUNCTIONS-TABLE **表 9.38. ``cidr``\ 和\ ``inet``\ 函数** .. container:: table-contents +-------------+-------------+-------------+-------------+-------------+ | 函数 | 返回类型 | 描述 | 例子 | 结果 | +=============+=============+=============+=============+=============+ | | ``text`` | 缩写显 | ``abbrev | ``10 | | ``abb | | 示格式文本 | (inet '10.1 | .1.0.0/16`` | | rev(inet``) | | | .0.0/16')`` | | +-------------+-------------+-------------+-------------+-------------+ | ``abb | ``text`` | 缩写显 | ``abbrev | ``10.1/16`` | | rev(cidr``) | | 示格式文本 | (cidr '10.1 | | | | | | .0.0/16')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``inet`` | 网 | ``broadca | ``192.168 | | ``broadc | | 络广播地址 | st('192.168 | .1.255/24`` | | ast(inet``) | | | .1.5/24')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``int`` | 抽 | ``fami | ``6`` | | ``fam | | 取地址族; | ly('::1')`` | | | ily(inet``) | | \ ``4``\ 为 | | | | | | IPv4, | | | | | | ``6``\ 为 | | | | | | IPv6 | | | +-------------+-------------+-------------+-------------+-------------+ | | ``text`` | 抽取 IP | ``ho | ``19 | | ``h | | 地址为文本 | st('192.168 | 2.168.1.5`` | | ost(inet``) | | | .1.5/24')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``inet`` | 为网络构 | ``hostmask | ``0.0.0.3`` | | ``hostm | | 造主机掩码 | ('192.168.2 | | | ask(inet``) | | | 3.20/30')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``int`` | 抽取网 | ``maskl | ``24`` | | ``mask | | 络掩码长度 | en('192.168 | | | len(inet``) | | | .1.5/24')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``inet`` | 为网络构 | ``netma | ``255. | | ``netm | | 造网络掩码 | sk('192.168 | 255.255.0`` | | ask(inet``) | | | .1.5/24')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``cidr`` | 抽取地址 | ``netwo | ``192.1 | | ``netw | | 的网络部分 | rk('192.168 | 68.1.0/24`` | | ork(inet``) | | | .1.5/24')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``inet`` | 为\ ``inet` | ``se | ``192.1 | | ``set_mask | | `\ 值设置网 | t_masklen(' | 68.1.5/16`` | | len(inet``, | | 络掩码长度 | 192.168.1.5 | | | ``int``) | | | /24', 16)`` | | +-------------+-------------+-------------+-------------+-------------+ | ``set_mask | ``cidr`` | 为\ ``cidr` | ``set_mask | ``192.1 | | len(cidr``, | | `\ 值设置网 | len('192.16 | 68.0.0/16`` | | ``int``) | | 络掩码长度 | 8.1.0/24':: | | | | | | cidr, 16)`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``text`` | 抽取 IP | ``text | ``192.1 | | ``t | | 地址 | (inet '192. | 68.1.5/32`` | | ext(inet``) | | 和网络掩码 | 168.1.5')`` | | | | | 长度为文本 | | | +-------------+-------------+-------------+-------------+-------------+ | | ``boolean`` | 地址是 | ` | ``false`` | | ``in | | 来自于同一 | `inet_same_ | | | et_same_fam | | 个家族吗? | family('192 | | | ily(inet``, | | | .168.1.5/24 | | | ``inet``) | | | ', '::1')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ``cidr`` | 包 | ``inet | ``192.1 | | ``inet_me | | 括给定网络 | _merge('192 | 68.0.0/22`` | | rge(inet``, | | 的最小网络 | .168.1.5/24 | | | ``inet``) | | | ', '192.168 | | | | | | .2.5/24')`` | | +-------------+-------------+-------------+-------------+-------------+ 任何\ ``cidr``\ 值都能够被隐式或显式地转换为\ ``inet``\ 值, 因此上述能够操作\ ``inet``\ 值的函数也同样能够操作\ ``cidr``\ 值(也有独立的用于\ ``inet``\ 和\ ``cidr``\ 的函数,因为它的行为应当和这两种情况不同)。\ ``inet``\ 值也可以转换为\ ``cidr``\ 值。完成时,该网络掩码右侧的任何位都将无声地转换为零以获得一个有效的\ ``cidr``\ 值。另外,你还可以使用常规的造型语法将一个文本字符串转换为\ ``inet``\ 或\ ``cidr``\ 值:例如,\ ``inet(expression``)或\ ``colname``::cidr。 `表 9.39 `__\ 展示了可以用于\ ``macaddr``\ 类型的函数。 函数\ ``trunc(macaddr``)返回一个 MAC 地址,该地址的最后三个字节设置为零。这样可以把剩下的前缀与一个制造商相关联。 .. container:: table :name: MACADDR-FUNCTIONS-TABLE **表 9.39. ``macaddr``\ 函数** .. container:: table-contents +-------------+-------------+-------------+-------------+-------------+ | 函数 | 返回类型 | 描述 | 例子 | 结果 | +=============+=============+=============+=============+=============+ | | ``macaddr`` | 设置最后 | ``tru | ``12:34:56 | | ``trunc | | 3个字节为零 | nc(macaddr | :00:00:00`` | | (macaddr``) | | | '12:34:56:7 | | | | | | 8:90:ab')`` | | +-------------+-------------+-------------+-------------+-------------+ ``macaddr``\ 类型还支持标准关系操作符 (\ ``>``\ 、\ ``<=``\ 等) 用于编辑次序,并且按位算术操作符(\ ``~``\ 、\ ``&``\ 和\ ``|``\ )用于 NOT、AND 和 OR。 `表 9.40 `__\ 中展示了可以用于\ ``macaddr8``\ 类型的函数。函数\ ``trunc(macaddr8``)返回一个后五个字节设置为零的MAC地址。这可以被用来为一个制造商关联一个前缀。 .. container:: table :name: MACADDR8-FUNCTIONS-TABLE **表 9.40. ``macaddr8``\ 函数** .. container:: table-contents +-------------+-------------+-------------+-------------+-------------+ | 函数 | 返回类型 | 描述 | 例子 | 结果 | +=============+=============+=============+=============+=============+ | | ` | 设置最后五 | ` | ``12: | | ``trunc( | `macaddr8`` | 个字节为零 | `trunc(maca | 34:56:00:00 | | macaddr8``) | | | ddr8 '12:34 | :00:00:00`` | | | | | :56:78:90:a | | | | | | b:cd:ef')`` | | +-------------+-------------+-------------+-------------+-------------+ | | ` | 设置第7位 | ``maca | ``02: | | ``macadd | `macaddr8`` | 为一,也被 | ddr8_set7bi | 34:56:ff:fe | | r8_set7bit( | | 称为修改版 | t(macaddr8 | :ab:cd:ef`` | | macaddr8``) | | 的EUI-64, | '00:34:56:a | | | | | 用于内含在 | b:cd:ef')`` | | | | | IPv6地址中 | | | +-------------+-------------+-------------+-------------+-------------+ ``macaddr8``\ 类型也支持用于排序的标准关系操作符(\ ``>``\ 、\ ``<=``\ 等)以及用于NOT、AND和OR的位运算操作符(\ ``~``\ 、\ ``&``\ 和\ ``|``\ )。