LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 795|回复: 4

IPv4地址的表达及判断问题

[复制链接]
发表于 2006-9-5 19:32:22 | 显示全部楼层 |阅读模式
有好几个帖子都提到了如何用正则表达式匹配IP地址的问题。咬文嚼字地说这些帖子的其实都是如何匹配dot-decimal方式表达的IPv4地址,即最常见的IPv4地址表达方式。

但IPv4地址的表达方式不止一种,还可以是十进制,八进制,十六进制,以点分隔的八进制,十六进制。以www.linuxsir.cn的IP地址211.93.98.20为例:

各种表达式分别为:

以点分隔的八进制:
  1. 0323.0135.0142.024
复制代码

用awk从dot-decimal换算
  1. echo 211.93.98.20  | awk -F. '{ printf("0%o.0%o.0%o.0%o\n", $1, $2, $3, $4) }'
复制代码


以点分隔的十六进制:
  1. 0xD3.0x5D.0x62.0x14
复制代码

用awk从dot-decimal换算:
  1. echo 211.93.98.20 | awk -F. '{ printf("0x%X.0x%X.0x%X.0x%X\n", $1, $2, $3, $4) }'
复制代码


十六进制:
  1. 0xD35D6214
复制代码

用awk从dot-decimal换算
  1. echo 211.93.98.20 | awk -F. '{ printf("0x%X%X%X%X\n", $1, $2, $3, $4) }'
复制代码


八进制:
  1. 032327261024
复制代码

从十六进制换算,awk+zsh(ksh)的typeset
  1. set -o cbases
  2. set -o octalzeroes
  3. typeset -i8 ip=`echo 211.93.98.20 | awk -F. '{ printf("0x%X%X%X%X\n", $1, $2, $3, $4) }'`
  4. echo $ip
复制代码


十进制:
  1. 3546112532
复制代码

从十六进制换算,awk+zsh(ksh)的typeset
  1. typeset -i10 ip=`echo 211.93.98.20 | awk -F. '{ printf("0x%X%X%X%X\n", $1, $2, $3, $4) }'`
  2. echo $ip
复制代码


上述都是有效的IPv4地址,甚至以点分隔,混杂了八进制,十六进制和十进制的表达都是可以的,比如:
  1. 0xD3.0135.0142.24
复制代码


由此可见,严格意义上的判断是否一个字符串是否是有效IPv4地址是及其困难的,尚且不论还有很多保留作特殊用途的IP段。
发表于 2006-9-5 20:21:01 | 显示全部楼层
收藏,,虽然以前知道,但是这次更系统的复习一下,谢谢!
回复 支持 反对

使用道具 举报

发表于 2006-9-8 10:03:09 | 显示全部楼层
是的,的确是这样。只是10进制以外的表达式使用甚少,所以在其他的贴中都较少见到。等都换到IPv6的时候估计就更难了。不过我还没有见过ipv6的10进制或8进制表达式。
回复 支持 反对

使用道具 举报

发表于 2006-9-10 23:51:46 | 显示全部楼层
use dc

  1. #!/bin/bash
  2. #
  3. oip=(${1//./ })
  4. nip=(
  5. $(for i in ${oip[@]};do
  6.         echo "$i $2op"|dc
  7. done)
  8. )
  9. result=${nip[@]}
  10. echo ${result// /.}
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-9-11 08:27:21 | 显示全部楼层
Post by 寂寞烈火
use dc

  1. #!/bin/bash
  2. #
  3. oip=(${1//./ })
  4. nip=(
  5. $(for i in ${oip[@]};do
  6.         echo "$i $2op"|dc
  7. done)
  8. )
  9. result=${nip[@]}
  10. echo ${result// /.}
复制代码

A nice converter.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表