(10101101)173/WINDOWS2009. 3. 8. 16:31
UNIX계열에서 grep이란 명령어를 |(파이프)뒤에 붙여 사용하면 보고싶은 단어만 골라 볼 수 있습니다.

보통 UNIX계열에서 ps, netstat 같은 명령어로 서버에서 작동중인 프로세스와 네트워크 상태를 확인 합니다. 이때 grep 명령어를 붙여 확인하고 싶은 프로세스나 확인하고 싶은 포트만 확인 합니다.

가령 예를 들어 netstat명령어를 통해 22번(SSH) 포트를 확인해 보자고 한다면 다음과 같이 입력하면 됩니다.

[solaris10vm:/]# netstat -an | grep :22
tcp               0          0 0.0.0.0:22                    0.0.0.0:*                    LISTEN

그러면 위와 같이 22번 포트가 LISTEN 표시 됩니다. 즉 22번 포트가 개방되어 있다고 나와 있습니다.

만약 "| grep :22"라고 하지 않았다면 개방되어 있는 모든 포트 목록(LISTEN), 사용중인 모든 포트 목록(ESTABLISHED), 사용후 일정시간 기다리고 있는 목록(TIME_WAIT), 일정시간이 지나 없어질 목록(CLOSE)이 모두 보이게 됩니다.

하지만 이런 기능이 윈도우에도 있습니다. 명령어가 틀릴뿐 사용법은 UNIX와 비슷합니다.

UNIX와 동일한 netstat명령어를 통해 윈도우에서 SMB서비스를 담당하는 445포트만 확인해 보겠습니다.

[그림 1. LISTEN 445 포트]

그림과 같이 445포트가 개방중에 있다고 나와 있습니다.

이 방법을 모르던 필자도 예전에는 "netstat -an" 명령어를 입력 후 LISTENING포트를 일일이 센다거나 TCP_VIEW같은 프로그램을 이용해 확인했지만 옛날 이야기가 되었습니다.

사용법을 비교해 보도록 하겠습니다.

OS 동일한 명령 구문 명령 구문
UNIX netstat -an | grep :22
WINDOWS find ":445"
[표 1. 명령어]

UNIX나 윈도우나 "netstat -an |"명령 부분은 동일 합니다. 단지 |(파이프)뒤에 오는 명령어가 UNIX계열에서는 grep이고 윈도우에서는 find에 차이일뿐 입니다. 한가지 주위해야 할 점은 윈도우에서 find이후 찾을 단어가 "[찾을단어]" 이와 같이 큰따옴표안에 들어와 있어야 합니다. UNIX계열도 마찬가지 이지만 생략가능하며 윈도우일 경우 큰따옴표생략시 아래와 같이 오류가 발생 합니다.

[그림 2. 명령어 오류]

그림 1 에서는 윈도우 명령어 중간에 "find /i"라고 되어 있는대 여기서 "/i"옵션은 대소문자를 가리지 않는다는 의미 입니다. UNIX계열에서도 "-i"옵션으로 동일한 효과를 낼 수 있습니다.

하지만! find명령어 외에 더 강력한 명령어가 있는대 바로 findstr명령어 입니다. 명령프롬프트(cmd)에서 help명령어를 통해 help find와 help findstr을 처보면 findstr일 더 많은 옵션과 세부적인 기능을 가지고 있는걸 알수 있습니다. 또한 find명령어 에서는 찾으려는 문자열을 큰따옴표로 정확하게 명시해줘야 하지만(find ":445") findstr에서는 큰따옴표를 생략가능 합니다.

[그림 3. findstr명령어]

이와 다르게 UNIX계열에 grep을 가져다 사용하는 방법이 있는대 그방법은 Cygwin을 설치하면 Cygwin설치폴더 밑에 bin폴더에 grep.exe파일이 있는대 이 파일이 UNIX계열의 grep과 동일한 grep이라고 보시면 됩니다.
Posted by Special Alex