한국인터넷진흥원(KISA)에서는
IP에 대한 할당 정보 검색 서비스를 제공한다.
(http://kisa.whois.or.kr)
참고로 IP조회라고 하면 실제 가입자를 알아낼 수 있는 것으로
착각하기 쉬우나 대부분 ISP 업체까지만 확인된다.
자세한 내용은 아래 링크의 IP 주소 추적에 관한 오해를 참고하도록 하자
https://whois.kisa.or.kr/kor/whois/ipTrace.jsp



한두개의 IP에 대해서는 위 사이트에서 쉽게 조회가 가능하다.
하지만 수많은 IP에 대해 조회가 필요할 때
일일이 사이트에서 조회하기 힘들기 때문에
KISA에서는 WHOIS OPEN API를 제공한다
KISA WHOIS OPEN API를 Python으로 이용하는 방법을 알아보고자 한다.
1. Key 발급 받기

https://whois.kisa.or.kr/kor/whois/openAPI_KeyCre.jsp
위 링크에서 Key를 발급 받을 수 있다.
Key를 발급 받을 E-mail과 사용목적을 기재하면
E-mail로 Key를 받을 수 있다.
Key 인증 방법도 E-mail에 안내되어있다.
2. WHOIS OPEN API 사용법
WHOIS OPEN API는 HTTP 요청에 대한 응답으로 처리된다
기본적인 질의문은 다음과 같다
http://whois.kisa.or.kr/openapi/whois.jsp?query=IP주소&key=발급받은KEY값&answer=[xml,json]
위처럼 응답은 xml과 json 형태로 응답 받을 수 있다.
자세한 내용은 아래 링크의 사용안내서를 참고하자
http://whois.kisa.or.kr/kor/whois/helper.jsp
3. Python 코드 작성
import urllib.request
ip = '조회할 IP'
whois_key = '발급 받은 key'
query = "http://whois.kisa.or.kr/openapi/whois.jsp?query=" + ip + "&key="+ whois_key + "&answer=json";
request = urllib.request.urlopen(query).read().decode("utf-8")
print(request)
HTTP 질의문을 위 처럼 만들어 주고
urlopen을 이용하여 HTTP 요청을 하여보면
아래와 같은 결과를 얻을 수 있다.
아래 결과는 JSON 형태이므로 적절히 파싱해서 사용하면 된다.
{"whois":{"query":"119.xxx.xxx.xxx","queryType":"IPv4","registry":"KRNIC","countryCode":"KR","korean":{"ISP":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/11","servName":"KORNET","orgName":"주식회사 케이티","orgID":"ORG1600","addr":"경기도 성남시 분당구 불정로 90","zipCode":"13606","regDate":"20080226"},"techContact":{"name":"IP주소 담당자","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}},"user":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/24","netType":"CUSTOMER","orgName":"(주) 케이티","orgID":"ORG841145","addr":"서울특별시 도봉구 창동","zipCode":"132-040","regDate":"20150317"},"techContact":{"name":"IP주소 담당자","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}}},"english":{"ISP":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/11","servName":"KORNET","orgName":"Korea Telecom","orgID":"ORG1600","addr":"Gyeonggi-do Bundang-gu, Seongnam-si Buljeong-ro 90","zipCode":"13606","regDate":"20080226"},"techContact":{"name":"IP Manager","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}},"user":{"netinfo":{"range":"119.xxx.xxx.xxx - 119.xxx.xxx.xxx","prefix":"/24","netType":"CUSTOMER","orgName":"KT","orgID":"ORG841145","addr":"Chang-Dong Dobong-Gu Seoulteukbyeol-Si","zipCode":"132-040","regDate":"20150317"},"techContact":{"name":"IP Manager","phone":"+82-2-500-6630","email":"kornet_ip@kt.com"}}}}}