Convert Ip Address To Geographic Location
网上有不少关于如何使用纯真IP数据库(QQWRY.dat),来查找IP所在的地理位置的文档和源代码,但基本都是java实现,很少有C的,而且大部分都使用了打开文件句柄,通过文件指针的多次跳转来实现单次查找,运行效率很低,尤其是在短时间内需要执行大量IP->地理位置的转换的场合,这种方式的运行性能基本是难以接受的。
因此我写了一个c++的CIPSeeker类,该类在初始化时将qqwry.dat装载进内存,之后所有的查找都通过内存指针来进行。同时为了方便在其他脚本语言中提供IP地理位置查找功能(asp或者C#,vb等),另作了一个COM控件来包装这个类。
出于把问题简单化和性能上的考虑,该C++类不支持多线程并发。如果要在多线程环境下并发查找的话,为每个要使用IPSeeker功能的的线程创建一个单独的CIPSeeker的实例就可以了。封装的com控件使用apartment线程模式,所以不用担心多线程问题。
使用方法
先下载最新版本的纯真IP数据库,解压缩之后将QQWRY.dat拷贝到应用程序同一目录下(如果是使用com控件,拷贝到com控件所在的目录。
CIPSeeker theSeeker;
theSeeker.Create((HINSTANCE)GetModuleHandle(NULL));
char szLocation[256];
theSeeker.getIPLocation("202.101.103.55", szLocation, _countof(szLocation));
printf("the Location is:%s", szLocation);
theSeeker.Create((HINSTANCE)GetModuleHandle(NULL));
char szLocation[256];
theSeeker.getIPLocation("202.101.103.55", szLocation, _countof(szLocation));
printf("the Location is:%s", szLocation);
Set obj = server.CreateObject("IPToLocation.Seeker")
Response.Write( obj.GetLocation("202.101.103.55"))
Response.Write( obj.GetLocation("202.101.103.55"))
Revision History
- CIPSeeker 0.1: 初始化版本.
C++源代码
- IPSeeker.cpp (源文件)
- IPSeeker.h (头文件)
COM控件
- IPToLocation.dll (COM 控件)
- IPToLocation_Project(COM控件的项目源代码)
QQWry的官方网站是 http://www.qqwry.com
Plesea download for me IP Convert
非常感谢,正需要这个资料。
不错,省事,多谢