追捕文件WRY.DLL的浅显分析及程序示例 (转)[@more@]

大家都知道wry.dll这个文件吧,它就是一张全球的IP地址分配表,里边有IP地址对应的地理位置,利用这张表,可以轻松的根据你知道的IP查到它的地址位置.它虽然定义成了一个DLL文件,但是实际上它是一个数据库,这篇文章就是告诉大家它的结构,并且写一个查询的程序例子.如果你已经知道了,或者不屑知道这么简单的玩艺,呵呵,请离开.^_^

程序的主要思路很简单,根据IP或者HOST来逐条比较每条WRY.DLL中的数据,若符合条件,则显示信息.此程序必须有WRY.DLL文件.

wry.dll由若千条记录组成,既然是记录,那么它就有其结构,实际上每一条记录包含5个字段,分别是STARTIP(17),ENDIP(17),COUNTRY(16),LOCAL(54),THANK(23),括号里边的是该字段的长度,以字节为单位.各个字段的含义如下:

STARTIP: 一个IP地址段的起始地址
ENDIP: 一个IP地址段的终止地址
COUNTRY: 该地址段所在的国家
LOCAL: 该地址段所在的国家的具体位置
THANK: 此项信息的提供者

好了,既然知道了记录的结构,那么我们就可以定义它的数据结构如下:

struct _wry{
 char startip[17];
 char endip[17];
 char country[16];
 char local[54];
 char thank[23];
 };

接下来,知道了这个最重要的信息,我们就可以编写程序来根据IP或者是host来显示信息了.

但是,字符串的IP地址长度最长为15(xxx.xxx.xxx.xxx),而为什么记录中的startip和endip的长度都定义成17了呢?如果呢编写简单的程序来测试一些就知道,这两个字段的第一个字符都为空格,最后一个字符为NULL,真正的地址是从第二个字符开始的,即&(startip[1]),认识到这一点也非常重要.

此外,每条记录中的IP字符串长度都为15,即是11.123.11.2形式的IP串在里边的形式为011.123.011.002,那么如果不将要查询的IP串进行转化,比较起来就比较麻烦,因此需要由一个函数将IP串转化成15长度的标准格式.

还有,WRY.DLL文件中不是所有的记录都是如上的结构,特殊的就是第一个记录,经过测试,得知它的长度是320-128=192,而其它的所有记录的长度均为128.

