리눅스 bash 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
}


그런데 위 함수에는 아래와 같은 문제가 있다.

[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


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
}


이번에는 0으로 시작하는 경우 2자리나 3자리가 되지 않도록 처리하였다. 따라서 아래와 같이 172.16.008.128도 잘 잡아낼 수 있었다.

[root@CentOS ~]# ./validate_IP.sh 172.16.008.128
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


뭐 그래도 위 스크립트가 나름 도움이 되었기를 바라며...
신고
Share
  1. 처리Kim
    2014.06.20 13:48 신고

    요즘은 자주 개시물을 올리시네요.
    잘 보고 갑니다.

    • BlogIcon snpbox
      2014.06.20 22:12 신고
      수정 및 삭제

      요즘 살짝 여유가 생겨서 올려봤습니다. 이러다 또 바빠지면 잠수 탈 듯 ㅋ

  2. 왕초보에요
    2014.06.20 20:19 신고

    자주는 아니지만 아주 가끔씩 들러봅니다. 몇년전 스누피님이 말씀하길 앞으로 초보분들 위주로
    블로그를 운영할 생각이다라고 분명히 말하고는 그 사이 취직도 하시고 포스팅이 예전보다 줄어든것은
    이해하지만 전문성을 요하는 포스팅이 주류를 이루고 있습니당,적어도 왕초보인 제가 보기는 그렇다고요 리눅스도 꽤 언급하시는데 도무지 리눅스가 그리 대단한지 모르겠군요.
    좀더 많은 초보들이 방문하여 예전처럼 유익한 정보 좀 실어주시와용..예로들면 윈도우 8.1의 기능 과 시정되어야할 단점이라든가 달라진 백업 복원 기능 기존의 윈도우7보다 성능이 우월하고 편하다 하는데 저는 도무지 모르겠네요 포스팅 일일이 읽어보지않고 뒷북인지 몰라도 왕초보들이 알기쉽게 윈도우 8.1기능과 설명 자세히 좀 실어주세용

    • BlogIcon snpbox
      2014.06.20 22:35 신고
      수정 및 삭제

      제가 그 당시엔 20대였고 대학생이라 열정적으로 블로깅을 했었는데, 직장생활 시작하면서 몸도 피곤하고 여유시간도 부족해져 블로그와는 점점 멀어지게 되었습니다. 더욱이 결혼까지 하고 올해는 아이까지 출산하게 되었으니 더더욱 블로그를 할 여유시간이 없어졌습니다. 그나마 가끔 생기는 여유시간에 업무 관련(리눅스, 윈도우 서버) 글을 정리해서 올리는 정도이니... 아무래도 초보 분들을 위한 친절한 가이드는 올리기 힘들 것 같습니다.(마음적 시간적 여유가 없어서...) 양해 바랍니다.

  3. 느린지니
    2014.06.23 15:46 신고

    저도 필요할 때마다 스누피님의 블로그를 방문한답니다. 많은 도움이 되었었고 지금도
    옛날 게시물들을 보면서 여전히 도움을 얻고 있습니다.
    바쁘시다고 사이트를 폐쇄하지 않고 간간히 글을 올려서 사이트가 살아있게 해 주시니
    감사하죠. 지금 글은 제게 별로 필요하지는 않지만... 예전 것들은 정말 유용한 것들이
    너무 많았습니다. 몇년이 지난 후에도 지금까지 여전히요. ㅋㅋㅋ
    요새 올리는 글들도 제게 유용하게 될 날이 있으면 좋겠네요.
    올리는 글의 지식 수준도 엄청났지만 수많은 댓글들에 달아 주시는 친절한 답변들에
    정말 감동했었답니다.

    저도 잠시 방문했다가 주절주절 했습니다. ^_^

    행복한 가정 이루세요.

  4. BlogIcon 명섭이
    2014.06.24 01:14 신고

    간만에 들렀어요.
    여전히 좋은 정보 공유해주고 계시는 것 보니 좋네요^^
    잘 보고 갑니다.

  5. BlogIcon 아름다움 브로셔
    2014.06.27 11:19 신고

    나는 올바른 정보,이 좋은 기사를 공유하는 저자의 감사를 찾고 있어요.

  6. 테돌아이
    2014.07.01 14:28 신고

    질문이 있어 이곳에 글을 올립니다.

    Dell PowerEdge T420
    RAID 컨트롤러는 PERC H710
    를 사용하고 있습니다.

    그런데 윈도우7 VHD 만들어 설치를 했는데 부팅과정에서 계속 재부팅이 됩니다.
    서버컴퓨터에는 VHD 만들어 설치가 불가능한가요?

  7. BlogIcon jlotto
    2014.07.03 15:20 신고

    당신 이 글 이다 http://www.alotto.kr

  8. 왕초보예요
    2014.07.03 22:33 신고

    윈도우 8.1 설치해서 톡톡히 골치를 앟았네요. 뭐 지식을 갖춘분들이야 별것 아니겠지만
    저 처럼 초보자들은 백업이나 복구가 어디에 붙었는지 진땀을 빼면서 인터넷을 헤집고 며칠을 헤메도 완전한 해결책을 찾을만한 포스팅 하나 발견치 못했습니다. 제가 머리가 둔해서인지 몰라도 백업 하고 복구 드라이버 만들고 거기까진 어떻게 하다보니 성공했는데 USB 복구 드라이버를 인식하지 못하는 원인을 찾는데 또 절망하는데 그 문제에 대한 해답은 어디에도 찾지 못한채 지금은 USB는 버리고 윈도우 설치 CD를 넣고 복구하는 정도에 머물러 있습니다. 그나 저나 스누피님 나중에 초보자들과는 전혀 거리가 먼 리눅스에 관한 글 준비하시나 킬킬 윈도우에서 usb 부팅 인식이 안되는 원인이 뭔지 하드웨어 문제라던가 고수님 중에 누가 좀 알려주시면 감사하지요

    • 느린지니
      2014.07.08 07:41 신고
      수정 및 삭제

      윈8.1 복구하는 USB를 만든 것만 안되는 것인가요?
      돌아다니는 윈7 만능고스트 파일로 부팅USB만들어도
      인식 못하는 것인가요? 첫번째 문제라면 잘 모르겠고
      다른 부팅USB도 모두 인식못한다면...
      제 경험에 USB 3.0포트에서는 안되고 USB2.0 포트에서는
      잘되는 경험을 몇번했었죠. USB3.0포트에서는 부팅까지
      되는데 만들어 넣은 고스트이미지를 찾을 수 없는거에요
      희한하죠... 그런 문제인지 모르겠지만... 도움이 될지?

      USB복구에 난관을 겪은 경우가 하나 더 있네요.
      GPT파티션에 설치된 경우 일반적으로
      MBR파티션 시스템에서 만든 고스트로 복구를 해도 부팅 실패
      하더군요. 그것은 GPT용으로 따로 만들어야 합니다...
      복구 성공해도 부팅안되더라구요.

  9. 왕초보예요
    2014.07.08 16:55 신고

    스누피님은 답변 안해주실거 같아 제가 댓글로 오시는 분들께도 도움을 요청했드랬습니다.
    주인장님께는 본의아닌 실례가 됐는지요? 느린지님 답변 늦게 보게 됐는데 큰 도움이 됐네요.
    해결은 못했지만 확실한 진단을 내려주신것 같아 감사말씀 드립니다.
    윈8.1복구드라이버를 만들었구요,만능고스트는 저는 안쓰는걸요,그 외 다른 종류의 USB는 모두 정상적인걸로 봐서는
    두번째에서 지적하신 문제인듯 합니다. 저는 생소하지만 MBR,GPT방식에서 아마도 파티션쪽에서 오류가 난듯하네요.
    저의 경우는 말씀하신데로 GPT용으로 만들면 해결책이 될까요? 컴퓨터에 320GB와 1TB 하드 두개를
    장착했는데 320GB는 2006년 출시된 좀 오래된 하드입니다. 최근에 1TB짜리를 저장용으로 추가하였지요.
    윈도우7에서는 비교적 익숙하게 백업 복구를 써왔지만 아무런 문제가 없었고 윈도우 8이 왠지 제가보긴 좀 까탈스러운듯 합니다.
    파티션문제는 메인 320GB하드를 최신걸로 교체하면 자동으로 고쳐질까요? 왜냐면 USB복구 드라이버를 다른
    GPT용으로 만들자면 또 공부를 해야하니 이제 머리가 욱씬거립니다 ㅎㅎ

<< Prev 1 ... 6 7 8 9 10 11 12 13 14 ... 794 Next >>