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

sh/bash/dash/ksh/zsh等Shell脚本
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

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

#1

帖子 cnkilior » 2008-08-20 12:08

代码: 全选

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'
帮忙优化一下也非常感谢!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#2

帖子 eexpress » 2008-08-20 12:22

要是能这样嵌套才爽。没写出。
"[[0-9]\{1,3\}\.*]\{4\}"

原始的是这样。
[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
● 鸣学
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#3

帖子 cnkilior » 2008-08-20 12:28

和我以前的一样。。。

---
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#4

帖子 cnkilior » 2008-08-20 12:35

代码: 全选

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'
稍微改了一下!
ychristian
帖子: 47
注册时间: 2007-07-17 14:36

#5

帖子 ychristian » 2008-08-21 9:15

代码: 全选

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

这个怎么样?
ychristian
帖子: 47
注册时间: 2007-07-17 14:36

#6

帖子 ychristian » 2008-08-21 9:17

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地址的检查

应该在匹配完毕之后,单独的检查范围.
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#7

帖子 bones7456 » 2008-08-21 9:18

0.0.0.1 不算合法的IP吗?
关注我的blog: ε==3
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#8

帖子 cnkilior » 2008-08-21 9:41

哎呀!这下就难了!
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#9

帖子 cnkilior » 2008-08-21 9:45

刚测试了一下0.0.0.1是一个非法ip。。


代码: 全选

ping -b 0.0.0.1
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#10

帖子 bones7456 » 2008-08-21 9:57

0.0.0.0 呢?
关注我的blog: ε==3
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#11

帖子 cnkilior » 2008-08-21 10:10

0开头的都非法!
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#12

帖子 cnkilior » 2008-08-21 10:15

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了,就产生这样的想法!
头像
bones7456
帖子: 8495
注册时间: 2006-04-12 20:05
来自: 杭州
联系:

#13

帖子 bones7456 » 2008-08-21 10:15

$ 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
关注我的blog: ε==3
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#14

帖子 cnkilior » 2008-08-21 12:40

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
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#15

帖子 cnkilior » 2008-08-21 12:44

还有几个非法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!
上次由 cnkilior 在 2008-08-21 13:39,总共编辑 2 次。
回复