分页: 1 / 2

帮忙测试一个脚本:判断IP地址的正确与合法!

发表于 : 2008-08-20 12:08
cnkilior

代码: 全选

echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\.\|[1-9][0-9]\.\|2[0-5][0-5]\.\|1[0-9]\{2\}\.\)\([0-9]\{1\}\.\|[1-9][0-9]\.\|2[0-5][0-5]\.\|1[0-9]\{2\}\.\)\([0-9]\{1\}\.\|[1-9][0-9]\.\|2[0-5][0-5]\.\|1[0-9]\{2\}\.\)\([1-9]\{1\}$\|[1-9][0-9]$\|2[0-5][0-5]$\|1[0-9]\{2\}$\)/Y/p'
帮忙优化一下也非常感谢!

发表于 : 2008-08-20 12:22
eexpress
要是能这样嵌套才爽。没写出。
"[[0-9]\{1,3\}\.*]\{4\}"

原始的是这样。
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}

发表于 : 2008-08-20 12:28
cnkilior
和我以前的一样。。。

---

发表于 : 2008-08-20 12:35
cnkilior

代码: 全选

echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
稍微改了一下!

发表于 : 2008-08-21 9:15
ychristian

代码: 全选

echo "192.168.0.1"| egrep [0-9]\{1,3\}\.*\{3\}[0-9]\{1,3\}$

这个怎么样?

发表于 : 2008-08-21 9:17
ychristian
cnkilior 写了:

代码: 全选

echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
稍微改了一下!
你们还牵扯到的问题阿.我觉得不应该在匹配的地方来做ip地址的检查

应该在匹配完毕之后,单独的检查范围.

发表于 : 2008-08-21 9:18
bones7456
0.0.0.1 不算合法的IP吗?

发表于 : 2008-08-21 9:41
cnkilior
哎呀!这下就难了!

发表于 : 2008-08-21 9:45
cnkilior
刚测试了一下0.0.0.1是一个非法ip。。


代码: 全选

ping -b 0.0.0.1

发表于 : 2008-08-21 9:57
bones7456
0.0.0.0 呢?

发表于 : 2008-08-21 10:10
cnkilior
0开头的都非法!

发表于 : 2008-08-21 10:15
cnkilior
ychristian 写了:
cnkilior 写了:

代码: 全选

echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p'
稍微改了一下!
你们还牵扯到的问题阿.我觉得不应该在匹配的地方来做ip地址的检查

应该在匹配完毕之后,单独的检查范围.
我看过这样实现的一个例子(是我现在公司正在用的代码)。大概用了4个角本函数来实现。相当复杂,大概有50行。因为是在嵌入式设备上使用的,太费cpu了,就产生这样的想法!

发表于 : 2008-08-21 10:15
bones7456
$ ping -b 0.0.0.0
PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.026 ms

发表于 : 2008-08-21 12:40
cnkilior
bones7456 写了:$ ping -b 0.0.0.0
PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.026 ms
恩这个是合法IP

唯一一个0开头的合法IP。

接前面的,公司以前用的角本也把它人为的处理为非法IP

发表于 : 2008-08-21 12:44
cnkilior
还有几个非法IP被包含进去了

以0结尾的IP地址也是非法的。

代码: 全选

echo 111.101.22.33 | sed -n -e 's/^\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([0-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)\.\([1-9]\{1\}\|[1-9][0-9]\|2[0-5][0-5]\|1[0-9]\{2\}\)$/Y/p' 
巧合的是我的代码貌似正确的。。


------
谁能告诉我0结尾的IP地址是不是合法的IP地址?
我这里PING发神经了,忽然又能发包了!

------
这是个很奇怪的IP,貌似代表网关GATEWAY!