網中人 回复于:2004-02-26 15:15:10 |
try:
[code:1:747c382f64]#!/bin/bash
usage () {
echo "incorrect IP format."
chkip
}
chkip () {
read -p "Your IP: " IP
echo "$IP" | grep -q '[^0-9.]' && usage
[ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && usage
for i in ${IP//./ } ; do
[ $((i/8)) -lt 32 ] || usage
done
}
chkip
echo "$IP is good!"[/code:1:747c382f64]
|
bjgirl 回复于:2004-02-27 02:13:55 |
来个好麻烦点的 ops: [code:1:3d660a93c7] #!/bin/ksh # n=1 if ! echo $1|grep -q "[a-zA-Z!@#$%^&*()-_+=|\`~<>,/?]" then for i in x y z w;do export ip$i=$(echo $1|cut -f$n -d".") ((n+=1)) done (($ipx>0&&$ipx<256))&&(($ipy>=0&&$ipy<256))&&\ (($ipz>=0&&$ipz<256))&&(($ipw>=0&&$ipw<256))&&\ echo "$1 is correct IP!"||echo "$1 is incorrect IP!" else echo "input error!" fi
[/code:1:3d660a93c7]
|
zhhui2000 回复于:2004-03-02 14:39:31 |
echo "please input IP:"
read ip
echo $ip |awk -F '.' '{ if ( ($1 >256 || $1 <0) || ($2 >256 || $2 < 0) || ($3 > 256 || $3 < 0) || ($
4 >256 || $4 < 0 )) print $0 ,"is incorrect"}'
|
lwq315 回复于:2004-03-02 14:39:59 |
谢谢~~!我琢磨琢磨看~!
|
網中人 回复于:2004-03-02 14:44:37 |
有人測過 1.2.3 或 1.2.3.4.5 的 format 嗎? ^_^
還有:
.1.2.3.4
1.2.3.4.
.1.2.3
1.2.3.
|
網中人 回复于:2004-03-02 16:21:37 |
為了能夠測試更多錯誤格式,及更方便使用,我將原本的 code 修改了一下:
[code:1:dfb0e0da46]#!/bin/bash
usage () {
echo "incorrect IP format."
readip
chkip
}
readip () {
read -p "Your IP: " IP
}
chkip () {
echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$' && usage
[ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && usage
for i in ${IP//./ } ; do
[ $((i/8)) -lt 32 ] || usage
done
}
if [ "$1" ]; then
IP=$1
else
readip
fi
chkip
echo "$IP is good!"[/code:1:dfb0e0da46]
|
taocb006 回复于:2004-03-02 16:27:03 |
echo "please input IP:"
read ip
echo $ip |awk -F"." '{
if ( ($1>256 || $1<0) || ($2>256 || $2 < 0) || ($3 > 256 || $3 < 0) || ($ 4 >256
|| $4 < 0 ) || ($NF>4) ) print $0 ,"is incorrect"}'
|
網中人 回复于:2004-03-02 16:36:22 |
[quote:71be9b60f0="taocb006"]echo "please input IP:"
read ip
echo $ip |awk -F"." '{
if ( ($1>256 || $1<0) || ($2>256 || $2 < 0) || ($3 > 256 || $3 < 0) || ($ 4 >256
|| $4 < 0 ) || ($NF>4) ) print $..........[/quote:71be9b60f0]
請問這跟 zhhui2000 貼的差在哪?
|
taocb006 回复于:2004-03-02 16:42:13 |
增加了$NF等判断,兄弟!!!
对于.1.2.3.4.或1.2.3.4.5等,原来的是有问题的!
|
網中人 回复于:2004-03-02 17:04:23 |
哦... 了解...
不過,對 1.2.3.4. 還是不能過濾...
|
forest077 回复于:2004-03-02 18:02:11 |
网版主,taocb006的代码我试过了,你说的那种情况可以过滤,其他的非法情况也都能过滤,很好。不过里面NF不要加$。
|
bjgirl 回复于:2004-03-02 18:05:11 |
谁测试测试我的那段?, ops:
|
r2007 回复于:2004-03-02 18:25:05 |
[quote:c8e56fd9f4="forest077"]网版主,taocb006的代码我试过了,你说的那种情况可以过滤,其他的非法情况也都能过滤,很好。不过里面NF不要加$。[/quote:c8e56fd9f4]
这些非法情况如何?^_^
[code:1:c8e56fd9f4]1.1--------2.+3.0256
0333.0257.0355.0307
0x99.1 2.+3.0256
1.1 1.2 3.3
0xab.1.1.1
[/code:1:c8e56fd9f4]
|
bjgirl 回复于:2004-03-02 18:36:33 |
[quote:586ff87592="r2007"][/quote:586ff87592] [code:1:586ff87592] #!/bin/ksh # if ! echo $1|grep -q "[a-zA-Z!@#$%^&*()-_+=|\`~<>,/?]";then
n=1 for i in x y z w;do export ip$i=$(echo $1|cut -f$n -d".") ((n+=1)) done (($ipx>0&&$ipx<256))&&(($ipy>=0&&$ipy<256))&&\ (($ipz>=0&&$ipz<256))&&(($ipw>=0&&$ipw<256))&&\ echo "$1 is correct IP!"||echo "$1 is incorrect IP!" else echo "input error!" fi 2>/dev/null[/code:1:586ff87592] 我的脚本测试: [quote:586ff87592] $ksh ipp 1.1--------2.+3.0256 input error! $ksh ipp 0333.0257.0355.0307 0333.0257.0355.0307 is incorrect IP! $ksh ipp 0x99.1 2.+3.0256 input error! $ksh ipp 1.1 1.2 3.3 1.1 is incorrect IP! $ksh ipp 0xab.1.1. input error! [/quote:586ff87592][code:1:586ff87592] ksh ipp 202.106.127.117 202.106.127.117 is correct IP! [/code:1:586ff87592]
|
forest077 回复于:2004-03-02 19:33:52 |
r2007版主说的确实都没有测到,其中包含空格、以0x开头的都不能过滤,汗……
bjgirl和网版主的代码太高,我还没有学到,在我的sco上直接运行也有问题,所以看不懂。我把taocb006的稍微改了改,是可以过滤掉上面提到的几种情况的。
[code:1:cf01ca6d75]
#!/bin/sh
echo "please input IP:"
read ip
echo $ip |awk -F"." '
{
if ( ($1<=256 && $1>=0) &&
($2<=256 && $2>=0) &&
($3<=256 && $3>=0) &&
($4<=256 && $4>=0) &&
(NF==4) &&
($1~/^[0-9]+$/)) &&
($2~/^[0-9]+$/)) &&
($3~/^[0-9]+$/)) &&
($4~/^[0-9]+$/))
{
print $0,"correct"
}
else
{
print $0,"error"
}
}'
[/code:1:cf01ca6d75]
|
r2007 回复于:2004-03-02 23:20:49 |
to: bjmm
ksh我没有接触过,不过我猜这个未必能测出来^_^
1.1.1.-0
or
1.1.1.-
or
1.0.1.1-
or
1.0.0.1-------
至少可以躲过echo "input error!"这一关
|
bjgirl 回复于:2004-03-02 23:31:44 |
[quote:42d1db2658="r2007"]to: bjmm ksh我没有接触过,不过我猜这个未必能测出来^_^ 1.1.1.-0 or 1.1.1.- or 1.0.1.1- or 1.0.0.1------- 至少可以躲过echo "input error!"这一关[/quote:42d1db2658] 我我我.....哇~~,不带这么刁难我的! :em16: :em12: :em08:
|
bjgirl 回复于:2004-03-02 23:40:13 |
其实把那个grep里的改改就可以用了.
|
網中人 回复于:2004-03-03 00:23:07 |
有那麼難嗎?
echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.' && printerr
okay,再改一次,這應該可用了吧:
[code:1:1e4e8fb095]#!/bin/bash
printerr () {
echo "incorrect IP format."
readip
chkip
}
readip () {
read -p "Your IP: " IP
}
chkip () {
echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.' && printerr
[ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && printerr
for i in ${IP//./ } ; do
[ $((10#$i/8)) -lt 32 ] || printerr
done
}
if [ "$1" ]; then
IP=$1
else
readip
fi
chkip
echo "$IP is good!"
[/code:1:1e4e8fb095]
|
bjgirl 回复于:2004-03-03 01:24:55 |
欢迎大家考验!
[code:1:faf8326f26]
cat ipp
#!/bin/ksh
#
#
var=$(echo $1|tr -d .)
if echo $var|sed -n '/^[0-9.*]/p' >/dev/null 2>&1;then
n=1
for i in x y z w;do
export ip$i=$(echo $1|cut -f$n -d".")
((n+=1))
done
(($ipx>0&&$ipx<256))&&(($ipy>=0&&$ipy<256))&&\
(($ipz>=0&&$ipz<256))&&(($ipw>0&&$ipw<256))&&\
echo "$1 is: correct IP!"||echo "$1 is: incorrect IP!"
fi 2>/dev/null[/code:1:faf8326f26]
测试文件:[quote:faf8326f26]
cat iplist
1.1.1.-0
1.1.1.-
1.0.1.1-
1.0.0.1-------
1.1--------2.+3.0256
0333.0257.0355.0307
0x99.1 2.+3.0256
1.1 1.2 3.3
0xab.1.1.1
1.2.3.4
192.168.2.2
211.12.2.2
61.51.142.3[/quote:faf8326f26]
测试代码:[code:1:faf8326f26]
for i in $(<iplist);do
ksh ipp $i
done[/code:1:faf8326f26]
测试结果:[quote:faf8326f26]
1.1.1.-0 is: incorrect IP!
1.1.1.- is: incorrect IP!
1.0.1.1- is: incorrect IP!
1.0.0.1------- is: incorrect IP!
1.1--------2.+3.0256 is: incorrect IP!
0333.0257.0355.0307 is: incorrect IP!
0x99.1 is: incorrect IP!
2.+3.0256 is: incorrect IP!
1.1 is: incorrect IP!
1.2 is: incorrect IP!
3.3 is: incorrect IP!
0xab.1.1.1 is: incorrect IP!
1.2.3.4 is: correct IP!
192.168.2.2 is: correct IP!
211.12.2.2 is: correct IP!
61.51.142.3 is: correct IP!
[/quote:faf8326f26]
|
bjgirl 回复于:2004-03-03 01:30:11 |
卡在这个IP很长时间!累死本MM了
1.1.1.-0
测试的时候总说他是IP, ,不过在我的努力下他终于说实话了.... ops:
建议此主题加精华!
|
網中人 回复于:2004-03-03 01:31:56 |
MM 請加兩個 IP 來測測看...
1.2.3.
.1.2.3
|
bjgirl 回复于:2004-03-03 01:34:38 |
$ksh ipp .1.2
.1.2 is: incorrect IP!
$ksh ipp 1.2.3
1.2.3 is: incorrect IP!
$ksh ipp .1.2.3
.1.2.3 is: incorrect IP!
$ksh ipp 1.2.3.
1.2.3. is: incorrect IP!
|
網中人 回复于:2004-03-03 01:39:55 |
還有... MM 為何認為第 4 碼的 IP 不可以是 0 呢?
因為一個 mask_bit 少於 24 的 IP 都可以用 0 哦...
若,本串討論再加入 netmask 判斷,那就更為精彩了... ^_^
|
bjgirl 回复于:2004-03-03 01:46:52 |
[quote:21f77312aa="網中人"]還有... MM 為何認為第 4 碼的 IP 不可以是 0 呢? 因為一個 mask_bit 少於 24 的 IP 都可以用 0 哦...
若,本串討論再加入 netmask 判斷,那就更為精彩了... ^_^[/quote:21f77312aa] 唉!,,,,还是有问题!,不弄了!sleep去! :oops:
|
r2007 回复于:2004-03-03 09:43:59 |
网兄所供代码检测不到这些
1...1
1.02.3.4
1.2.003.4
1.0000000000000000000002.21.1
将code改一下,可以检测到第一种情况了,第二种之后的这些情况首先不知道是不是符合ip的规范,再是如何识别它?
[code:1:8d2629555d]echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.' && printerr [/code:1:8d2629555d]
|
網中人 回复于:2004-03-03 13:03:18 |
感謝 r2007 兄幫忙測試及提供修正﹗
關於後面帶 0 開頭的 ip ,應該是不規範的,因為會被當作八進位來處理。因此要過濾掉:
[code:1:fc71cb7f6f]echo $i | grep -Eq "^0+[^0]" && printerr[/code:1:fc71cb7f6f]
我再次修改代碼如下,歡迎測試:
[code:1:fc71cb7f6f]#!/bin/bash
printerr () {
echo "incorrect IP format."
readip
chkip
}
readip () {
read -p "Your IP: " IP
}
chkip () {
echo "$IP" | grep -Eq '[^0-9.]|^\.|\.$|^0*\.|\.\.' && printerr
[ $(echo -e "${IP//./\n}" | wc -l) -ne 4 ] && printerr
for i in ${IP//./ } ; do
echo $i | grep -Eq "^0+[^0]" && printerr
[ $((10#$i/8)) -gt 31 ] && printerr
done
}
if [ "$1" ]; then
IP=$1
else
readip
fi
chkip
echo "$IP is good!"
[/code:1:fc71cb7f6f]
|
labrun 回复于:2004-03-03 14:55:17 |
呵呵,你们够专业!佩服佩服
|
bjgirl 回复于:2004-03-03 16:27:36 |
[quote:2811f71a7e="labrun"]呵呵,你们够专业!佩服佩服[/quote:2811f71a7e] 受益匪浅:oops:
|
bjgirl 回复于:2004-03-04 01:04:59 |
[quote:fbf2e6edad="網中人"]還有... MM 為何認為第 4 碼的 IP 不可以是 0 呢? 因為一個 mask_bit 少於 24 的 IP 都可以用 0 哦...
若,本串討論再加入 netmask 判斷,那就更為精彩了... ^_^[/quote:fbf2e6edad] 懒啦~~,嘻嘻,还是看看netman的这个脚本吧! :oops: http://www.chinaunix.net/jh/24/196402.html
|
maluyao 回复于:2005-05-19 14:57:14 |
Linux 通过
ipcalc -m 192.168.0.259 &>/dev/null && echo 'This is an IP Address' ||echo 'This is not an IP Addr'
|
rhinux 回复于:2005-06-04 00:20:30 |
IPv6呢?
|
supersuper 回复于:2005-06-16 11:32:32 |
受益匪浅啊
|