리눅스 bash IP 유효성 검사
2014. 6. 19. 23:09 |
리눅스
리눅스 bash IP 유효성 검사
회사에서 업무상 bash 쉘 스크립트를 많이 만드는데, IP의 유효성을 검사하기 위해 대충 아래와 같은 함수를 만들어 보았다.
그런데 위 함수에는 아래와 같은 문제가 있다.
172.16.008.128에서 008은 올바른 IP 형식이 아니지만, 정규표현식 [0-9]{1,3} 조건도 만족하고, [ $NUM -ge 0 ] && [ $NUM -le 255 ] 조건도 만족하기 때문에 Valid로 나온다.
따라서 이 점을 보완해 아래와 같이 만들어 보았다.
이번에는 0으로 시작하는 경우 2자리나 3자리가 되지 않도록 처리하였다. 따라서 아래와 같이 172.16.008.128도 잘 잡아낼 수 있었다.
그런데... 실컷 검증 스크립트를 짜놨더니 허탈한 일이 생겼다. 바로 ipcalc의 존재를 알아버렸다는...
레드햇 계열의 ipcalc는 -c 옵션으로 IP 형식의 유효성을 검증할 수 있다. 아무 말도 안 나오면 정상이고, 잘못된 IP를 넣으면 아래와 같이 에러를 출력한다.
뭐 그래도 위 스크립트가 나름 도움이 되었기를 바라며...
회사에서 업무상 bash 쉘 스크립트를 많이 만드는데, IP의 유효성을 검사하기 위해 대충 아래와 같은 함수를 만들어 보았다.
validate_IP(){
if [[ $1 =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
then
for NUM in `sed 's/\./ /g' <<< $1`
do
if [ $NUM -ge 0 ] && [ $NUM -le 255 ]
then
continue
else
echo "Invalid"
return 1
fi
done
echo "Valid"
return 0
else
echo "Invalid"
return 1
fi
}
if [[ $1 =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
then
for NUM in `sed 's/\./ /g' <<< $1`
do
if [ $NUM -ge 0 ] && [ $NUM -le 255 ]
then
continue
else
echo "Invalid"
return 1
fi
done
echo "Valid"
return 0
else
echo "Invalid"
return 1
fi
}
그런데 위 함수에는 아래와 같은 문제가 있다.
[root@CentOS ~]# ./validate_IP.sh 172.16.8.128
Valid
[root@CentOS ~]# ./validate_IP.sh 172.16.256.128
Invalid
[root@CentOS ~]# ./validate_IP.sh 172.16.008.128
Valid
Valid
[root@CentOS ~]# ./validate_IP.sh 172.16.256.128
Invalid
[root@CentOS ~]# ./validate_IP.sh 172.16.008.128
Valid
172.16.008.128에서 008은 올바른 IP 형식이 아니지만, 정규표현식 [0-9]{1,3} 조건도 만족하고, [ $NUM -ge 0 ] && [ $NUM -le 255 ] 조건도 만족하기 때문에 Valid로 나온다.
따라서 이 점을 보완해 아래와 같이 만들어 보았다.
validate_IP(){
if [[ $1 =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
then
for NUM in `sed 's/\./ /g' <<< $1`
do
if [ $NUM -ge 0 ] && [ $NUM -le 255 ] && [[ ! $NUM =~ ^0[0-9]{1,2}$ ]]
then
continue
else
echo "Invalid"
return 1
fi
done
echo "Valid"
return 0
else
echo "Invalid"
return 1
fi
}
if [[ $1 =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]
then
for NUM in `sed 's/\./ /g' <<< $1`
do
if [ $NUM -ge 0 ] && [ $NUM -le 255 ] && [[ ! $NUM =~ ^0[0-9]{1,2}$ ]]
then
continue
else
echo "Invalid"
return 1
fi
done
echo "Valid"
return 0
else
echo "Invalid"
return 1
fi
}
이번에는 0으로 시작하는 경우 2자리나 3자리가 되지 않도록 처리하였다. 따라서 아래와 같이 172.16.008.128도 잘 잡아낼 수 있었다.
[root@CentOS ~]# ./validate_IP.sh 172.16.008.128
Invalid
Invalid
그런데... 실컷 검증 스크립트를 짜놨더니 허탈한 일이 생겼다. 바로 ipcalc의 존재를 알아버렸다는...
레드햇 계열의 ipcalc는 -c 옵션으로 IP 형식의 유효성을 검증할 수 있다. 아무 말도 안 나오면 정상이고, 잘못된 IP를 넣으면 아래와 같이 에러를 출력한다.
[root@CentOS ~]# ipcalc -c 172.16.8.128
[root@CentOS ~]#
[root@CentOS ~]# ipcalc -c 172.16.256.128
ipcalc: bad IPv4 address: 172.16.256.128
[root@CentOS ~]#
[root@CentOS ~]# ipcalc -c 172.16.008.128
ipcalc: bad IPv4 address: 172.16.008.128
[root@CentOS ~]#
[root@CentOS ~]# ipcalc -c 172.16.256.128
ipcalc: bad IPv4 address: 172.16.256.128
[root@CentOS ~]#
[root@CentOS ~]# ipcalc -c 172.16.008.128
ipcalc: bad IPv4 address: 172.16.008.128
뭐 그래도 위 스크립트가 나름 도움이 되었기를 바라며...
'리눅스' 카테고리의 다른 글
리눅스 ping 명령어 시간 출력 (2) | 2017.06.20 |
---|---|
CentOS 6 gcc 4.8 필요한 경우 (8) | 2017.05.21 |
CentOS 리눅스 아파치 2.4 설치 (5) | 2017.05.07 |
리눅스에서 ip 명령어로 IP 설정하는 방법 (6) | 2014.08.04 |
CentOS yum repository mirror 구축하기 (3) | 2014.06.19 |
리눅스 하이퍼쓰레딩(Hyper Threading) 활성화 확인 방법 (3) | 2014.06.15 |
리눅스 SSL 인증서 만료일 확인 (3) | 2014.05.28 |
리눅스 SSL 사설 인증서 생성하기 (1) | 2014.05.22 |
최근에 달린 댓글 최근에 달린 댓글