Forráskód Böngészése

纯真IP库查询结果不准确时使用IPIP的IP库的值

admin 7 éve
szülő
commit
f6b360203d

+ 6 - 9
app/Components/IPIP.php

@@ -2,7 +2,7 @@
 
 namespace App\Components;
 
-use ipip\db\Reader;
+use ipip\db\City;
 
 class IPIP
 {
@@ -11,18 +11,15 @@ class IPIP
      *
      * @param string $ip IPv4
      *
-     * @return \ipip\db\Info|null
-     * @throws \Exception
+     * @return array|null
      */
-    public function ip($ip)
+    public static function ip($ip)
     {
         $filePath = storage_path('ipip.ipdb');
 
-        $db = new Reader($filePath);
-        //$loc = $db->find($ip);
-        //$loc = $db->findMap($ip);
-        $loc = $db->findInfo($ip);
+        $loc = new City($filePath);
+        $result = $loc->findMap($ip, 'CN');
 
-        return $loc;
+        return $result;
     }
 }

+ 1 - 1
app/Components/QQWry.php

@@ -13,7 +13,7 @@ class QQWry
      *
      * @return array
      */
-    public function ip($ip)
+    public static function ip($ip)
     {
         $filePath = storage_path('qqwry.dat');
 

+ 11 - 3
app/Http/Controllers/AuthController.php

@@ -3,6 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Components\Helpers;
+use App\Components\IPIP;
 use App\Components\QQWry;
 use App\Http\Models\Invite;
 use App\Http\Models\User;
@@ -732,9 +733,8 @@ class AuthController extends Controller
      */
     private function addUserLoginLog($userId, $ip)
     {
-        // 解析IP信息
-        $qqwry = new QQWry();
-        $ipInfo = $qqwry->ip($ip);
+        // 通过纯真IP库解析IP信息
+        $ipInfo = QQWry::ip($ip);
         if (isset($ipInfo['error'])) {
             Log::info('无法识别IP,可能是IPv6,尝试解析:' . $ip);
             $ipInfo = getIPv6($ip);
@@ -744,6 +744,14 @@ class AuthController extends Controller
             Log::warning("获取IP地址信息异常:" . $ip);
         }
 
+        // 判断是否与IPIP的IP库解析出来的信息一致,不一致则用IPIP的信息(因为纯真的非大陆IP正确率低)
+        $ipip = IPIP::ip($ip);
+        if ($ipInfo['country'] != $ipip['country_name']) {
+            $ipInfo['country'] = $ipip['country_name'];
+            $ipInfo['province'] = $ipip['region_name'];
+            $ipInfo['city'] = $ipip['city_name'];
+        }
+
         $log = new UserLoginLog();
         $log->user_id = $userId;
         $log->ip = $ip;

+ 1 - 2
app/Http/Middleware/isForbidden.php

@@ -31,8 +31,7 @@ class isForbidden
 
         $isIPv6 = false;
         $ip = getClientIP();
-        $qqWry = new QQWry();
-        $ipInfo = $qqWry->ip($ip);
+        $ipInfo = QQWry::ip($ip);
         if (isset($ipInfo['error'])) {
             $isIPv6 = true;
             Log::info('无法识别IP,可能是IPv6,尝试解析:' . $ip);