ホームページ バックエンド開発 PHPチュートリアル PHP 読み取り qqwry.dat IP アドレス データベース ファイル Program_PHP チュートリアル

PHP 読み取り qqwry.dat IP アドレス データベース ファイル Program_PHP チュートリアル

Jul 20, 2016 am 11:11 AM
php 導入 について コンテンツ 住所 データベース 書類 記事 プログラム 読む

この記事では、まず qqwry.dat のファイル コンテンツ構造を紹介します。次に、その特性に従って、qqwry.dat ip ライブラリのコンテンツを読み取って、必要なコンテンツを見つけることができます。

まず、QQWry.Data ファイルのコンテンツ構造とその解釈方法を見てみましょう。

1. ファイル構造は主に 3 つの構造に分かれています
1. ファイルヘッダ、可変長
3. 長さは 7 の整数倍です。 2、ファイルヘッダー
ファイルヘッダーの8バイトは4バイトずつの2つの部分に分割され、それぞれインデックス領域の開始アドレスと終了アドレスを指定します。したがって、レコードの総数は、2 つのアドレスの差を 7 で割って 1 を加算することで計算できます。

2. 記録領域

この領域のデータは、インデックス領域のデータを通じて各データの開始位置を取得する必要があります。文字列の前には末尾を表す 0×00 が付きます。

3. インデックス領域

IP に対応する領域を取得するには、IP 開始アドレスに対応するインデックス コンテンツを見つけることが重要です。 IP インデックス データには 7 バイトが含まれており、最初の 4 バイトは IP アドレスの開始値、最後の 3 バイトは IP データ レコード内の対応する IP データ レコードのオフセット アドレスです。スタンザは IP 終了アドレスで、それに続くデータには 0x01 パターンと 0x02 パターンの 2 つのパターンがあります。

0x01 モード、つまり、IP データの 5 番目のバイトは 0x01 で、次の 3 バイトは国と地域のデータのオフセット アドレスです。国と地域のデータには、国と地域の 2 文字が含まれます。地域文字列。それは

————————————————————
4 バイト | 3 バイトのリダイレクト 0x NN NN NN -> 国と地域のデータのファイル オフセット アドレスです

— ——— —————————————————


0×02モード、つまりIPデータの5バイト目が0×02で、次の3バイトが0×02のオフセットアドレスです。国別データ、地域別データは 0x00 で終わる次の文字列です。つまり、
————————————————————————–
4 バイト | 3 バイト リダイレクト 0x NN NN NN -> 国内データ移行のファイル バイアス住所 | 地域文字列 | 0×00

——————————————————————————–


0で取得した国と地域のデータ×01 モード、つまり、
————————————–
国文字列 0×00

—————— — —————–

または
————————————————————————-
各国文字列 | 0×02 |セクション 0x NN NN NN -> 領域文字列のファイルオフセットアドレス
——————————————————————————-

前者の場合、これは比較的単純で、2 つの文字列データを直接読み取るだけです。後者の場合は、地域文字列のオフセット アドレスに再度リダイレクトしてから、文字列の末尾として 0x00 を読み取る必要があります。

実際の文字列値をアドレスによってマッピングするこの方法の主な機能は、文字列値の繰り返しの記録を避けることです。 IP アドレス ライブラリ ファイル全体に同一の文字列レコードが多すぎます。3 バイトのマップされたアドレスを使用すると、文字列値を繰り返し記録するよりも多くのスペースが節約されます。

PHP コード読み取り操作 QQWry.dat ファイル:

コードは次のとおりです

コードをコピーします function bin2ip($bin){ $ip = ''; $bd = str_split( $bin, 1);
for($i = 4; $i > 0; $i--){

$ip .= "." .implode('', unpack(' s', $bd[$i-1] . chr(0))));
}
return substr($ip, 1);
}

//----------- --- ----------------------------------
$f = fopen('QQWry.Dat', ' r' );
$c = fread($f, 4);

