출처 : http://www.wssplex.net/TipnTech.aspx?Seq=448
이미 수많은 개발자 및 서버들에서 이용되고 있는걸 저도 한번 해봤습니다...^^ 샘플코드가 있으니 뭐 딱히 할꺼라론....
전세계의 IP 할당에 관련된 최신 데이터 베이스는 http://www.maxmind.com/ 에서 구할수가 있습니다. 물론 상용버젼도 있으나 Free 버젼도 일반적인 상황에서는 훌륭 합니다.
샘플코드 : http://www.maxmind.com/app/api
DB파일 : http://www.maxmind.com/download/geoip/database/GeoIP.dat.gz
특히 Linux 계열에서는 GeoIP 를 방화벽에서 컴파일을 통한 모듈 추가를 해서, 특히 중국측 IP 대역을 차단하는데 많이들 이용하는 것 같습니다.
iptables -A INPUT -m geoip ! --src-cc KR -j DROP
다음은, 예제 코드에 있는 내용중 일부 입니다.
using System.IO;
using System.Net;
string IpAddress = Request.UserHostAddress;
CountryLookup cl = new CountryLookup(Server.MapPath("/") + "GeoIP_200805.dat");
Literal_GeoIp.Text = cl.lookupCountryName(IpAddress);
샘플코드에 있는 클래스는 별도로 만들어도 상관 없고요...
public partial class CountryLookup 처럼 해도 되고,. 그대로 쓰면 됩니다.
IP 주소는 숫자형으로 변환을 해야 합니다.
private long addrToNum(IPAddress addr)
{
long ipnum = 0;
byte[] b = BitConverter.GetBytes(addr.Address);
for (int i = 0; i < 4; ++i)
{
long y = b[i];
if (y < 0)
{
y += 256;
}
ipnum += y << ((3 - i) * 8);
}
Console.WriteLine(ipnum);
return ipnum;
}
그외,. http://www.ip2nation.com/ 는 MySQL 에서 이용할수 있도록 덤프 파일을 제공하고 있는데요,. MySQL 을 이용하다면 DB 쿼리 방식도 괜찮을것 같고요..
$sql = 'SELECT
c.country
FROM
ip2nationCountries c,
ip2nation i
WHERE
i.ip < INET_ATON("'.$_SERVER['REMOTE_ADDR'].'")
AND
c.code = i.country
ORDER BY
i.ip DESC
LIMIT 0,1';
MSSQL 에다가 넣어서 할려면,. 위처럼 IP 주소 형식을 숫자형으로 변경해서 쿼리를 해줘야 합니다.
'Etc ( 기타 ) > Etc' 카테고리의 다른 글
JAVA에서 cmd 실행해서 wkhtmltopdf 실행방법 (0) | 2019.07.31 |
---|---|
[HP 노트북][윈도우 서버] 무선랜(와이파이)가 되지 않을 경우 확인방법 (0) | 2019.07.28 |
[toss 행운퀴즈] 우리카드 미니 제습기 (0) | 2019.07.26 |
[toss 행운퀴즈] 안다르 고맙데이 (0) | 2019.07.25 |
[excel] 셀에 email 주소만 입력 가능하게 하는 방법 (0) | 2019.07.21 |