网络地址函数和操作符 ====================== 下表显示了cidr 和inet类型可用的操作符。操作符<<, <<=, >>, 和 >>=用于测试子网包含。它们只考虑两个地址的网络部分,忽略任何主机部分, 然后判断其中一个网络是等于另外一个网络还是另外一个的子网。 **表.cidr和inet操作符** .. list-table:: :widths: auto :header-rows: 1 * - 操作符 - 描述 - 例子 * - < - 小于 - 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/24' >> inet '192.168.1.5' * - >>= - 包含或等于 - inet '192.168.1/24' >>= inet '192.168.1/24' * - \~ - 位非 - ~ inet '192.168.1.6' * - \& - 位与 - inet '192.168.1.6' & inet '0.0.0.255' * - \| - 位或 - 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.43' - inet '192.168.1.19' 下表显示了cidr 和inet 类型可用的函数。函数abbrev, host, text主要是为了提供可选的显示格式用的。 **表.cidr 和inet 函数** .. list-table:: :widths: auto :header-rows: 1 * - 函数 - 返回类型 - 描述 - 例子 - 结果 * - abbrev(inet) - text - 缩写显示为格式文本 - abbrev(inet '10.1.0.0/16') - 10.1.0.0/16 * - abbrev(cidr) - text - 缩写显示为格式文本 - abbrev(cidr '10.1.0.0/16') - 10.1/16 * - broadcast(inet) - inet - 广播网络地址 - broadcast('192.168.1.5/24') - 192.168.1.255/24 * - family(inet) - int - 抽取地址族; 4 为 IPv4, 6 为 IPv6 - family('::1') - 6 * - host(inet) - text - 抽取IP 地址为格式文本 - host('192.168.1.5/24') - 192.168.1.5 * - hostmask(inet) - inet - 为网络构造本机掩码 - hostmask('192.168.23.20/30') - 0.0.0.3 * - masklen(inet) - int - 抽取子网掩码长度 - masklen('192.168.1.5/24') - 24 * - netmask(inet) - inet - 为网络构造子网掩码 - netmask('192.168.1.5/24') - 255.255.255.0 * - network(inet) - cidr - 抽取地址的网络部分 - network('192.168.1.5/24') - 192.168.1.0/24 * - set_masklen(inet, int) - inet - 为inet 值设置子网掩码长度 - set_masklen('192.168.1.5/24', 16) - 192.168.1.5/16 * - set_masklen(cidr, int) - cidr - 为cidr 值设置子网掩码长度 - set_masklen('192.168.1.0/24'::cidr, 16) - 192.168.0.0/16 * - text(inet) - text - 抽取IP 地址和子网掩码长度为格式文本 - text(inet '192.168.1.5') - 192.168.1.5/32 任何cidr值都能够被隐含或明确的转换为inet值, 因此上述能够操作inet值的函数也同样能够操作cidr值。(而将某些操作inet和cidr的函数单独分隔开是因为它们的行为不同。) inet值也可以转换为cidr值,此时子网掩码右侧的所有位都将无声的转换为零以获得一个有效的cidr值。另外,你还可以使用常规的类型转换语法将一个文本字符串转换为inet或cidr值。 例如:inet(expression)或colname::cidr。 下表显示了macaddr 类型可用的函数。函数trunc(macaddr)返回一个 MAC 地址, 该地址的最后三个字节设置为零。这样可以把剩下的前缀与一个制造商相关联。 **表.macaddr 函数** .. list-table:: :widths: auto :header-rows: 1 * - 函数 - 返回类型 - 描述 - 例子 - 结果 * - trunc(macaddr) - macaddr - 最后三个字节设置为零 - trunc(macaddr '12:34:56:78:90:ab') - 12:34:56:00:00:00 macaddr 类型也支持标准关系操作符(>,<=,等)用于此法排列。