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


    /****************************************************************** 
    ** 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 
        } 

    調用方式
                测试导出IP地址库#region 测试导出IP地址库 
                IPExport exp 
    = new IPExport(); 
                
    string toFile = @"D:\Work\PPTechStudio\ip.txt"
                
    string fromFile=@"E:\个人资料\IMTools\QQwryUpdate\QQWry.Dat"
                exp.SaveToText(toFile,fromFile); 
                
    #endregion 

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    软件工程第九周总结
    作为使用者对qq拼音输入法和搜狗输入法的评价
    关于编写Windows程序中启动兼容性问题
    软件工程第八周总结
    Java实验--关于课上找“水王”问题分析
    大道至简阅读笔记03
    家庭记账本-----一
    《人月神话》读后感----一到三章
    Java实现数据库与eclipse的连接
    流和文件
  • 原文地址:https://www.cnblogs.com/Athrun/p/824508.html
Copyright © 2020-2023  润新知