2011년 11월 21일 월요일

다수의 IP에 대해 Alive 유/무 쉽게 확인해 보기

패킷분석을 하다보면, 분석목적에 따라 다르겠지만 추출한 IP 주소에 대해서 추가적인 정보를 얻어야 하는 경우가 있다. WHOIS  정보가 될 수도 있고, 해당 IP 에 대한 포트 정보 또는 OS Fingerprint 를 통해 운영체제 추정등 다양한 정보를 얻기위해 시도해 볼 수 있다. 그중 대표적으로 한번쯤은 해보는 것이 해당 IP 에 대한 Alive 유무 체크일 것이다. 보통은 Ping 을 통해 확인을 한다. 그런데 한 두개의 IP 가 아니라 대량으로 테스트 해 보아야 한다면, 간단한 쉘 스크립트를 이용해서 쉽게 확인해보자.

여러 도구들이 있을텐데, 가장 기본적인 도구를 가지고 빠르게 확인하기 위해 테스트 해보았다. (필자도 필요에 의해)

일단, 아래와 같은 IP 주소를 라인별로 가지고 있다고 치자. tshark 등을 통해 IP 를 추출해 내었을 수도 있고, 어떤 방법이든지 확인해 보아야 할 IP 리스트를 라인별로 기록한 것이다.

# more ip.txt
[삭제].130.50
[삭제].10.99
[삭제].25.121
[삭제].56.99
[삭제].209.197
[삭제].85.76
[삭제].217.32
.
.

그리고 ping 에 의한 결과는 아래와 같다.

# ping [삭제].10.99
PING [삭제].10.99 ([삭제].10.99): 56 data bytes
64 bytes from [삭제].10.99: icmp_seq=0 ttl=114 time=13.271 ms
64 bytes from [삭제].10.99: icmp_seq=1 ttl=114 time=13.693 ms
64 bytes from [삭제].10.99: icmp_seq=2 ttl=114 time=13.790 ms
--- [삭제].10.99 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 13.271/13.584/13.790/0.262 ms

이렇게 Ping 에 의해 출력되는 정보를 가지고 간단하게 아래와 같이 구현해 보았다.

#./ip_chk.sh
Checking [삭제].130.50: is dead
Checking [삭제].10.99: is alive
Checking [삭제].25.121: is alive
Checking [삭제].56.99: is alive
Checking [삭제].209.197: is alive
Checking [삭제].85.76: is alive
Checking [삭제].217.32: is dead
Checking [삭제].89.169: is dead
Checking [삭제].77.102: is alive
Checking [삭제].216.69: is dead
Checking [삭제].109.240: is dead
Checking [삭제].65.226: is dead
.

해당 스크립트 내용을 살펴보면 아래와 같다.

$ more ip_chk.sh
# PacketInside.com
for host in `cat ip.txt`
do
        echo -n "Checking $host: "
        ping -q -c1 -w1 $host | grep transmitted |
        awk -F, '{if ($2 ~ /1 packets received/) print "is alive"; else print "is dead"; }'
done

ip.txt 에서 IP를 한 개씩 읽어 들이면서 $host 변수에 저장하고, ping 을 이용해 그 결과에 따라 Alive 또는 Dead 를 표시한다. ping -c1 은 한번만 카운트를 한다는 것이고, -w1 은 최대 Max Timeout 을 1초로 지정한 것이다. 즉, 1초 안에 Ping 에 대한 결과를 지정하는 것이다. 이후 출력되는 정보를 콤마(,) 로 구분하고 두번째 내용에 해당하는 1 packets received 가 패턴 매칭되면 Alive 라고 지정하는 것이다.  Ping 을 성공하였다면, 1 packets received 가 출력될 것이기 때문이다.

이상, 간단히 기본 명령어를 조합해서 다수의 IP 에 대해 Alive 유무를 체크해 보았다. 방법은 다양하게 있지만, 가급적 기본 도구를 이용하는 것이 분석 입장에서는 편할 수 있다. 분석을 수행할 컴퓨터가 바뀌더라도 어디서든 쉽게 적용해서 사용할 수 있기 때문이다.

간단하게 어떻게 하면 이용할 수 있을까 하고 고민해 보면,
쉽게 문제가 해결되기도 한다.

From Rigel

댓글 없음:

댓글 쓰기