$d = fread($f, 4);

$index_begin = implode('', unpack('L', $c));
$index_end = implode('', unpack('L', $d));
if($index_begin if($index_end

$ip_num = ($index_end - $index_begin) / 7 + 1;

echo "インデックスの開始位置: $index_beginn";
echo "インデックスの終了位置: $index_endn";
echo "IP データ数 : $ip_numn";

$output = '';

for($i = 0; $i < $ip_num; $i++){

//ファイル ポインタは、インデックス データ (7 バイト) を取得するための各 IP データ ファイルのインデックスを指します
fseek($f, $i * 7 + $index_begin); $ ip4 = fread($f, 4); //IP 開始アドレス
if(strlen($ip4)

$ip3 = fread($f, 3); //IP レコード オフセット アドレス

if(strlen($ip3)

$dataseek = implode('', unpack('L', $ip3 . chr(0 ) ));

if($dataseek < 0) $index_ip_record += pow(2, 32);

//レコードを見つけるためにレコード領域 $dataseek の場所をポイントします

fseek($f, $dataseek);
$ipdata = fread($f, 4); //IP 終了アドレス
if(strlen($ipdata)

$area = '';

$country = ' ';

//フラグビットを読み取ります

$flag = fread($f, 1);
if($flag == chr(1)){ //国名オフセットフラグビットパターン 1 0x01
$area1seek = fread ($ f, 3);
if(strlen($area1seek) $area1seek = implode('', unpack('L', $area1seek . chr(0) )) ;
fseek($f, $area1seek);
$flag = fread($f, 1); //別のフラグビットである可能性があります
}
if($flag == chr(2)){ //国と地域は重要です 向き
$area1seek = fread($f, 3);
if(strlen($area1seek) < 3) exit('データ ファイル エラー');
$area1seek = implode('', unpack( 'L', $ area1seek . chr(0)));
$flag = fread($f, 1);
if($flag == chr(2)){
$area2seek = fread($f, 3) ;
$area2seek = implode('', unpack('L', $area2seek . chr(0)));
fseek($f, $area2seek);
}else{
fseek($f, -1, SEEK_CUR) );
}
while(($c = fread($f, 1)) != chr(0)) $area .= $c;
fseek($f, $area1seek);
while(($c = fread($f, 1)) != chr(0)) $country .= $c;
}else{
fseek($f, -1, SEEK_CUR);
while(($c = fread($f, 1)) != chr(0)) $country .= $c;

$flag = fread($f, 1); //エリアがリダイレクトされる場合

if($flag == chr(2)){
$area2seek = fread($f, 3);
$area2seek = implode('', unpack('L', $area2seek . chr(0)));
fseek($f, $area2seek);
}else {
fseek( $f, -1, SEEK_CUR);
}
while(($c = fread($f, 1)) != chr(0)) $area .= $c;
}
$adata = rim($country ) .trim($area); //$country は国文字列、$area は地域文字列です
}
fclose($f);

この関数はファイル操作です関連機能 (必要な友達は fopen、fseek、fread などを参照できます)。


http://www.bkjia.com/PHPjc/444691.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/444691.html技術記事この記事では、まず qqwry.dat のファイル コンテンツ構造を紹介します。次に、その特性に従って、qqwry.dat ip ライブラリのコンテンツを読み取って、必要なコンテンツを見つけることができます。 まず、QQWry.Data ファイルを見てください...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? クロスサイトリクエストフォーファリー(CSRF)とは何ですか?また、PHPにCSRF保護をどのように実装しますか? Apr 07, 2025 am 12:02 AM

PHPでは、予測不可能なトークンを使用して、CSRF攻撃を効果的に防ぐことができます。特定の方法には次のものが含まれます。1。フォームのCSRFトークンを生成および埋め込みます。 2.リクエストを処理するときにトークンの有効性を確認します。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

See all articles