首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 解析 QQWry.dat IP 數據庫並導出為文本文件

     編輯:關於C語言

專案背景

QQWry.dat 是純真 IP 數據庫的經典格式,廣泛用於 IP 地址歸屬地查詢。本文提供一個完整的 C# 類別 IPExport,可將該二進制數據庫解析並導出為可讀的文本文件。

核心類別結構

namespace PPTech.ESP.Component
{
    public class IPExport
    {
        // 私有字段:國家、地區、文件流、IP範圍等
        // 構造函數
        // 核心方法:SaveToText(string toFilePath, string fromFilePath)
        // 輔助方法:IntToIP, GetCountry, GetFlagStr, GetStr
    }
}

關鍵解析邏輯

1. 文件頭讀取

數據庫前 8 字節包含首條和末條記錄的起始偏移量,每條記錄固定 7 字節(4字節起始IP + 3字節國家/地區偏移)。

2. 記錄遍歷與解析

  • 讀取 7 字節記錄,解析起始 IP 和國家偏移
  • 根據偏移跳轉讀取結束 IP 和國家標誌位
  • 根據標誌位(1/2 表示重定向,其他直接存儲)遞歸讀取國家/地區字符串
  • 字符串編碼為 GB2312,雙字節字符需特殊處理

3. IP 整數轉點分十進制

private string IntToIP(long ip_Int)
{
    long seg1 = (ip_Int & 0xff000000) >> 24;
    long seg2 = (ip_Int & 0x00ff0000) >> 16;
    long seg3 = (ip_Int & 0x0000ff00) >> 8;
    long seg4 = (ip_Int & 0x000000ff);
    // 處理負數補碼...
    return $"{seg1}.{seg2}.{seg3}.{seg4}";
}

使用示例

IPExport exp = new IPExport();
string toFile = @"D:\Work\ip.txt";
string fromFile = @"E:\QQWry.Dat";
exp.SaveToText(toFile, fromFile);

注意事項

  • 需引用 System.IO, System.Text.Encoding
  • 大文件處理時注意內存佔用,建議使用流式讀寫
  • QQWry.dat 格式有多個版本,解析邏輯可能需微調
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved