⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qqip.c

📁 我搜集到的一个java常用类库的源代码
💻 C
字号:
/***********************************************QQWry.Dat ==> ip_arrange.txt 转换工具 参考 mok@smth的大作 《telnet下实现利用QQwry.dat进行ip查询》***********************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#define BYTE3INT(X)  (    ( X[0] & 0x000000FF ) \			| ( ( X[1] & 0x000000FF ) <<  8 ) \			| ( ( X[2] & 0x000000FF ) << 16 )  )#define BYTE4INT(X)  (    ( X[0] & 0x000000FF ) \			| ( ( X[1] & 0x000000FF ) <<  8 ) \			| ( ( X[2] & 0x000000FF ) << 16 ) \			| ( ( X[3] & 0x000000FF ) << 24 )  )struct INDEXITEM {	unsigned char ip[4];	unsigned char offset[3];};void getData(unsigned char* str, FILE* fp, int max){	int i = 0;	while ( (*(str+i)=fgetc(fp)) && (i<(max-2)) )		i++;	str[i] = 0;} int main(){	FILE *fp,*fpout;	unsigned headpos,tailpos;	int pos,curpos,offset,amount;	unsigned char buf[80],content[200];	struct INDEXITEM tmp;	fp=fopen("QQWry.Dat","r");	if(!fp){		printf("cannot open file QQWry.Dat!");		exit(0);	}	fpout=fopen("ip_arrange.txt","w");	if(!fp){		printf("cannot open file ip_arrange.txt!");		exit(0);	}	fread(&headpos,sizeof(headpos),1,fp);	fread(&tailpos,sizeof(tailpos),1,fp);	amount = (tailpos - headpos)/sizeof(struct INDEXITEM);//	printf("共有%d条记录.\n",amount+1);	for(offset=0;offset<=amount;offset++){		fseek(fp,headpos+offset*sizeof(tmp),SEEK_SET);		fread(&tmp,sizeof(tmp),1,fp);		//ip地址段开始		fprintf(fpout,"%03u.%03u.%03u.%03u ",tmp.ip[3],tmp.ip[2],tmp.ip[1],tmp.ip[0]);		pos = BYTE3INT(tmp.offset);		fseek(fp, pos, SEEK_SET);		fread(buf, 4, 1, fp);		//ip地址段结束		fprintf(fpout, "%03u.%03u.%03u.%03u ", buf[3], buf[2], buf[1],		buf[0]);		fread(buf, 1, 1, fp);		if ( buf[0] == 0x01 ) { // 国家地区均重复, 跳转至新地址			fread(buf, 3, 1, fp);			pos = BYTE3INT(buf);			fseek(fp, pos, SEEK_SET);			fread(buf, 1, 1, fp);		}		curpos=0;		// 获取国家		if ( buf[0] == 0x02 ) {			// 获取国家偏移			fread(buf, 3, 1, fp);			// 保存地区信息			curpos = ftell(fp);			pos = BYTE3INT(buf);			fseek(fp, pos, SEEK_SET);			fread(buf, 1, 1, fp);		}		if ( buf[0] == 0x01 || buf[0] == 0x02 ) {			printf("There is something wrong....\n");			return  -1;		}		if ( buf[0] )			getData(buf+1, fp, 60);		sprintf(content, "[%s]",strcmp(buf," CZ88.NET")?buf:"未知地址");		// 获取地区		if ( curpos )			fseek(fp, curpos, SEEK_SET);		fread(buf, 1, 1, fp);		while ( buf[0] == 0x02 ) {			// 获取地区偏移			fread(buf, 3, 1, fp);			pos = BYTE3INT(buf);			fseek(fp, pos, SEEK_SET);			fread(buf, 1, 1, fp);		}		if ( buf[0] == 0x01 || buf[0] == 0x02 ) {			printf("There is something wrong....\n");			return -1;		}		if ( buf[0] )			getData(buf+1, fp, 80);		//去掉这个CZ88.NET		if(strcmp(buf," CZ88.NET"))			strcat(content,buf);		//else		//	strcat(content,"未确定的地址");		//ip的位置		fprintf(fpout,"%s\n",content);	}	fclose(fp);	fclose(fpout);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -