外贸SEO 发表于 2025-12-25 17:51:50

写一个IP转CIDR工具的代码 可根据需求修改获取数值

有些做网站需要用到cloudflare的加速服务,查看网站安全事件的时候,需要导出json的ip进行处理,比如复制ip到服务器防火墙进行设置屏蔽禁止这些ip访问,由于导出的文件是json格式文件,无法一键复制所有ip,在这里写一个代码获取json文件中的clientIP数值也就是IP,并且自动将IP地址转CIDR格式0/24,就是防火墙ip格式。支持一键复制。可根据需求自己修改,代码是php代码。
<!DOCTYPE html>
<html>
<head>
    <title>IP转CIDR工具</title>
    <style>
      body { font-family: Arial, sans-serif; margin: 20px; }
      .container { max-width: 1200px; margin: 0 auto; }
      table { border-collapse: collapse; width: 100%; margin: 20px 0; }
      th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
      th { background-color: #f2f2f2; }
      .ip-column { font-family: monospace; }
      .copy-btn {
            padding: 4px 8px;
            background: #4CAF50;
            color: white;
            border: none;
            cursor: pointer;
            border-radius: 3px;
      }
      .copy-btn:hover { background: #45a049; }
    </style>
</head>
<body>
    <div class="container">
      <h1>IP地址转CIDR格式</h1>
      
      <?php
      $url = 'json文件地址';
      $data = @json_decode(file_get_contents($url), true);
      
      if ($data && is_array($data)) {
            echo "<p>共找到 " . count($data) . " 条记录</p>";
            
            echo "<table>";
            echo "<tr>
                  <th>序号</th>
                  <th>原始IP地址</th>
                  <th>CIDR格式</th>
                  <th>国家</th>
                  <th>动作</th>
                  <th>操作</th>
                  </tr>";
            
            $cidrList = [];
            foreach ($data as $i => $item) {
                if (isset($item['clientIP'])) {
                  $originalIP = $item['clientIP'];
                  // 转换为CIDR
                  $cidrIP = preg_replace('/\.\d+$/', '.0/24', $originalIP);
                  $cidrList[] = $cidrIP;
                  
                  echo "<tr>";
                  echo "<td>" . ($i + 1) . "</td>";
                  echo "<td class='ip-column'>$originalIP</td>";
                  echo "<td class='ip-column'>$cidrIP</td>";
                  echo "<td>" . ($item['clientCountryName'] ?? '') . "</td>";
                  echo "<td>" . ($item['action'] ?? '') . "</td>";
                  echo "<td><button class='copy-btn' onclick=\"copyToClipboard('$cidrIP')\">复制</button></td>";
                  echo "</tr>";
                }
            }
            echo "</table>";
            
            // 去重后的CIDR列表
            $uniqueCIDRs = array_unique($cidrList);
            
            echo "<h2>唯一CIDR列表 (" . count($uniqueCIDRs) . " 个)</h2>";
            echo "<div style='background: #f5f5f5; padding: 15px; border-radius: 5px;'>";
            echo "<textarea id='cidrOutput' rows='10' style='width: 100%; font-family: monospace;'>";
            echo implode("\n", $uniqueCIDRs);
            echo "</textarea>";
            echo "<button onclick=\"copyAll()\" style='margin-top: 10px; padding: 8px 16px;'>复制所有CIDR</button>";
            echo "</div>";
      } else {
            echo "<p style='color: red;'>无法获取或解析JSON数据</p>";
      }
      ?>
      
      <script>
      function copyToClipboard(text) {
            navigator.clipboard.writeText(text).then(() => {
                alert('已复制: ' + text);
            });
      }
      
      function copyAll() {
            const textarea = document.getElementById('cidrOutput');
            textarea.select();
            navigator.clipboard.writeText(textarea.value).then(() => {
                alert('已复制所有CIDR地址');
            });
      }
      </script>
    </div>
</body>
</html>
在上面的代码中需要修改两处,双引号字符串内部的双引号需要转义(使用反斜杠\),否则PHP解析器会将它们误解为字符串的结束标记。修改如下图;

运行的php文件效果图片



页: [1]
查看完整版本: 写一个IP转CIDR工具的代码 可根据需求修改获取数值