whois.handle: SG-HOSTSYMBOL-20180102
whois.name: Hostsymbol Pte. Ltd.
whois.cidrs: 185.238.248.0/22
whois.created: 2024-02-26T00:00:00.000000
whois.updated: 2024-12-24T00:00:00.000000
whois.handle: ORG-HPL11-RIPE
whois.name: Hostsymbol Pte. Ltd.
whois.address: 68 Circular Road\n049422\nSingapore\nSINGAPORE
whois.handle: AR74114-RIPE
whois.name: Abuse-C Role
whois.email: abuse@hostdare.com
whois.handle: DA10628-RIPE
whois.name: Director
whois.email: admin@hostdare.com
services.protocol: SSH
services.transport_protocol: TCP
services.scan_time: 2025-07-28T03:37:19.237086
services.banner: SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u5
services.source: OSI_TRANSPORT_LAYER
services.part: o
services.product: linux
services.cpe: cpe:2.3:o:*:linux:*:*:*:*:*:*:*:*
services.value: remote-access
services.raw: SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u5
services.protocol_version: 2.0
services.software_version: OpenSSH_8.4p1
services.comment: Debian-5+deb11u5
services.kex_algorithms: curve25519-sha256 curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 diffie-hellman-group-exchange-sha256 diffie-hellman-group16-sha512 diffie-hellman-group18-sha512 diffie-hellman-group14-sha256 kex-strict-s-v00@openssh.com
services.host_key_algorithms: rsa-sha2-512 rsa-sha2-256 ssh-rsa ecdsa-sha2-nistp256 ssh-ed25519
services.client_to_server_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.server_to_client_ciphers: chacha20-poly1305@openssh.com aes128-ctr aes192-ctr aes256-ctr aes128-gcm@openssh.com aes256-gcm@openssh.com
services.client_to_server_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.server_to_client_macs: umac-64-etm@openssh.com umac-128-etm@openssh.com hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com hmac-sha1-etm@openssh.com umac-64@openssh.com umac-128@openssh.com hmac-sha2-256 hmac-sha2-512 hmac-sha1
services.client_to_server_compression: none zlib@openssh.com
services.server_to_client_compression: none zlib@openssh.com
services.kex_algorithm: curve25519-sha256@libssh.org
services.host_key_algorithm: ecdsa-sha2-nistp256
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.cipher: aes128-ctr
services.mac: hmac-sha2-256
services.compression: none
services.curve: P-256
services.hassh_fingerprint: 779664e66160bf75999f091fce5edb5a
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-28T04:14:13.754708
services.banner: HTTP/1.1 301 Moved Permanently
  Server: nginx
  Date:  <REDACTED>
  Content-Type: text/html
  Content-Length: 162
  Connection: keep-alive
  Location: https://185.238.250.107/
  
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: nginx
services.product: nginx
services.cpe: cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-28T04:14:13.754708
services.uri: http://185.238.250.107/
services.protocol: HTTP/1.1
services.status_reason: Moved Permanently
services.key: Location
services.headers: https://185.238.250.107/
services.key: Server
services.headers: nginx
services.key: Content-Type
services.headers: text/html
services.key: Date
services.headers: <REDACTED>
services.key: Connection
services.headers: keep-alive
services.key: Content-Length
services.headers: 162
services.html_tags: <title>301 Moved Permanently</title>
services.body: <html>
  <head><title>301 Moved Permanently</title></head>
  <body>
  <center><h1>301 Moved Permanently</h1></center>
  <hr><center>nginx</center>
  </body>
  </html>
  
services.body_hash_sha1: sha1:3adb1f02d5b6054de0046e367c1d687b6cdf7aff
services.supported_versions: HTTP/1.1
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-27T08:54:28.908012
services.banner: HTTP/1.1 200 OK
  Server: nginx
  Date:  <REDACTED>
  Content-Type: text/html
  Content-Length: 11044
  Last-Modified: Thu, 29 May 2025 09:32:43 GMT
  Connection: keep-alive
  ETag: "683829bb-2b24"
  Strict-Transport-Security: max-age=31536000; includeSubDomains
  Accept-Ranges: bytes
  
