IP 역추적 – WHOIS 만들기

IP 역추적에 빠질 수 없는 것이 바로 Whois일 것이다. 해당 IP의 위치를 확인하여 현재 공격한 IP가 어디에서 발생한 것인지 위치를 확인할 수 있는 근거가 바로 Whois이다.

하지만 실제 공격한 사람, 장소까지는 확인하지 못한다. 해당 IP가 좀비 PC일 수 도 있지만, IP에 대한 자세한 정보 역시 개인 정보와 같이 보호를 받는 정보이기에 이에 대한 조사를 진행하기 위해서는 경찰의 협조가 필요하기 때문이다.

불행 중 다행인지 국가별 IP 관리 기관에서 해당 IP를 관리하는 ISP(Internet Service Provider)를 제공하는데, 이를 통해 어느 지점에서 접근했는지를 확인할 수 있으며, IP를 기업에서 직접 관리할 경우 해당 기업체의 연락처와 주소 등 공격 근원지에 대한 지역 정보를 얻을 수 있다.

국내 IP의 경우 KISA(Korea Internet & Security Agency, 한국 인터넷 진흥원)에서 관리하는데, http://whois.kisa.or.kr에 접근하면 확인하고자 하는 IP에 대해 관리하는 ISP 업체 정보를 알 수 있다.

[그림] IP정보를 확인할 수 있는 Whois

이 정보를 통해 확인하고자 하는 IP 위치를 어느 정도 유추할 수 있다. 이유인 즉 ISP 업체는 네트워크 트래픽의 감쇄(전류가 약해지는 현상)를 최소화하고 전송률을 높이기 위해 IP 제공 인근에 지역 지점식으로 설립하게 된다.

따라서 서울 내 어느 지역의 IP인지 대략적인 추측은 가늠할 수 있다.

[그림] 검색한 IP가 강남구 인근임을 확인할 수 있다

그리고 Whois에서는 대량의 IP에 대한 검색을 지원하는 OpenAPI를 제공하는데, 그것을 이용하여 대량 IP를 조사하는 도구를 만들 수 있다. 그럼 대량 IP를 조사할 수 있는 Whois 프로그램을 만들어 보도록 하자.

Whois 도구 개발에 필요한 소스코드는 다음과 같다.

whois.cs
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

// 웹 요청 와 XML 추출을 하기위해 사용할 라이브러리를 추가 한다.

using System.Web;

using System.Net;

using System.IO;

using System.Xml;

namespace Whois

{

class
Program

{

static
void Main(string[] args)

{

for (int i = 0; i < args.Length; i++)

{

try

{

string result = string.Empty;

// 웹 요청

string ip = args[i];

string KOR = “kr”;

Console.WriteLine(“검색 IP = “ + ip);

string url = “http://whois.kisa.or.kr/openapi/whois.jsp?query=” + ip + “&key=2012020122303096360675”;

HttpWebRequest request = WebRequest.Create(url) as
HttpWebRequest;

// 응답 처리

using (HttpWebResponse response = request.GetResponse() as
HttpWebResponse)

{

// XML로 변환

StreamReader reader = new
StreamReader(response.GetResponseStream());

result = reader.ReadToEnd();

XmlDocument doc = new
XmlDocument();

doc.LoadXml(result);

// XML 태그로 추출

XmlNodeList list1 = doc.GetElementsByTagName(“registry”);

XmlNodeList list2 = doc.GetElementsByTagName(“countryCode”);

XmlNodeList list3 = doc.GetElementsByTagName(“addr”);

string list22 = list2[0].InnerXml;

// 화면에 표시

Console.WriteLine(” 기관 = “ + list1[0].InnerXml);

Console.WriteLine(” 국가 = “ + list22);

// 해외 아이피에 대한 예외 처리

if (list22 == KOR)

{

Console.WriteLine(” 주소 = “ + list3[0].InnerXml);

}

else

{

Console.WriteLine(” 국내 IP가 아닙니다.”);

}

}

}

catch (WebException wex)

{

if (wex.Response != null)

{

using (HttpWebResponse errorResponse = (HttpWebResponse)wex.Response)

{

Console.WriteLine(“The server returned ‘{0}’ with the status code {1} ({2:d}).”, errorResponse.StatusDescription, errorResponse.StatusCode, errorResponse.StatusCode);

}

}

}

}

}

}

}

[예제] Whois Open API를 이용한 IP 검색 C# 프로그램

위 프로그램에서 해외 IP에 대한 예외가 필요한 이유는, 국가별로 존재하는 IP 관리 기관은 해당 국가에 대한 IP만 관리하기 때문에, addr 출력 부분에서 예외 상황이 발생하게 된다.

이를 방지하기 위해, kr이 아닌 이외의 국가 IP인 경우 국가 코드까지만 출력하도록 프로그래밍해주어야 한다. 위 프로그램을 컴파일 한 후 실행하면 아래와 같이 IP를 조회할 수 있다.

[그림] 국내 IP와 국내 IP가 아닌 경우에 대한 결과

이 외에도 http://ip.kisa.or.kr에 접속하면, 국내에서 사용되는 IP 주소 리스트를 확인할 수 있다. 이를 이용해서 인터넷이 되지 않는다거나, 네트워크 장비, 서버에서 직접 IP를 차단해야 할 경우 유용하게 사용할 수 있다.

[그림] 국내 IP보유 현황을 엑셀 파일로 제공

Facebook Comments

Leave A Reply

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.