GeoIP 이용하기
어디에서 접속했는지 분석을 하기 위해 IP 수집을 합니다.
이것을 분석하기 위해서는 IP 와 지역을 매칭해야 합니다.
아래의 URL 에서 IP - 주소가 매핑된 데이터를 다운로드 할 수 있습니다.
https://dev.maxmind.com/geoip/
아래와 같이 여러가지 형식의 데이터를 받을 수 있습니다.
(하단에 free 라는 단어가 보입니다. )
https://dev.maxmind.com/geoip/geoip2/geolite2/
유료로 이용할 것이 아니면 무료 버젼을 이용하고 라이센스를 맞춰 줍니다.
LicenseThe GeoLite2 databases are distributed under the Creative Commons Attribution-ShareAlike 4.0 International License. The attribution requirement may be met by including the following in all advertising and documentation mentioning features of or use of this database: |
다운로드 합니다.
국가별 아이피를 다운받아서 압출을 풀면
GeoLite2-Country-Blocks-IPv4.csv, GeoLite2-Country-Locations-en.csv 두개를 조합해서 사용할 수 있습니다.
두개의 엑셀파일은 이렇게 생겼습니다.
geoname_id 를 조인하면 어느 나라의 IP 인지 알 수 있습니다.
그런데.. network 를 보니.. 서브넷 마스크를 사용하네요..
내꺼 아이피가 10.10.10.10 이라고 하면.. 대역대를 파악해서 어느 geoname_id 인지 확인을 해야 합니다.
(서브넷 마스크 : https://ko.wikipedia.org/wiki/%EB%B6%80%EB%B6%84%EB%A7%9D )
서브넷 마스크 계산을 하는 방법입니다.
예를 들면..
1.0.2.0/23 이라는 네트워크 대역이 있다고 하면..
어디부터 어디까지의 IP 가 속할 수 있을지 구해야 합니다.
2진수로 바꿔 보겠습니다.
원본 0000 0001 / 0000 0000 / 0000 0010 / 0000 0000
서브넷 1111 1111 / 1111 1111 / 1111 1110 / 0000 0000
(/31이 255.255.255.254 입니다. /30은 255.255.255.252입니다. 1비트씩 줄어든다고 보시면 됩니다. 그렇다면 /23은 255.255.255.252.0 입니다.)
원본과 서브넷을 AND 연산을 해보면 1.0.2.0 나옵니다.
서브넷을 리버스 하면 0000 0000 / 0000 0000 / 0000 0001 / 1111 1111
0.0.1.255 나옵니다.
AND 연산한 결과에 리버스한 결과를 더하면 1.0.2.0 + 0.0.1.255 = 1.0.3.255 이 됩니다.
따라서 1.0.2.0/23 네트워크 대역은 1.0.2.0 부터 1.0.3.255 까지 사용할 수 있습니다.
아이피를 "/" 으로 잘라서 서브넷 마스크 구하고 아이피에 서브넷 마스크를 연산한걸 더해서 사용가능 아이피 대역을 구할 수 있습니다.
(한개만 있어서 대역대 계산기를 이용하지 않는 경우에는 위의 계산식을 이용해서 자동으로 계산되게 만들어야 합니다.)
계산된 대역을 시작과 끝을 저장하고 그 나라까지 한개의 테이블로 저장해 놓으면 범위 검색으로 입력된 IP 의 나라를 구할 수 있습니다.
끝.