services.version_selected: TLSv1_3
services.cipher_selected: TLS_AES_256_GCM_SHA384
services.fingerprint_sha256: 9d7c3f1aa6ad2b2ec0d5cf1e246f8d9ae6cbc9fd0755ad37bb974b1f2fb603f3
services.subject_dn: C=US, O=Let's Encrypt, CN=R10
services.issuer_dn: C=US, O=Internet Security Research Group, CN=ISRG Root X1
services.ja4s: t130200_1302_a56c5b993250
services.version: TLSv1_3
services.ja4s: t130200_1302_a56c5b993250
services.version: TLSv1_2
services.ja4s: t120200_c030_344b4dce5a52
services.names: www.qwyaz.top
services.issuer_dn: C=US, O=Let's Encrypt, CN=R10
services.common_name: R10
services.country: US
services.organization: Let's Encrypt
services.subject_dn: CN=www.qwyaz.top
services.common_name: www.qwyaz.top
services.scan_time: 2025-07-16T19:31:52.205849
services.source: OSI_APPLICATION_LAYER
services.part: a
services.vendor: nginx
services.product: nginx
services.cpe: cpe:2.3:a:f5:nginx:*:*:*:*:*:*:*:*
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-27T08:54:28.908012
services.uri: https://185.238.250.107/
services.protocol: HTTP/1.1
services.status_reason: OK
services.key: Last-Modified
services.headers: Thu, 29 May 2025 09:32:43 GMT
services.key: Server
services.headers: nginx
services.key: Accept-Ranges
services.headers: bytes
services.key: Strict-Transport-Security
services.headers: max-age=31536000; includeSubDomains
services.key: Content-Type
services.headers: text/html
services.key: Date
services.headers: <REDACTED>
services.key: ETag
services.headers: "683829bb-2b24"
services.key: Connection
services.headers: keep-alive
services.key: Content-Length
services.headers: 11044
services.html_tags: <title>桃花深渊抽奖</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
services.body: <!DOCTYPE html>
  <html lang="zh-CN">
  <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>桃花深渊抽奖</title>
      <style>
          body {
              font-family: 'Arial', sans-serif;
              background: linear-gradient(135deg, #bfe9ff, #e0f7fa);
              margin: 0;
              height: 100vh;
              display: flex;
              justify-content: center;
              align-items: center;
          }
          .container {
              background: rgba(255, 255, 255, 0.9);
              padding: 40px;
              border-radius: 15px;
              box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
              width: 400px;
              text-align: center;
              position: relative;
          }
          h1 {
              color: #00bcd4;
              margin-bottom: 30px;
          }
          label {
              display: block;
              margin-bottom: 10px;
              color: #00bcd4;
              font-size: 18px;
          }
          input[type="text"],
          input[type="number"] {
              width: calc(100% - 22px);
              padding: 12px;
              margin-bottom: 20px;
              border: 2px solid #00bcd4;
              border-radius: 8px;
              font-size: 16px;
              color: #333;
          }
          .file-input-container {
              display: flex;
              justify-content: space-between;
              align-items: center;
              margin-bottom: 20px;
          }
          .file-input-textbox {
              width: calc(100% - 22px);
              padding: 12px;
              border: 2px solid #00bcd4;
              border-radius: 8px;
              font-size: 16px;
              color: #333;
              cursor: pointer;
          }
          button {
              padding: 15px 30px;
              border: none;
              border-radius: 8px;
              background-color: #00bcd4;
              color: white;
              font-size: 18px;
              cursor: pointer;
              transition: background-color 0.3s ease;
          }
          button:hover {
              background-color: #00acc1;
          }
          .modal {
              display: none;
              position: fixed;
              z-index: 1;
              left: 0;
              top: 0;
              width: 100%;
              height: 100%;
              overflow: auto;
              background-color: rgba(0, 0, 0, 0.5);
          }
          .modal-content {
              background-color: white;
              margin: 15% auto;
              padding: 20px;
              border-radius: 15px;
              box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
              width: 80%;
              max-width: 600px;
              text-align: center;
          }
          .close {
              color: #aaa;
              float: right;
              font-size: 28px;
              font-weight: bold;
              cursor: pointer;
          }
          .close:hover,
          .close:focus {
              color: black;
              text-decoration: none;
              cursor: pointer;
          }
          .result table {
              width: 100%;
              border-collapse: collapse;
              margin-top: 20px;
          }
          .result th, .result td {
              border: 1px solid #ddd;
              padding: 12px;
              text-align: center;
          }
          .result th {
              background-color: #00bcd4;
              color: white;
          }
          .result tr:nth-child(even) {
              background-color: #f2f2f2;
          }
      </style>
  </head>
  <body>
  <div class="container">
      <h1>桃花深渊抽奖</h1>
      <input type="text" id="organizer" placeholder="请输入抽奖发起人姓名" required />
      <input type="text" id="prize" placeholder="请输入奖励物品" required />
      <div class="file-input-container">
          <input type="text" id="fileInputText" class="file-input-textbox" placeholder="点击选择忍之里导出的深渊数据" readonly onclick="document.getElementById('actualFileInput').click()" />
          <input type="file" id="actualFileInput" accept=".xlsx, .xls" style="display: none;" onchange="handleFileChange(event)" />
      </div>
      <label for="rankStart">名次范围取值开始:</label>
      <input type="number" id="rankStart" value="1" min="1" required />
      <label for="rankEnd">名次范围取值结束:</label>
      <input type="number" id="rankEnd" value="30" min="1" required />
      <label for="participationMin">最低参与次数要求:</label>
      <input type="number" id="participationMin" value="9" min="1" required />
      <label for="damageMin">最小输出伤害要求:</label>
      <input type="number" id="damageMin" value="15000000" min="0" required />
      <label for="drawCount">抽取数量:</label>
      <input type="number" id="drawCount" value="1" min="1" required />
      <button onclick="drawWinners()">开始抽奖</button>
      <div id="result" class="result"></div>
  </div>
  
  <!-- The Modal -->
  <div id="myModal" class="modal">
      <div class="modal-content">
          <span class="close">&times;</span>
          <div id="modalResult" class="result"></div>
      </div>
  </div>
  
  <script>
  let data = [];
  let dateInfo = "";
  let xlsxLoaded = false;
  
  async function loadXLSXLibrary() {
      return new Promise((resolve, reject) => {
          const script = document.createElement('script');
          script.src = 'https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.5/xlsx.full.min.js';
          script.onload = () => {
              xlsxLoaded = true;
              resolve();
          };
          script.onerror = reject;
          document.head.appendChild(script);
      });
  }
  
  function handleFileChange(event) {
      if (!xlsxLoaded) {
          console.error("XLSX library is not loaded yet.");
          return;
      }
  
      const file = event.target.files[0];
      if (file) {
          document.getElementById('fileInputText').value = file.name;
          const reader = new FileReader();
          reader.onload = function(e) {
              const dataArray = new Uint8Array(e.target.result);
              const workbook = XLSX.read(dataArray, {type: 'array'});
              const firstSheetName = workbook.SheetNames[0];
              const worksheet = workbook.Sheets[firstSheetName];
  
              // Extract date information from merged cells in the top two rows
              let merges = worksheet['!merges'] || [];
              for (let merge of merges) {
                  if (merge.s.r <= 1 && merge.e.r <= 1) { // Check if the merge is within the top two rows
                      const cellRef = XLSX.utils.encode_cell({r: merge.s.r, c: merge.s.c});
                      if (worksheet[cellRef]) {
                          dateInfo = worksheet[cellRef].v;
                          break;
                      }
                  }
              }
  
              let jsonData = XLSX.utils.sheet_to_json(worksheet, {header: 1});
  
              // Skip the first two rows if they contain merged cells with date information
              jsonData = jsonData.slice(2);
  
              // Remove header row
              let headers = jsonData.shift();
  
              // Find indices of valid columns: 名次, 昵称（UID：）, 伤害, 挑战次数
              const rankIndex = headers.indexOf("名次");
              const nicknameIndex = headers.findIndex(header => header.includes("昵称"));
              const damageIndex = headers.indexOf("伤害");
              const participationIndex = headers.indexOf("挑战次数");
  
              // Ensure all indices are found
              if (rankIndex === -1 || nicknameIndex === -1 || damageIndex === -1 || participationIndex === -1) {
                  console.error("One or more required columns are missing.");
                  document.getElementById('result').innerText = "缺少必要的列，请检查文件内容。";
                  return;
              }
  
              // Filter and map to only include valid columns
              data = jsonData.map(row => [
                  parseInt(row[rankIndex], 10),
                  row[nicknameIndex],
                  parseInt(row[damageIndex], 10),
                  parseInt(row[participationIndex], 10)
              ]).filter(row => !isNaN(row[0]) && row[1] && !isNaN(row[2]) && !isNaN(row[3]));
  
              if (data.length === 0) {
                  console.error("Parsed data is empty.");
                  document.getElementById('result').innerText = "解析数据为空，请检查文件内容。";
              }
          };
          reader.readAsArrayBuffer(file);
      }
  }
  
  function drawWinners() {
      const organizer = document.getElementById('organizer').value;
      const prize = document.getElementById('prize').value;
      const rankStart = parseInt(document.getElementById('rankStart').value);
      const rankEnd = parseInt(document.getElementById('rankEnd').value);
      const participationMin = parseInt(document.getElementById('participationMin').value);
      const damageMin = parseInt(document.getElementById('damageMin').value);
      const drawCount = parseInt(document.getElementById('drawCount').value);
  
      const filteredData = data.filter(row => {
          const rank = row[0];
          const participation = row[3];
          const damage = row[2];
          const condition = rank >= rankStart && rank <= rankEnd && participation >= participationMin && damage >= damageMin;
          return condition;
      });
  
      if (filteredData.length === 0) {
          document.getElementById('result').innerText = "没有符合条件的参与者";
          return;
      }
  
      const winners = [];
      while (winners.length < drawCount && filteredData.length > 0) {
          const randomIndex = Math.floor(Math.random() * filteredData.length);
          winners.push(filteredData[randomIndex]);
          filteredData.splice(randomIndex, 1);
      }
  
      let resultHtml = `<p>抽奖发起人: ${organizer}</p><p>奖励物品: ${prize}</p>`;
      if (dateInfo) {
          resultHtml += `<p>抽奖信息: ${dateInfo}</p>`;
      }
      resultHtml += `<table><tr><th>名次</th><th>昵称</th><th>挑战次数</th><th>伤害</th></tr>`;
      winners.forEach(winner => {
          resultHtml += `<tr><td>${winner[0]}</td><td>${winner[1]}</td><td>${winner[3]}</td><td>${winner[2]}</td></tr>`;
      });
      resultHtml += "</table>";
  
      // Display result in modal
      document.getElementById('modalResult').innerHTML = "抽奖完成<br>" + resultHtml;
      var modal = document.getElementById("myModal");
      modal.style.display = "block";
  
      // Get the <span> element that closes the modal
      var span = document.getElementsByClassName("close")[0];
  
      // When the user clicks on <span> (x), close the modal
      span.onclick = function() {
          modal.style.display = "none";
      }
  
      // When the user clicks anywhere outside of the modal, close it
      window.onclick = function(event) {
          if (event.target == modal) {
              modal.style.display = "none";
          }
      }
  }
  
  document.addEventListener("DOMContentLoaded", async () => {
      try {
          await loadXLSXLibrary();
          console.log("XLSX library loaded successfully.");
      } catch (error) {
          console.error("Failed to load XLSX library:", error);
      }
  });
  </script>
  </body>
  </html>
  
services.body_hash_sha1: sha1:68735eaa9282d584f8e81922187ee72835848a27
services.supported_versions: HTTP/1.1 HTTP/2
services.protocol: HTTP
services.transport_protocol: TCP
services.scan_time: 2025-07-28T05:14:25.881508
services.banner: HTTP/1.1 404 Not Found
  Date:  <REDACTED>
  Content-Length: 0
  
services.path: /
services.endpoint_type: HTTP
services.scan_time: 2025-07-28T05:14:25.881508
services.uri: http://185.238.250.107:10000/
services.protocol: HTTP/1.1
services.status_reason: Not Found
services.key: Date
services.headers: <REDACTED>
services.key: Content-Length
services.headers: 0
services.supported_versions: HTTP/1.1
[binary data, 22 values, 622 bytes]