分享
 
 
 

导出QQWry.Dat中IP地址到文件[C#]

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

灵感之源语:“如果写个格式转换代码就更好了^_^”

既然如此,那……

下载CS文件:http://www.cnblogs.com/Files/rexsp/IPExport.rar

/**//******************************************************************

** File Name:IPExport.cs

** Copyright (c) 2004-2005 PPTech Studio(PPTech.Net)

** Creater:Rexsp(MSN:yubo@x263.net)

** Create Date:2004-12-29 20:10:28

** Modifier:

** Modify Date:

** Description:to export the ip location from qqwry.dat

** Version: IPExport 1.0.0

******************************************************************/

using System;

using System.Collections;

using System.Data;

using System.IO;

namespace PPTech.ESP.Component

{

/**//// <summary>

/// ExportData 的摘要说明。

/// </summary>

public class IPExport

{

私有成员#region 私有成员

private string country;

private string local;

private FileStream objfs = null;

private long startIp=0;

private long endIp=0;

private int countryFlag=0;

private long endIpOff=0;

#endregion

构造函数#region 构造函数

public IPExport()

{

//

// TODO: 在此处添加构造函数逻辑

//

}

#endregion

导出数据#region 导出数据

public void SaveToText(string toFilePath,string fromFilePath)

{

objfs = new FileStream(fromFilePath, FileMode.Open, FileAccess.Read);

objfs.Position=0;

byte[] buff1 = new Byte[8] ;

objfs.Read(buff1,0,8);

int firstStartIp=buff1[0]+buff1[1]*256+buff1[2]*256*256+buff1[3]*256*256*256;

int lastStartIp=buff1[4]*1+buff1[5]*256+buff1[6]*256*256+buff1[7]*256*256*256;

long recordCount=Convert.ToInt64((lastStartIp-firstStartIp)/7.0);

if(recordCount<=1)

{

country="FileDataError";

objfs.Close();

}

long rangE=recordCount;

StreamWriter writer=File.AppendText(toFilePath);

for(int i=0;i<=recordCount;i++)

{

long offSet = firstStartIp+i*7;

objfs.Position=offSet;

byte [] buff = new Byte[7];

objfs.Read(buff,0,7);

endIpOff=Convert.ToInt64(buff[4].ToString())+Convert.ToInt64(buff[5].ToString())*256+Convert.ToInt64(buff[6].ToString())*256*256;

startIp=Convert.ToInt64(buff[0].ToString())+Convert.ToInt64(buff[1].ToString())*256+Convert.ToInt64(buff[2].ToString())*256*256+Convert.ToInt64(buff[3].ToString())*256*256*256;

objfs.Position=endIpOff;

byte [] buff3 = new Byte[5];

objfs.Read(buff3,0,5);

this.endIp=Convert.ToInt64(buff3[0].ToString())+Convert.ToInt64(buff3[1].ToString())*256+Convert.ToInt64(buff3[2].ToString())*256*256+Convert.ToInt64(buff3[3].ToString())*256*256*256;

this.countryFlag=buff3[4];

string showIP=this.IntToIP(startIp);

this.GetCountry();

writer.WriteLine(showIP+" "+this.country+this.local);

}

writer.Close();

}

#endregion

int转换成IP#region int转换成IP

private string IntToIP(long ip_Int)

{

long seg1=(ip_Int&0xff000000)>>24;

if(seg1<0)

seg1+=0x100;

long seg2=(ip_Int&0x00ff0000)>>16;

if(seg2<0)

seg2+=0x100;

long seg3=(ip_Int&0x0000ff00)>>8;

if(seg3<0)

seg3+=0x100;

long seg4=(ip_Int&0x000000ff);

if(seg4<0)

seg4+=0x100;

string ip=seg1.ToString()+"."+seg2.ToString()+"."+seg3.ToString()+"."+seg4.ToString();

return ip;

}

#endregion

获取国家/区域偏移量#region 获取国家/区域偏移量

private string GetCountry()

{

switch(this.countryFlag)

{

case 1:

case 2:

this.country=GetFlagStr(this.endIpOff+4);

this.local=( 1 == this.countryFlag )?" ":this.GetFlagStr(this.endIpOff+8);

break;

default:

this.country=this.GetFlagStr(this.endIpOff+4);

this.local=this.GetFlagStr(objfs.Position);

break;

}

return " ";

}

#endregion

获取国家/区域字符串#region 获取国家/区域字符串

private string GetFlagStr(long offSet)

{

int flag=0;

byte [] buff = new Byte[3];

while(1==1)

{

//objfs.Seek(offSet,SeekOrigin.Begin);

objfs.Position=offSet;

flag = objfs.ReadByte();

if(flag==1||flag==2)

{

objfs.Read(buff,0,3);

if(flag==2)

{

this.countryFlag=2;

this.endIpOff=offSet-4;

}

offSet=Convert.ToInt64(buff[0].ToString())+Convert.ToInt64(buff[1].ToString())*256+Convert.ToInt64(buff[2].ToString())*256*256;

}

else

{

break;

}

}

if(offSet<12)

return " ";

objfs.Position=offSet;

return GetStr();

}

#endregion

GetStr#region GetStr

private string GetStr()

{

byte lowC=0;

byte upC=0;

string str="";

byte[] buff = new byte[2];

while(1==1)

{

lowC= (Byte)objfs.ReadByte();

if(lowC==0)

break;

if(lowC>127)

{

upC=(byte)objfs.ReadByte();

buff[0]=lowC;

buff[1]=upC;

System.Text.Encoding enc = System.Text.Encoding.GetEncoding("GB2312");

str+=enc.GetString(buff);

}

else

{

str+=(char)lowC;

}

}

return str;

}

#endregion

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有