Discuz 5.0における無害なIPデータベースの読み取り機能の分析
Discuz 5.0 は独自の IP データを使用しなくなりましたが、Innocence IP データベースへのアクセスは少し面倒で、具体的な形式の分析については、次の 2 つのリンクを参照してください。他の言語での実装については、記事の最後にあるリンクを参照してください。
「Innocence IP データベース形式の詳細な説明」
リンク 1: http://blog.csdn.net/heiyeshuwu/archive/2006/05/12/725675.aspx
リンク 2: http://lumaqq.linuxsir.org/article/qqwry_format_detail.html
Innocent IP データベース公式 Web サイト: http://www.cz88.net/ip/
Innocent IP データベースのダウンロード: http:/ /update.cz88.net/soft/qqwry.rar
次の関数 conrvertip() は、Discuz!5_GBK/upload/include/misc.func.php パスにあります。 、詳しく読んで分析することができます。(読みやすくするために以下のコードに簡単な変更を加えました。コアは変更されていません)
<
//======== ======== ====================
//
// 関数: IP アドレスが実際のアドレスを取得する関数
/ / パラメータ: $ip - IP アドレス
// 作者: [Discuz!] (C) Comsenz Inc.
//
//=============== ========= ============
function Convertip($ip) {
//IP データ ファイル パス
$dat_path = 'QQWry.Dat ';
/ /IP アドレスを確認
if(!preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3 }$/", $ip)) {<> Return 'IP Address Error';
}
// IP データ ファイルを開きます
if (! $ Fd = @fopen ($ dat_path, 'rb ')) {
RETURN ' IP 日付ファイルが存在しないか、アクセスが拒否されました';
}
// 操作用に IP を分解し、整数を取得します
$ip =explode(' .', $ip);
$ipNum = $ip[0] * 16777216 $ip[1] * 65536 $ip[2] * 256 $ip[3]; // を取得します。 IP データインデックスの開始位置と終了位置
$DataBegin = fread($fd, 4);
$DataEnd = fread($fd, 4);
$ipbegin = implode('', unpack('L) ', $DataBegin));
if ($ipbegin < 0) $ipbegin = pow(2, 32)
$ipend = implode('', unpack('L', $DataEnd));
if($ipend < 0) $ipend = pow(2, 32);
$ipAllNum = ($ipend - $ipbegin) / 7 1;
$BeginNum = 0; 🎜> $EndNum = $ipAllNum;
//二分検索メソッドを使用してインデックス レコードから一致する IP レコードを検索します
while($ip1num>$ipNum || $ip2num<$ipNum) {
$Middle= intval(($EndNum $BeginNum ) / 2);
//ポインタをインデックス位置にオフセットし、4 バイトを読み取ります
fseek($fd, $ipbegin 7 * $Middle);
$ipData1 = fread($ fd, 4);
if(strlen($ipData1) < 4) {
fclose($fd);
'システム エラー'; }
//データを長整数に変換します。データが負の場合は、2の32乗を加算します。
$ip1num = implode('', unpack('L', $ipData1) );
if($ip1num < 0) $ip1num = pow(2, 32);
//抽出された長整数が IP アドレスより大きい場合は、次の整数の終了位置を変更しますcycle
if($ip1num > $ipNum) {
$EndNum = $Middle;
continue;
}
// 前のインデックスを取得した後、次のインデックスを取得します
$DataSeek = fread($fd, 3);
if(strlen($DataSeek)
return 'システム エラー'; DataSeek = implode('', unpack(' L', $DataSeek.chr(0)));
fseek($fd, $DataSeek);
$ipData2 = fread($fd, 4); 🎜> if(strlen($ipData2) < ; 4) {
$ip2num = implode('', unpack('L', $ipData2));
if($ip2num < 0) $ip2num = pow(2, 32); / 見つからないプロンプト不明
if($ip2num < $ipNum) {
if($Middle == $BeginNum) {
return ' 不明'; >}
$ Beginnum = $ MIDDLE;
}
}
// 以下のコードはめまぐるしく読みます、読まないでください、ゆっくり読んでください
$ ipflag = fread($fd , 1);
if($ipFlag == chr(1)) {
$ipSeek = fread($fd, 3);
if(strlen($ipSeek) fclose($fd);
return 'システム エラー';
}
$ipSeek = implode('', unpack('L', $ipSeek.chr(0))) ; fseek($fd, $ipSeek);
$ipFlag = fread($fd, 1);
}
if($ipFlag == chr(2)) {
$AddrSeek = fread($fd, 3);
if(strlen($AddrSeek)
fclose($fd);
return 'システム エラー'; ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3)
if(strlen( $AddrSeek2) < ; 3) {
unpack('L', $AddrSeek2.chr(0)));
fseek($fd, $AddrSeek2);
} else {
fseek($ fd, -1, SEEK_CUR);
}
while (($char = fread($fd, 1)) != chr(0))
$ipAddr2 .= $char; 🎜>
$AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
fseek($fd, $AddrSeek); while(( $char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;else {
fseek($fd, -1, SEEK_CUR);
while(($char = fread($fd, 1)) != chr(0))
$ipAddr1 .= $char;
$ipFlag = fread($fd, 1);
if($ipFlag == chr(2)) {
$AddrSeek2 = fread($fd, 3); (strlen($AddrSeek2) < 3) {
unpack('L', 2.chr(0)));
fseek($fd, $AddrSeek2); } else { 🎜> while (($char = fread($fd, 1)) != chr(0)){
$ipAddr2 .= $char; >
//最後に対応する置換操作を実行し、結果を返します
if(preg_match('/http/i', $ipAddr2)) {
$ipAddr2 = '';
}
$ipAddr = "$ipAddr1 $ipAddr2"; > $ipaddr = preg_replace('/CZ88.NET/is', '', $ipaddr);
$ipaddr = preg_replace('/^s*/is' , '', $ipaddr); ipaddr = preg_replace('/s*$/is', '', $ipaddr);
if(preg_match('/http/i', $ipaddr) | | $ipaddr == '') {
$ipaddr = '不明' }
return $ipaddr;
//== =========== ==========
//
// 呼び出し例 (非常に高速)
//
//= ============= ==========
echo Convertip('219.238.235.10')
//出力: 北京電信
echo Convertip('23.56.82.12') ;
//出力: IANA
echo Convertip('250.69.52.0')
//出力: IANA 予約アドレス
echo Convertip('238.69.52.0') ;
//出力: マルチキャスト用の IANA 予約アドレス
echo Convertip('192.168.0.1')
//出力: LAN 相手は自分と同じイントラネット内にあります
echo Convertip('255.255.255.255');
//出力: 2006 年 11 月 20 日の Innocence Network IP データ
?>

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











最近、軍事界は、米軍戦闘機が AI を使用して完全自動空戦を完了できるようになったというニュースに圧倒されました。そう、つい最近、米軍のAI戦闘機が初めて公開され、その謎が明らかになりました。この戦闘機の正式名称は可変安定性飛行シミュレーター試験機(VISTA)で、アメリカ空軍長官が自ら飛行させ、一対一の空戦をシミュレートした。 5 月 2 日、フランク ケンダル米国空軍長官は X-62AVISTA でエドワーズ空軍基地を離陸しました。1 時間の飛行中、すべての飛行動作が AI によって自律的に完了されたことに注目してください。ケンダル氏は「過去数十年にわたり、私たちは自律型空対空戦闘の無限の可能性について考えてきたが、それは常に手の届かないものだと思われてきた」と語った。しかし今では、

先週、社内の辞任と社外からの批判が相次ぐ中、OpenAIは内外のトラブルに見舞われた。 - 未亡人姉妹への侵害が世界中で白熱した議論を巻き起こした - 「覇権条項」に署名した従業員が次々と暴露 - ネットユーザーがウルトラマンの「」をリストアップ噂の払拭: Vox が入手した漏洩情報と文書によると、アルトマンを含む OpenAI の上級幹部はこれらの株式回収条項をよく認識しており、承認しました。さらに、OpenAI には、AI セキュリティという深刻かつ緊急の課題が直面しています。最近、最も著名な従業員2名を含むセキュリティ関連従業員5名が退職し、「Super Alignment」チームが解散したことで、OpenAIのセキュリティ問題が再び注目を集めている。フォーチュン誌は OpenA を報じた。

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

70B モデルでは、数秒で 1,000 個のトークンを生成でき、これはほぼ 4,000 文字に相当します。研究者らは Llama3 を微調整し、高速化アルゴリズムを導入しました。ネイティブ バージョンと比較して、速度は 13 倍高速になりました。速いだけでなく、コード書き換えタスクのパフォーマンスは GPT-4o をも上回ります。この成果は、人気の AI プログラミング成果物 Cursor を開発したチーム、anysphere によるもので、OpenAI も投資に参加しました。有名な高速推論アクセラレーション フレームワークである Groq では、70BLlama3 の推論速度は 1 秒あたり 300 トークンを超える程度であることを知っておく必要があります。 Cursor の速度により、ほぼ瞬時に完全なコード ファイル編集を実現すると言えます。カースと言うと良い奴だと言う人もいる

Llama3 はオープンソースの堂々たる王様ですが、オリジナルのコンテキスト ウィンドウはわずか... 8k で、「とても良い匂いがする」という言葉を飲み込みました。現在、32k が開始点であり、100k が一般的ですが、これはオープンソース コミュニティへの貢献の余地を残す意図があるのでしょうか?オープンソース コミュニティは確かにこの機会を逃しませんでした。わずか 58 行のコードで、Llama370b の微調整されたバージョンは自動的に 1048k (100 万) コンテキストに拡張できるようになりました。舞台裏には、適切なコンテキストを拡張する Llama370BInstruct の微調整バージョンから抽出された LoRA があり、ファイルはわずか 800 MB です。次に、Mergekit を使用すると、同じアーキテクチャの他のモデルで実行したり、モデルに直接マージしたりできます。 1048k コンテキストが使用される