最后一个问题就是如果单纯的这样查询比较:if(startip < 查询的i

好了,所有的需要注意的地方都提到了,下边就开始写程序吧.
写好的代码如下:
**********************************************************************************************
file://in wry.dll,the startip and endip format is :[ 000.000.000.000 ]
file://len = 17,and the first is BLANK and the last is NULL

#include
#include
#include
#include
#include

#pragma comment(lib,"ws2_32.lib")

struct _wry{
 char startip[17];
 char endip[17];
 char country[16];
 char local[54];
 char thank[23];
 };

struct _wry *wry;

char str[320];
char temp[16];
struct _wry maxw[10];
int count = 0;

char* convertip(const char* ip)
{
 char *temp2;
 int i,j;

strcpy(temp,"000.000.000.000");
 temp2 = (char*)malloc(strlen(ip));
 strcpy(temp2,ip);

j = strlen(temp2);
 for( i =0 ; i < j; i++)
 if(temp2[i] == '.')
 temp2[i] = '';

for(i = 0; i < 4; i++)
 {
 strncpy(&temp[i*4+3-strlen(temp2)],temp2,strlen(temp2));
 temp2 += strlen(temp2) +1;
 }

return temp;
}

int do_dis(const char *ip)
{
 
 if(strncmp(&(wry->endip [1]),ip,strlen(ip)) <= 0)
 return 0;

if(strncmp(&(wry->startip [1]),"000.000.000.000",15) == 0)
 return 0;

if(strncmp(&(wry->startip [1]),ip,strlen(ip)) <= 0)
 memcpy(&maxw[count++],wry,sizeof(struct _wry));
 
 return 1;

}

void main(int argc,char **argv)
{
 WSADATA wsd;
 struct hostent *h = NULL;
 FILE * fp = NULL;
 int i = 0;
 char cip[16];

if(argc != 2)
 {
 printf("usage %s [ip | host]n",argv[0]);
 return;
 }

if(WSAStartup(MAKEword(2,2),&wsd) != 0)
 return;
 if(.NET_addr(argv[1]) == INADDR_NONE)
 {
 if((h = gethostbyname(argv[1])) != NULL)
 strcpy(cip,inet_ntoa(*(struct in_addr*)h->h_addr));
 else
 {
 printf("resolve host to ip failedn");
 return;
 }
 }
 else
 strcpy(cip,argv[1]);
 convertip(cip);
 printf("n****************************************************n");
 printf("convert ip: %sn",temp);

if((fp = fopen("wry.dll","r")) == NULL)
 {
 printf("can not open file!");
 exit(0);
 }

while(!feof(fp))
 {

if( i == 0)
 {
 if(fread(str,sizeof(str) - 128,1,fp) != 1)
 {
 printf("read file errorn");
 exit(0);
 }
 else
 i = 1;

continue;
 }
 else
 if(fread(str,128,1,fp) != 1)
 {
 file://read end of file
 }

wry = (struct _wry*)str;
 
 wry->thank [23] = '';
 wry->local [53] = '';
 wry->country [15] = '';
 wry->endip [16] = '';
 wry->startip [16] = '';
 
 do_dis(temp);
 
 }

fclose(fp);
 WSACleanup();

if(count == 0)
 printf("not match found!n");
 else
 {
 printf("found %d match,and the best match as follows:n",count);
 printf("==========================n");
 printf("startip:%sn",maxw[--count].startip );
 printf("endip:%sn",maxw[count].endip );
 printf("country:%sn",maxw[count].country );
 printf("local:%sn",maxw[count].local );
 printf("****************************************************nn");
 }

}
***********************************************************************************************
此程序在windows 2000 和VC6.0下编译通过,编译好的程序和代码,以及WRY.DLL文件可以在地址

http://blldw.myetang.com/vc/hunt.zip下载.

感谢你看到了最后!^_^.
any problem please Mailto: mrh123@etang.com.

2002.7.28

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992093/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992093/

追捕文件WRY.DLL的浅显分析及程序示例 (转)相关推荐

  1. 位图文件(BMP)格式分析以及程序实现

    最近正在着手开发一个图片库,也就是实现对常见图片格式的度写操作.作为总结与积累,我会把这些图片格式以及加载的实现写在我的Blog上. 说到图片,位图(Bitmap)当然是最简单的,它Windows显示 ...

  2. 可执行程序dll的依赖分析,dll文件32/64区分,dll的搜索路径

    1.dll文件的依赖分析可以通过 使用64位的depends.exe查看你exe依赖的dll 2.32位dll和64位dll的查看 3.dll文件的搜索路径 作者:朱金灿 来源:http://blog ...

  3. “没有找到iliertutil.dll,因此这个应用程序未能启动。”文件拷贝 PE 或者 dos...

    当打开电脑时,出现如下提示:"windows任务管理器:taskmgr.exe--无法找到组件"的提示页面: 原因分析: 没有找到iertutil.dll或者iertutil.dl ...

  4. 编译asp.net文件为dll文件

    编译asp.net文件为dll文件 Asp.net不是asp的简单升级,而是微软.Net计划中的一个重要组成部分,它依托.Net的多语言与强大的类库支持,引进了服务端 HTML控件与WEB控件,自动处 ...

  5. VB控件注册 - 利用资源文件将dll、ocx打包进exe文件

    很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到     现在介绍一下使用资源文件,将dll.ocx打包进exe,点击直接注册的例子: ...

  6. 3601lpk.dll劫持病毒分析

    1.样本概况 1.1 样本信息 病毒名称:3601-lpk劫持病毒 所属家族:Trojan-DDoS.Win32.macri.atk MD5值:B5752252B34A8AF470DB1830CC48 ...

  7. 3601-lpk.dll劫持病毒分析

    文章目录 3601-lpk.dll劫持病毒分析 1.样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 1.4 样本行为概述 2.具体行为分析 2.1 主要行为 2.2 提取恶意代码 ...

  8. 库文件(.dll)的各个版本安装注意

    库文件安装方法 一.在运行某软件或编译程序时提示缺少.找不到****.dll等类似提示,根据系统情况选择对应的软件.根据系统的情况选择X86/X64,X86为32位电脑,X64为64位电脑.默认都是支 ...

  9. 学习使用资源文件[11] - DLL 中的资源文件

    本例将把一张 bmp 图片, 以资源文件的方式嵌入 dll, 然后再调用. 第一步: 建一个 DLL 工程, 如图: 然后保存, 我这里使用的名称都是默认的. 第二步: 建一个资源原文件, 如图: 编 ...

  10. .CS文件编译生成.DLL文件 .EXE文件(C#网络搜集)(转)

    如果没有VS用下面的办法 搜索csc.exe 打开cmd 转到csc.exe的文件夹 运行 csc /t:library N:\NET\cs\*.cs   N:\NET\cs\*.cs  是你的cs文 ...

最新文章

  1. MySQL 当记录不存在时insert,当记录存在时update
  2. 第一章计算机网络概述答案,第一章 计算机网络概述[3]
  3. JS高级——纯函数、柯里化(手写自动柯里化函数)、组合函数(手写自动组合函数)
  4. 使用磁盘为Linux添加swap
  5. 信息系统管理师备考指南
  6. windows7下制作苹果U盘启动盘
  7. android虚拟机注册微信,用安卓模拟器登微信号不被封的办法
  8. oracle database lite,Oracle Database Lite Client 10
  9. 机械原理复习试题及答案
  10. HTTP中常见的状态码代表的意思比如202、303、404、505、访问网络时有时经常见的状态,也是面试题中关于HTTP经常出现的
  11. 运算符优先级(总结)关于与的区别 ||与|的区别
  12. C语言入门阶段08:C语言指针
  13. CTR---DIN原理,及deepctr组网实现DIN
  14. 计算机组成原理-chp4-指令系统
  15. 国家税务总局全国增值税发票查验平台-1
  16. Ucinet三天写论文!北核科研网络精写
  17. Astah 9.0升级步骤(Widnows/Mac OS)
  18. Googlr VR SDK
  19. windows10 快速启动开启与关闭
  20. windows无法启动windows Defender Firewall服务,错误3:系统找不到指定的路径。

热门文章

  1. 游戏付费用户RFM分析案例
  2. 三位数除以两位数竖式计算没有余数_三位数除以两位数有余数竖式运算300题
  3. CMOS反相器的传输延时
  4. Android补间动画使用
  5. BOOST元状态机用户手册之三教程(Meta State Machine (MSM))(1)——基本前端及例程
  6. 长沙好吃的地方?这个好吃的地方你可能真的没来过
  7. css选择器的权值与优先规则
  8. 免费PDF翻译,不限页数,不限字数,保留排版
  9. 数据库kettle,datax,DBMigration,RazorSQL几款迁移工具使用感受(以及如何迁移表的结构如主键,索引,约束等)
  10. 推荐系统实践(三)ICF和UCF