104.244.75.153

As of: Nov 03, 2024 3:32am UTC | Latest

Host

Attribute Value
ip 104.244.75.153
location.continent Europe
location.country Luxembourg
location.country_code LU
location.city Dudelange
location.postal_code L-3410
location.timezone Europe/Luxembourg
location.province Esch-sur-Alzette
location.coordinates.latitude 49.48056
location.coordinates.longitude 6.0875
location_updated_at 2024-10-28T19:44:50.979867138Z
autonomous_system.asn 53667
autonomous_system.description PONYNET
autonomous_system.bgp_prefix 104.244.75.0/24
autonomous_system.name PONYNET
autonomous_system.country_code US
autonomous_system_updated_at 2024-10-28T19:44:50.979980082Z
whois.network.handle BUYVM-LUXEMBOURG-01
whois.network.name BuyVM
whois.network.cidrs 104.244.72.0/21
whois.network.created 2017-10-01T00:00:00Z
whois.network.updated 2017-10-01T00:00:00Z
whois.network.allocation_type REALLOCATION
whois.organization.handle BUYVM
whois.organization.name BuyVM
whois.organization.street 3, op der Poukewiss
whois.organization.city Roost
whois.organization.postal_code 7795
whois.organization.country LU
whois.organization.abuse_contacts.handle FDI19-ARIN
whois.organization.abuse_contacts.name Francisco Dias
whois.organization.abuse_contacts.email [email protected]
whois.organization.admin_contacts.handle FDI19-ARIN
whois.organization.admin_contacts.name Francisco Dias
whois.organization.admin_contacts.email [email protected]
whois.organization.tech_contacts.handle FDI19-ARIN
whois.organization.tech_contacts.name Francisco Dias
whois.organization.tech_contacts.email [email protected]
dns.names h.pawn.us.kg
dns.names x.pawn.us.kg
dns.names lu.petyaenglish.com
dns.names vps.papicure.de
dns.records.h.pawn.us.kg.record_type A
dns.records.h.pawn.us.kg.resolved_at 2024-10-14T19:27:42.321958589Z
dns.records.x.pawn.us.kg.record_type A
dns.records.x.pawn.us.kg.resolved_at 2024-10-27T22:21:44.813720845Z
dns.records.vps.papicure.de.record_type A
dns.records.vps.papicure.de.resolved_at 2024-10-31T10:47:49.308444328Z
dns.records.lu.petyaenglish.com.record_type A
dns.records.lu.petyaenglish.com.resolved_at 2024-10-23T17:04:30.060232345Z
last_updated_at 2024-11-03T03:32:11.591Z
labels bootstrap
labels default-landing-page
labels echarts
labels jquery
labels remote-access
labels semantic-ui
labels vue.js

22/SSH TCP View Definition

Attribute Value
services.banner SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u3
services.banner_hashes sha256:8a0b4c67ffffbda9b94fe19108bb520fe4af53027553bc4b6724f3ed7bbb8df3
services.banner_hex 5353482d322e302d4f70656e5353485f382e3470312044656269616e2d352b64656231317533
services.discovery_method IPV4_WALK_FULL_PRIORITY_1
services.extended_service_name SSH
services.labels remote-access
services.observed_at 2024-11-02T11:40:42.008234367Z
services.perspective_id PERSPECTIVE_TATA
services.port 22
services.service_name SSH
services.source_ip 167.94.138.33
services.ssh.endpoint_id.raw SSH-2.0-OpenSSH_8.4p1 Debian-5+deb11u3
services.ssh.endpoint_id.protocol_version 2.0
services.ssh.endpoint_id.software_version OpenSSH_8.4p1
services.ssh.endpoint_id.comment Debian-5+deb11u3
services.ssh.kex_init_message.kex_algorithms curve25519-sha256
services.ssh.kex_init_message.kex_algorithms [email protected]
services.ssh.kex_init_message.kex_algorithms ecdh-sha2-nistp256
services.ssh.kex_init_message.kex_algorithms ecdh-sha2-nistp384
services.ssh.kex_init_message.kex_algorithms ecdh-sha2-nistp521
services.ssh.kex_init_message.kex_algorithms diffie-hellman-group-exchange-sha256
services.ssh.kex_init_message.kex_algorithms diffie-hellman-group16-sha512
services.ssh.kex_init_message.kex_algorithms diffie-hellman-group18-sha512
services.ssh.kex_init_message.kex_algorithms diffie-hellman-group14-sha256
services.ssh.kex_init_message.kex_algorithms [email protected]
services.ssh.kex_init_message.host_key_algorithms rsa-sha2-512
services.ssh.kex_init_message.host_key_algorithms rsa-sha2-256
services.ssh.kex_init_message.host_key_algorithms ssh-rsa
services.ssh.kex_init_message.host_key_algorithms ecdsa-sha2-nistp256
services.ssh.kex_init_message.host_key_algorithms ssh-ed25519
services.ssh.kex_init_message.client_to_server_ciphers [email protected]
services.ssh.kex_init_message.client_to_server_ciphers aes128-ctr
services.ssh.kex_init_message.client_to_server_ciphers aes192-ctr
services.ssh.kex_init_message.client_to_server_ciphers aes256-ctr
services.ssh.kex_init_message.client_to_server_ciphers [email protected]
services.ssh.kex_init_message.client_to_server_ciphers [email protected]
services.ssh.kex_init_message.server_to_client_ciphers [email protected]
services.ssh.kex_init_message.server_to_client_ciphers aes128-ctr
services.ssh.kex_init_message.server_to_client_ciphers aes192-ctr
services.ssh.kex_init_message.server_to_client_ciphers aes256-ctr
services.ssh.kex_init_message.server_to_client_ciphers [email protected]
services.ssh.kex_init_message.server_to_client_ciphers [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs [email protected]
services.ssh.kex_init_message.client_to_server_macs hmac-sha2-256
services.ssh.kex_init_message.client_to_server_macs hmac-sha2-512
services.ssh.kex_init_message.client_to_server_macs hmac-sha1
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs [email protected]
services.ssh.kex_init_message.server_to_client_macs hmac-sha2-256
services.ssh.kex_init_message.server_to_client_macs hmac-sha2-512
services.ssh.kex_init_message.server_to_client_macs hmac-sha1
services.ssh.kex_init_message.client_to_server_compression none
services.ssh.kex_init_message.client_to_server_compression [email protected]
services.ssh.kex_init_message.server_to_client_compression none
services.ssh.kex_init_message.server_to_client_compression [email protected]
services.ssh.kex_init_message.first_kex_follows false
services.ssh.algorithm_selection.kex_algorithm [email protected]
services.ssh.algorithm_selection.host_key_algorithm ecdsa-sha2-nistp256
services.ssh.algorithm_selection.client_to_server_alg_group.cipher aes128-ctr
services.ssh.algorithm_selection.client_to_server_alg_group.mac hmac-sha2-256
services.ssh.algorithm_selection.client_to_server_alg_group.compression none
services.ssh.algorithm_selection.server_to_client_alg_group.cipher aes128-ctr
services.ssh.algorithm_selection.server_to_client_alg_group.mac hmac-sha2-256
services.ssh.algorithm_selection.server_to_client_alg_group.compression none
services.ssh.server_host_key.fingerprint_sha256 f50ade5ad0c446ab8d03865d19401938584e310752067aa6a46def1b5aa6e760
services.ssh.server_host_key.ecdsa_public_key.b WsY12Ko6k+ez671VdpiGvGUdBrDMU7D2O848PifSYEs=
services.ssh.server_host_key.ecdsa_public_key.curve P-256
services.ssh.server_host_key.ecdsa_public_key.gx axfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpY=
services.ssh.server_host_key.ecdsa_public_key.gy T+NC4v4af5uO5+tKfA+eFivOM1drMV7Oy7ZAaDe/UfU=
services.ssh.server_host_key.ecdsa_public_key.length 256
services.ssh.server_host_key.ecdsa_public_key.n /////wAAAAD//////////7zm+q2nF56E87nKwvxjJVE=
services.ssh.server_host_key.ecdsa_public_key.p /////wAAAAEAAAAAAAAAAAAAAAD///////////////8=
services.ssh.server_host_key.ecdsa_public_key.x llWfRKVWs+3vI9jX/Fb7gqU4GmBTZcCHFeaga+aiWNY=
services.ssh.server_host_key.ecdsa_public_key.y 5HkNwSmGKEoUS3xztyw/utbpqPjU4O2/rQbZkkkmrPQ=
services.ssh.hassh_fingerprint 779664e66160bf75999f091fce5edb5a
services.transport_fingerprint.raw 65160,64,true,MSTNW,1400,false,false
services.transport_protocol TCP
services.truncated false

80/HTTP TCP View Definition

Attribute Value
services.banner HTTP/1.1 200 OK\r\nServer: openresty\r\nDate: <REDACTED>\r\nContent-Type: text/html\r\nLast-Modified: Wed, 16 Oct 2024 23:49:26 GMT\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nETag: W/"67105106-409"\r\nContent-Encoding: gzip\r\n
services.banner_hashes sha256:dc2db5cea2330c81f50e3d56bb62f547cd167470bd27b7b91d999965a3c5364a
services.banner_hex 485454502f312e3120323030204f4b0d0a5365727665723a206f70656e72657374790d0a446174653a20203c52454441435445443e0d0a436f6e74656e742d547970653a20746578742f68746d6c0d0a4c6173742d4d6f6469666965643a205765642c203136204f637420323032342032333a34393a323620474d540d0a5472616e736665722d456e636f64696e673a206368756e6b65640d0a436f6e6e656374696f6e3a206b6565702d616c6976650d0a455461673a20572f2236373130353130362d343039220d0a436f6e74656e742d456e636f64696e673a20677a69700d0a
services.discovery_method PREDICTIVE_METHOD_7
services.extended_service_name HTTP
services.http.request.method GET
services.http.request.uri http://104.244.75.153/
services.http.request.headers.User_Agent Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)
services.http.request.headers.Accept */*
services.http.response.protocol HTTP/1.1
services.http.response.status_code 200
services.http.response.status_reason OK
services.http.response.headers.Server openresty
services.http.response.headers.Content_Type text/html
services.http.response.headers.Transfer_Encoding chunked
services.http.response.headers.Connection keep-alive
services.http.response.headers.Date <REDACTED>
services.http.response.headers.Content_Encoding gzip
services.http.response.headers.ETag W/"67105106-409"
services.http.response.headers.Last_Modified Wed, 16 Oct 2024 23:49:26 GMT
services.http.response.html_tags <title>Default Site</title>
services.http.response.html_tags <meta charset="utf-8">
services.http.response.html_tags <meta http-equiv="X-UA-Compatible" content="IE=edge">
services.http.response.html_tags <meta name="viewport" content="width=device-width, initial-scale=1">
services.http.response.body_size 1033
services.http.response.body <!DOCTYPE html>\n<html lang="en">\n <head>\n <meta charset="utf-8">\n <meta http-equiv="X-UA-Compatible" content="IE=edge">\n <meta name="viewport" content="width=device-width, initial-scale=1">\n <title>Default Site</title>\n <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">\n <style>\n .jumbotron { margin-top: 50px; }\n </style>\n </head>\n <body>\n <div class="container">\n <div class="jumbotron">\n <h1>Congratulations!</h1>\n <p>You've successfully started the Nginx Proxy Manager.</p>\n <p>If you're seeing this site then you're trying to access a host that isn't set up yet.</p>\n <p>Log in to the Admin panel to get started.</p>\n </div>\n <p class="text-center"><small>Powered by <a href="https://github.com/jc21/nginx-proxy-manager" target="_blank">Nginx Proxy Manager</a></small></p>\n </div>\n </body>\n</html>\n
services.http.response.body_hashes sha256:1406935d98ff1955870a59bd141a5ff729aea566256055cd8de3d80e192891ef
services.http.response.body_hashes sha1:3228a59335d6a3cef69e07aa250473bbefffcd18
services.http.response.body_hash sha1:3228a59335d6a3cef69e07aa250473bbefffcd18
services.http.response.html_title Default Site
services.http.supports_http2 false
services.labels default-landing-page
services.observed_at 2024-11-02T19:25:49.482248509Z
services.perspective_id PERSPECTIVE_NTT_2
services.port 80
services.service_name HTTP
services.software.uniform_resource_identifier cpe:2.3:a:openresty:openresty:*:*:*:*:*:*:*:*
services.software.part a
services.software.vendor OpenResty
services.software.product OpenResty
services.software.source OSI_APPLICATION_LAYER
services.software.uniform_resource_identifier cpe:2.3:a:nginxproxymanager:nginx_proxy_manager:*:*:*:*:*:*:*:*
services.software.part a
services.software.vendor Nginx Proxy Manager
services.software.product Nginx Proxy Manager
services.software.source OSI_APPLICATION_LAYER
services.source_ip 199.45.155.101
services.transport_protocol TCP
services.truncated false

81/HTTP TCP View Definition

Attribute Value
services.banner HTTP/1.1 200 OK\r\nServer: openresty\r\nDate: <REDACTED>\r\nContent-Type: text/html\r\nLast-Modified: Wed, 16 Oct 2024 23:51:03 GMT\r\nTransfer-Encoding: chunked\r\nConnection: keep-alive\r\nETag: W/"67105167-69d"\r\nContent-Encoding: gzip\r\n
services.banner_hashes sha256:6372ef50fd91fd54ac3a5042ec6e7cbdebe913c4a0cc7ff4277216c4c1071070
services.banner_hex 485454502f312e3120323030204f4b0d0a5365727665723a206f70656e72657374790d0a446174653a20203c52454441435445443e0d0a436f6e74656e742d547970653a20746578742f68746d6c0d0a4c6173742d4d6f6469666965643a205765642c203136204f637420323032342032333a35313a303320474d540d0a5472616e736665722d456e636f64696e673a206368756e6b65640d0a436f6e6e656374696f6e3a206b6565702d616c6976650d0a455461673a20572f2236373130353136372d363964220d0a436f6e74656e742d456e636f64696e673a20677a69700d0a
services.discovery_method PREDICTIVE_METHOD_11
services.extended_service_name HTTP
services.http.request.method GET
services.http.request.uri http://104.244.75.153:81/
services.http.request.headers.User_Agent Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)
services.http.request.headers.Accept */*
services.http.response.protocol HTTP/1.1
services.http.response.status_code 200
services.http.response.status_reason OK
services.http.response.headers.Server openresty
services.http.response.headers.Content_Type text/html
services.http.response.headers.Transfer_Encoding chunked
services.http.response.headers.Connection keep-alive
services.http.response.headers.Date <REDACTED>
services.http.response.headers.Content_Encoding gzip
services.http.response.headers.ETag W/"67105167-69d"
services.http.response.headers.Last_Modified Wed, 16 Oct 2024 23:51:03 GMT
services.http.response.html_tags <title>Nginx Proxy Manager</title>
services.http.response.html_tags <meta charset="utf-8">
services.http.response.html_tags <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1">
services.http.response.html_tags <meta http-equiv="X-UA-Compatible" content="ie=edge">
services.http.response.html_tags <meta http-equiv="Content-Language" content="en">
services.http.response.html_tags <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
services.http.response.html_tags <meta name="apple-mobile-web-app-capable" content="yes">
services.http.response.html_tags <meta name="mobile-web-app-capable" content="yes">
services.http.response.html_tags <meta name="HandheldFriendly" content="True">
services.http.response.html_tags <meta name="MobileOptimized" content="320">
services.http.response.html_tags <meta name="robots" content="noindex">
services.http.response.html_tags <meta name="msapplication-TileColor" content="#333333">
services.http.response.html_tags <meta name="msapplication-config" content="/images/favicons/browserconfig.xml">
services.http.response.html_tags <meta name="theme-color" content="#ffffff">
services.http.response.body_size 1693
services.http.response.body <!doctype html><html lang="en" dir="ltr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1"><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta http-equiv="Content-Language" content="en"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="mobile-web-app-capable" content="yes"><meta name="HandheldFriendly" content="True"><meta name="MobileOptimized" content="320"><meta name="robots" content="noindex"><title>Nginx Proxy Manager</title><link rel="apple-touch-icon" sizes="180x180" href="/images/favicons/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/images/favicons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/images/favicons/favicon-16x16.png"><link rel="manifest" href="/images/favicons/site.webmanifest"><link rel="mask-icon" href="/images/favicons/safari-pinned-tab.svg" color="#5bbad5"><link rel="shortcut icon" href="/images/favicons/favicon.ico"><meta name="msapplication-TileColor" content="#333333"><meta name="msapplication-config" content="/images/favicons/browserconfig.xml"><meta name="theme-color" content="#ffffff"><link href="/css/main.css?v=2.12.1" rel="stylesheet"></head><body><noscript><div class="container no-js-warning"><div class="alert alert-warning text-center"><strong>Warning!</strong> This application requires Javascript and your browser doesn't support it.</div></div></noscript><div id="app" class="page"><span class="loader"></span></div><script src="/js/main.bundle.js?v=2.12.1"></script></body></html>
services.http.response.favicons.size 16709
services.http.response.favicons.name http://104.244.75.153:81/images/favicons/apple-touch-icon.png
services.http.response.favicons.md5_hash 0f54682769f727b5a0e0f719e8f79a33
services.http.response.favicons.hashes md5:0f54682769f727b5a0e0f719e8f79a33
services.http.response.favicons.hashes sha256:c945f1736aed7375aafba1d255928d0f1da91c21a1e55da340441fccfdc1f24c
services.http.response.favicons.shodan_hash -1459641813
services.http.response.favicons.size 2696
services.http.response.favicons.name http://104.244.75.153:81/images/favicons/favicon-32x32.png
services.http.response.favicons.md5_hash 056be8d01eb688c00df4339f51fd8680
services.http.response.favicons.hashes md5:056be8d01eb688c00df4339f51fd8680
services.http.response.favicons.hashes sha256:aad99c34daa86fa7389561d51ba79d9f62ba113bc194de363b85b772914a8484
services.http.response.favicons.shodan_hash -2138655763
services.http.response.favicons.size 1512
services.http.response.favicons.name http://104.244.75.153:81/images/favicons/favicon-16x16.png
services.http.response.favicons.md5_hash 6ef08df229e57710f82cb1de4705bb24
services.http.response.favicons.hashes md5:6ef08df229e57710f82cb1de4705bb24
services.http.response.favicons.hashes sha256:3a8e2674e9d9672be0b6b448a5166dd9c7dc622c1f612962926220fead85d6e1
services.http.response.favicons.shodan_hash -1110644062
services.http.response.favicons.size 15086
services.http.response.favicons.name http://104.244.75.153:81/images/favicons/favicon.ico
services.http.response.favicons.md5_hash 036fa3a8b23531cabfb2430624bc73dc
services.http.response.favicons.hashes md5:036fa3a8b23531cabfb2430624bc73dc
services.http.response.favicons.hashes sha256:e194af2178b261052153742fc315917735f0fe52e8beaf3092f8c96210df702a
services.http.response.favicons.shodan_hash 1660668034
services.http.response.body_hashes sha256:274f7986e0f811c71bd012733f907dfbb3a36b51f4466111e08765080672c2ed
services.http.response.body_hashes sha1:7432baa99915ab585a6512a830a84e69a02e6f43
services.http.response.body_hash sha1:7432baa99915ab585a6512a830a84e69a02e6f43
services.http.response.html_title Nginx Proxy Manager
services.http.supports_http2 false
services.observed_at 2024-11-02T19:19:40.201552762Z
services.perspective_id PERSPECTIVE_PCCW
services.port 81
services.service_name HTTP
services.software.uniform_resource_identifier cpe:2.3:a:openresty:openresty:*:*:*:*:*:*:*:*
services.software.part a
services.software.vendor OpenResty
services.software.product OpenResty
services.software.source OSI_APPLICATION_LAYER
services.software.uniform_resource_identifier cpe:2.3:a:nginxproxymanager:nginx_proxy_manager:*:*:*:*:*:*:*:*
services.software.part a
services.software.vendor Nginx Proxy Manager
services.software.product Nginx Proxy Manager
services.software.source OSI_APPLICATION_LAYER
services.source_ip 199.45.154.117
services.transport_protocol TCP
services.truncated false

443/UNKNOWN TCP View Definition

Attribute Value
services.banner HTTP/1.1 400 Bad Request\r\nServer: openresty\r\nDate: Sun, 03 Nov 2024 03:08:06 GMT\r\nContent-Type: text/html\r\nContent-Length: 252\r\nConnection: close\r\n\r\n<html>\r\n<head><title>400 The plain HTTP request was sent to HTTPS port</title></head>\r\n<body>\r\n<center><h1>400 Bad Request</h1></center>\r\n<center>The plain HTTP request was sent to HTTPS port</center>\r\n<hr><center>openresty</center>\r\n</body>\r\n</html>\r\n
services.banner_hashes sha256:798bc3d2882c4e04f76d95fda7fc9f97d3ea88170fbb95c6ede691dae9e4b5ea
services.banner_hex 485454502f312e31203430302042616420526571756573740d0a5365727665723a206f70656e72657374790d0a446174653a2053756e2c203033204e6f7620323032342030333a30383a303620474d540d0a436f6e74656e742d547970653a20746578742f68746d6c0d0a436f6e74656e742d4c656e6774683a203235320d0a436f6e6e656374696f6e3a20636c6f73650d0a0d0a3c68746d6c3e0d0a3c686561643e3c7469746c653e3430302054686520706c61696e20485454502072657175657374207761732073656e7420746f20485454505320706f72743c2f7469746c653e3c2f686561643e0d0a3c626f64793e0d0a3c63656e7465723e3c68313e3430302042616420526571756573743c2f68313e3c2f63656e7465723e0d0a3c63656e7465723e54686520706c61696e20485454502072657175657374207761732073656e7420746f20485454505320706f72743c2f63656e7465723e0d0a3c68723e3c63656e7465723e6f70656e72657374793c2f63656e7465723e0d0a3c2f626f64793e0d0a3c2f68746d6c3e0d0a
services.discovery_method PREDICTIVE_METHOD_7
services.extended_service_name UNKNOWN
services.observed_at 2024-11-03T03:07:59.462597313Z
services.perspective_id PERSPECTIVE_HE
services.port 443
services.service_name UNKNOWN
services.source_ip 162.142.125.218
services.transport_fingerprint.raw 65160,64,true,MSTNW,1400,false,false
services.transport_protocol TCP
services.truncated false

5555/UNKNOWN TCP View Definition

Attribute Value
services.banner @
services.banner_hashes sha256:7202b005ad6f00cd07bc426fd4a306914e3a4d15dc3674e05fe97c8d6fd715d8
services.banner_hex 000006040000000000000500004000
services.discovery_method PREDICTIVE_METHOD_30
services.extended_service_name UNKNOWN
services.observed_at 2024-11-03T03:31:52.639509753Z
services.perspective_id PERSPECTIVE_NTT_2
services.port 5555
services.service_name UNKNOWN
services.source_ip 199.45.155.69
services.transport_fingerprint.raw 65160,64,true,MSTNW,1400,false,false
services.transport_protocol TCP
services.truncated false

8008/HTTP TCP View Definition

Attribute Value
services.banner HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nDate: <REDACTED>\r\nTransfer-Encoding: chunked\r\n
services.banner_hashes sha256:4d3efcb4c2cc2cdb96dddf455977c3291f4b0f6a8a290bfc15e460d917703226
services.banner_hex 485454502f312e3120323030204f4b0d0a436f6e74656e742d547970653a20746578742f68746d6c3b20636861727365743d7574662d380d0a446174653a20203c52454441435445443e0d0a5472616e736665722d456e636f64696e673a206368756e6b65640d0a
services.discovery_method IPV4_WALK_FULL_PRIORITY_1
services.extended_service_name HTTP
services.http.request.method GET
services.http.request.uri http://104.244.75.153:8008/
services.http.request.headers.User_Agent Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)
services.http.request.headers.Accept */*
services.http.response.protocol HTTP/1.1
services.http.response.status_code 200
services.http.response.status_reason OK
services.http.response.headers.Date <REDACTED>
services.http.response.headers.Content_Type text/html; charset=utf-8
services.http.response.headers.Transfer_Encoding chunked
services.http.response.html_tags <title>Server Status</title>
services.http.response.html_tags <meta charset="utf-8">
services.http.response.html_tags <meta http-equiv="X-UA-Compatible" content="ie=edge">
services.http.response.html_tags <meta content="telephone=no" name="format-detection">
services.http.response.html_tags <meta name="viewport" content="width=device-width, initial-scale=1.0">
services.http.response.html_tags <meta name="apple-mobile-web-app-capable" content="yes" />
services.http.response.html_tags <meta name="mobile-web-app-capable" content="yes" />
services.http.response.html_tags <meta name="theme-color" content="#000000" />
services.http.response.body_size 65536
services.http.response.body \n\n<!DOCTYPE html>\n<html lang="zh-CN">\n<head>\n <title>Server Status</title>\n <meta charset="utf-8">\n <meta http-equiv="X-UA-Compatible" content="ie=edge">\n <meta content="telephone=no" name="format-detection">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <meta name="apple-mobile-web-app-capable" content="yes" />\n <meta name="mobile-web-app-capable" content="yes" />\n <meta name="theme-color" content="#000000" />\n \n <link rel="manifest" href="/static/manifest-zh-CN.json?v20240905" />\n \n <link rel="apple-touch-startup-image" href="/static/logo.svg" />\n <link rel="shortcut icon" type="image/png" href="/static/logo.svg">\n <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css">\n <link rel="stylesheet" href="https://unpkg.com/[email protected]/font/bootstrap-icons.min.css">\n <link rel="stylesheet" href="https://unpkg.com/[email protected]/assets/font-logos.css">\n <link rel="stylesheet" href="https://unpkg.com/[email protected]/css/flag-icons.min.css">\n <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/semantic.min.css">\n <script src="https://unpkg.com/[email protected]/dist/jquery.min.js"></script>\n <script src="https://unpkg.com/[email protected]/dist/js/bootstrap.min.js"></script>\n <script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script>\n <script src="https://unpkg.com/[email protected]/dist/echarts.min.js"></script>\n <link rel="stylesheet" href="/static/theme-server-status/css/main.css?v20241008">\n <link rel="stylesheet" href="/static/theme-server-status/css/dark.css?v20241008">\n <link rel="stylesheet" href="/static/theme-server-status/css/light.css?v20241008">\n <script src="/static/theme-server-status/js/mixin.js?v20240915"></script>\n</head>\n<body>\n<div id="app">\n\n\n<header role="navigation" class="navbar navbar-inverse navbar-fixed-top">\n <div class="container-fluid">\n <div class="navbar-header">\n <button data-target=".navbar-collapse" data-toggle="collapse" class="navbar-toggle" type="button">\n <span class="sr-only">Toggle navigation</span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n <span class="icon-bar"></span>\n </button>\n <a href="/" class="navbar-brand">\n <img src="/static/logo.svg" style="height: 2rem;display: inline-block;">\n Server Status\n </a>\n </div>\n <nav id="navbar" class="navbar-collapse collapse">\n <ul class="nav navbar-nav">\n <li :class="isMenuActive('index')"><a href="/"><i class="home icon"></i>首页</a></li>\n <li :class="isMenuActive('service')"><a href="/service"><i class="rss icon"></i>服务</a></li>\n <li :class="isMenuActive('network')"><a href="/network"><i class="bi bi-hdd-network icon"></i>网络</a></li>\n \n </ul>\n <ul class="nav navbar-nav navbar-right">\n \n <li><a href="/login"><i class="sign-in icon"></i>登录</a></li>\n \n </ul>\n </nav>\n </div>\n</header>\n<section class="nezha">\n \n\n<template v-if="showGroup">\n <div class="container-fluid table-responsive content" v-for="group in nodesTag">\n \n<table class="table table-striped table-condensed table-hover">\n <thead>\n <tr class="node-group-tag">\n <th colspan="16" style="border:none;">@#(group.Tag!==''?group.Tag:'默认')#@</th>\n </tr>\n <tr class="node-group-cell">\n <th class="node-cell status center">状态</th>\n <th class="node-cell name center">名称</th>\n <th class="node-cell os center">系统</th>\n <th class="node-cell location center">位置</th>\n <th v-if="group.data.some(item => item.additional && item.additional.price && Object.keys(item.additional.price).length > 0)" class="node-cell price center">价格</th>\n <th class="node-cell uptime center">在线</th>\n <th class="node-cell load center">负载</th>\n <th class="node-cell network center">网速↓|↑</th>\n <th class="node-cell traffic center">流量↓|↑</th>\n <th class="node-cell cpu center">核心</th>\n <th class="node-cell memory center">内存</th>\n <th class="node-cell hdd center">硬盘</th>\n <th v-if="group.data.some(item => item.additional && item.additional.remaining && Object.keys(item.additional.remaining).length > 0)" class="node-cell remaining center">剩余</th>\n </tr>\n </thead>\n <tbody id="servers">\n <template v-for="(node,index) in group.data">\n <tr :id="'r'+node.ID" data-toggle="collapse" :data-target="'#rt'+node.ID" class="accordion-toggle"\n :class="index % 2 === 0 ? 'odd': 'even'" aria-expanded="false" @click="showCharts(node.ID)">\n <td class="node-cell status center">\n <div class="status-container">\n <div v-if="node.online" class="status-icon online"></div>\n <div v-else class="status-icon offline"></div>\n </div>\n </td>\n <td class="node-cell name center">@#node.name#@</td>\n <td class="node-cell os center">\n <i v-if='isWindowsPlatform(node.host.Platform)' class="windows icon"></i>\n <i v-else-if='getFontLogoClass(node.host.Platform) == "" && node.stateuptime > 0' class="fl-tux"></i>\n <i v-else :class="'fl-' + getFontLogoClass(node.host.Platform)"></i>\n <span class="node-cell-os-text">@#getPlatformName(node.os) === '' && node.stateuptime > 0 ? 'linux' : getPlatformName(node.os)#@</span>\n </td>\n <td class="node-cell location center">\n <i :class="'fi fi-' + (node.stateuptime > 0 ? (node.location || 'rb') : '')"></i>\n <span class="node-cell-location-text text-uppercase">@#node.stateuptime > 0 ? (node.location || 'RB') : ''#@</span>\n </td>\n <td v-if="group.data.some(item => item.additional && item.additional.price && Object.keys(item.additional.price).length > 0)" class="node-cell price center">\n <template v-if="node.additional && node.additional.price">\n <span v-if="node.additional.price.amount == 0" class="node-cell-price-text">FREE</span>\n <span v-else-if="node.additional.price.amount == -1" class="node-cell-price-text">PAYG</span>\n <span v-else class="node-cell-price-text">@#node.additional.price.amount#@@#(node.additional.price.cycle ? '/' + node.additional.price.cycle : '')#@</span>\n </template>\n </td>\n <td style="text-align: center;" class="node-cell uptime">@#node.uptime#@</td>\n <td style="text-align: center;" class="node-cell load">@#node.load#@</td>\n <td style="text-align: center;" class="node-cell network">@#node.network#@</td>\n <td style="text-align: center;" class="node-cell traffic">@#node.traffic#@</td>\n <td class="node-cell cpu">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <div :style="node.cpu.style" :class="node.cpu.class"><small>@#node.cpu.percent#@%</small>\n </div>\n </div>\n </td>\n <td class="node-cell memory">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <div :style="node.memory.style" :class="node.memory.class">\n <small>@#node.memory.percent#@%</small>\n </div>\n </div>\n </td>\n <td class="node-cell hdd">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <div :style="node.hdd.style" :class="node.hdd.class"><small>@#node.hdd.percent#@%</small>\n </div>\n </div>\n </td>\n <td v-if="group.data.some(item => item.additional && item.additional.remaining && Object.keys(item.additional.remaining).length > 0)" class="node-cell remaining">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <template v-if="node.additional && node.additional.remaining.format">\n <div :style="node.additional.remaining.format.style" :class="node.additional.remaining.days == 'lifetime' ? '' : node.additional.remaining.format.class"></div>\n <div class="additional">\n <small v-if="node.additional.remaining.days == 'lifetime'">永续</small>\n <small v-else-if="node.additional.remaining.days < 0">已到期</small>\n <small v-else>\n <span class="node-cell-remaining-days">@#node.additional.remaining.days#@天</span>\n <span class="node-cell-remaining-percent">@#node.additional.remaining.percent#@%</span>\n </small>\n </div>\n </template>\n </div>\n </td>\n </tr>\n <tr class="expandRow" :class="index % 2 === 0 ? 'odd': 'even'">\n <td colspan="16">\n <div class="accordian-body collapse" :id="'rt'+node.ID">\n <div style="display: flex;left-items: center;justify-content: center;flex-direction: column; max-width: 89vw">\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">系统:</span>\n <span v-if="node.host.Platform">@#node.host.Platform#@@#node.host.PlatformVersion ? '-' + node.host.PlatformVersion : ''#@</span>\n <span v-if="node.host.Arch">[@#node.host.Virtualization ? node.host.Virtualization + ':' : ''#@@#node.host.Arch#@]</span>\n </span>\n <span class="node-cell-expand" v-if="node.host.CPU">\n <span class="node-cell-expand-label">CPU:</span>\n @#node.host.CPU.join(",")#@ (@#node.cpu.percent#@%)\n </span>\n <span class="node-cell-expand" v-if="node.host.GPU">\n <span class="node-cell-expand-label">GPU:</span>\n @#node.host.GPU.join(",")#@ \n (@#parseInt(node.state.GPU >=0 ? node.state.GPU : 0)#@%)\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">硬盘:</span>\n @#formatByteSize(node.state.DiskUsed)#@ / @#formatByteSize(node.host.DiskTotal)#@ (@#node.hdd.percent#@%)\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">内存:</span>\n @#formatByteSize(node.state.MemUsed)#@ / @#formatByteSize(node.host.MemTotal)#@ (@#node.memory.percent#@%)\n </span>\n <span v-if="node.host.SwapTotal > 0" class="node-cell-expand">\n <span class="node-cell-expand-label">交换:</span>\n @#formatByteSize(node.state.SwapUsed)#@ / @#formatByteSize(node.host.SwapTotal)#@\n <span>(@#toFixed2(node.state.SwapUsed / node.host.SwapTotal * 100)#@%)</span>\n </span>\n <span v-else class="node-cell-expand">\n <span class="node-cell-expand-label">交换: OFF</span>\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">流量:</span>\n <i class="arrow alternate circle down outline icon"\n style="margin: 0"></i>@#formatByteSize(node.state.NetInTransfer)#@\n <i class="arrow alternate circle up outline icon"\n style="margin: 0"></i>@#formatByteSize(node.state.NetOutTransfer)#@\n </span>\n <span class="node-cell-expand load">\n <span class="node-cell-expand-label">负载:</span>\n @#toFixed2(node.state.Load1)#@ / @#toFixed2(node.state.Load5)#@ / @#toFixed2(node.state.Load15)#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">进程数:</span>\n @#node.state.ProcessCount#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">连接数:</span>\n TCP @#node.state.TcpConnCount#@ / UDP @#node.state.UdpConnCount#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">启动:</span>\n @#formatTimestamp(node.host.BootTime)#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">活动:</span>\n @#new Date(node.lastActive).toLocaleString()#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">在线:</span>\n @#node.uptime#@\n </span>\n <span v-if="node.state.Temperatures && getTemperature(node.state.Temperatures, sensorList) > 0" @click="toggleDetailedTemp(node.ID)" class="node-cell-expand temp-detail" :id="`temp-${node.ID}`" temp-detail-show="0">\n <span class="node-cell-expand-label">温度:</span>\n <span :id="`temp-main-${node.ID}`" class="node-cell-expand-label">\n @#getTemperature(node.state.Temperatures, sensorList)#@°C\n <i class="bi bi-chevron-double-down"></i>\n </span>\n <span :id="`temp-detail-${node.ID}`" class="node-cell-expand-label" style="display:none">\n <span v-for="temp in node.state.Temperatures" :key="temp.Name" v-if="temp.Temperature !== 0">\n [ @#temp.Name#@ : @#temp.Temperature#@°C ]\n </span>\n <i class="bi bi-chevron-double-up"></i>\n </span>\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">版本:</span>\n @#node.host.Version#@\n </span>\n <span class="node-echarts-expand">\n <div class="chartbox" :id="`chart-${node.ID}`" chartbox-show="0" :key="node.ID" style="width: 100%; height: auto;"></div>\n </span>\n </div>\n </div>\n </td>\n </tr>\n </template>\n </tbody>\n</table>\n \n </div>\n</template>\n\n<template v-else>\n <div class="container-fluid table-responsive content">\n \n<table class="table table-striped table-condensed table-hover">\n <thead>\n <tr>\n <th class="node-cell status center">状态</th>\n <th class="node-cell name center">名称</th>\n <th class="node-cell os center">系统</th>\n <th class="node-cell location center">位置</th>\n <th v-if="nodesNoTag.some(item => item.additional && item.additional.price && Object.keys(item.additional.price).length > 0)" class="node-cell price center">价格</th>\n <th class="node-cell uptime center">在线</th>\n <th class="node-cell load center">负载</th>\n <th class="node-cell network center">网速↓|↑</th>\n <th class="node-cell traffic center">流量↓|↑</th>\n <th class="node-cell cpu center">核心</th>\n <th class="node-cell memory center">内存</th>\n <th class="node-cell hdd center">硬盘</th>\n <th v-if="nodesNoTag.some(item => item.additional && item.additional.remaining && Object.keys(item.additional.remaining).length > 0)" class="node-cell remaining center">剩余</th>\n </tr>\n </thead>\n <tbody id="servers">\n <template v-for="(node,index) in nodesNoTag">\n <tr :id="'r'+node.ID" data-toggle="collapse" :data-target="'#rt'+node.ID" class="accordion-toggle" :class="index % 2 === 0 ? 'odd': 'even'" \n aria-expanded="false" @click="showCharts(node.ID)">\n <td class="node-cell status center">\n <div class="status-container">\n <div v-if="node.online" class="status-icon online"></div>\n <div v-else class="status-icon offline"></div>\n </div>\n </td>\n <td class="node-cell name center">@#node.name#@</td>\n <td class="node-cell os center">\n <i v-if='isWindowsPlatform(node.host.Platform)' class="windows icon"></i>\n <i v-else-if='getFontLogoClass(node.host.Platform) == "" && node.stateuptime > 0' class="fl-tux"></i>\n <i v-else :class="'fl-' + getFontLogoClass(node.host.Platform)"></i>\n <span class="node-cell-os-text">@#getPlatformName(node.os) === '' && node.stateuptime > 0 ? 'linux' : getPlatformName(node.os)#@</span>\n </td>\n <td class="node-cell location center">\n <i :class="'fi fi-' + (node.stateuptime > 0 ? (node.location || 'rb') : '')"></i>\n <span class="node-cell-location-text text-uppercase">@#node.stateuptime > 0 ? (node.location || 'RB') : ''#@</span>\n </td>\n <td v-if="nodesNoTag.some(item => item.additional && item.additional.price && Object.keys(item.additional.price).length > 0)" class="node-cell price center">\n <template v-if="node.additional && node.additional.price">\n <span v-if="node.additional.price.amount == 0" class="node-cell-price-text">FREE</span>\n <span v-else-if="node.additional.price.amount == -1" class="node-cell-price-text">PAYG</span>\n <span v-else class="node-cell-price-text">@#node.additional.price.amount#@@#(node.additional.price.cycle ? '/' + node.additional.price.cycle : '')#@</span>\n </template>\n </td>\n <td style="text-align: center;" class="node-cell uptime">@#node.uptime#@</td>\n <td style="text-align: center;" class="node-cell load">@#node.load#@</td>\n <td style="text-align: center;" class="node-cell network">@#node.network#@</td>\n <td style="text-align: center;" class="node-cell traffic">@#node.traffic#@</td>\n <td class="node-cell cpu">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <div :style="node.cpu.style" :class="node.cpu.class"><small>@#node.cpu.percent#@%</small>\n </div>\n </div>\n </td>\n <td class="node-cell memory">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <div :style="node.memory.style" :class="node.memory.class">\n <small>@#node.memory.percent#@%</small>\n </div>\n </div>\n </td>\n <td class="node-cell hdd">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <div :style="node.hdd.style" :class="node.hdd.class"><small>@#node.hdd.percent#@%</small>\n </div>\n </div>\n </td>\n <td v-if="nodesNoTag.some(item => item.additional && item.additional.remaining && Object.keys(item.additional.remaining).length > 0)" class="node-cell remaining">\n <div :class="['progress', node.online ? 'progress-online' : 'progress-offline']">\n <template v-if="node.additional && node.additional.remaining.format">\n <div :style="node.additional.remaining.format.style" :class="node.additional.remaining.days == 'lifetime' ? '' : node.additional.remaining.format.class"></div>\n <div class="additional">\n <small v-if="node.additional.remaining.days == 'lifetime'">永续</small>\n <small v-else-if="node.additional.remaining.days < 0">已到期</small>\n <small v-else>\n <span class="node-cell-remaining-days">@#node.additional.remaining.days#@天</span>\n <span class="node-cell-remaining-percent">@#node.additional.remaining.percent#@%</span>\n </small>\n </div>\n </template>\n </div>\n </td>\n </tr>\n <tr class="expandRow" :class="index % 2 === 0 ? 'odd': 'even'">\n <td colspan="16">\n <div class="accordian-body collapse" :id="'rt'+node.ID">\n <div style="display: flex;left-items: center;justify-content: center;flex-direction: column; max-width: 89vw">\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">系统:</span>\n <span v-if="node.host.Platform">@#node.host.Platform#@@#node.host.PlatformVersion ? '-' + node.host.PlatformVersion : ''#@</span>\n <span v-if="node.host.Arch">[@#node.host.Virtualization ? node.host.Virtualization + ':' : ''#@@#node.host.Arch#@]</span>\n </span>\n <span class="node-cell-expand" v-if="node.host.CPU">\n <span class="node-cell-expand-label">CPU:</span>\n @#node.host.CPU.join(",")#@ (@#node.cpu.percent#@%)\n </span>\n <span class="node-cell-expand" v-if="node.host.GPU">\n <span class="node-cell-expand-label">GPU:</span>\n @#node.host.GPU.join(",")#@ \n (@#parseInt(node.state.GPU >=0 ? node.state.GPU : 0)#@%)\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">硬盘:</span>\n @#formatByteSize(node.state.DiskUsed)#@ / @#formatByteSize(node.host.DiskTotal)#@ (@#node.hdd.percent#@%)\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">内存:</span>\n @#formatByteSize(node.state.MemUsed)#@ / @#formatByteSize(node.host.MemTotal)#@ (@#node.memory.percent#@%)\n </span>\n <span v-if="node.host.SwapTotal > 0" class="node-cell-expand">\n <span class="node-cell-expand-label">交换:</span>\n @#formatByteSize(node.state.SwapUsed)#@ / @#formatByteSize(node.host.SwapTotal)#@\n <span>(@#toFixed2(node.state.SwapUsed / node.host.SwapTotal * 100)#@%)</span>\n </span>\n <span v-else class="node-cell-expand">\n <span class="node-cell-expand-label">交换: OFF</span>\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">流量:</span>\n <i class="arrow alternate circle down outline icon"\n style="margin: 0"></i>@#formatByteSize(node.state.NetInTransfer)#@\n <i class="arrow alternate circle up outline icon"\n style="margin: 0"></i>@#formatByteSize(node.state.NetOutTransfer)#@\n </span>\n <span class="node-cell-expand load">\n <span class="node-cell-expand-label">负载:</span>\n @#toFixed2(node.state.Load1)#@ / @#toFixed2(node.state.Load5)#@ / @#toFixed2(node.state.Load15)#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">进程数:</span>\n @#node.state.ProcessCount#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">连接数:</span>\n TCP @#node.state.TcpConnCount#@ / UDP @#node.state.UdpConnCount#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">启动:</span>\n @#formatTimestamp(node.host.BootTime)#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">活动:</span>\n @#new Date(node.lastActive).toLocaleString()#@\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">在线:</span>\n @#node.uptime#@\n </span>\n <span v-if="node.state.Temperatures && getTemperature(node.state.Temperatures, sensorList) > 0" @click="toggleDetailedTemp(node.ID)" class="node-cell-expand temp-detail" :id="`temp-${node.ID}`" temp-detail-show="0">\n <span class="node-cell-expand-label">温度:</span>\n <span :id="`temp-main-${node.ID}`" class="node-cell-expand-label">\n @#getTemperature(node.state.Temperatures, sensorList)#@°C\n <i class="bi bi-chevron-double-down"></i>\n </span>\n <span :id="`temp-detail-${node.ID}`" class="node-cell-expand-label" style="display:none">\n <span v-for="temp in node.state.Temperatures" :key="temp.Name" v-if="temp.Temperature !== 0">\n [ @#temp.Name#@ : @#temp.Temperature#@°C ]\n </span>\n <i class="bi bi-chevron-double-up"></i>\n </span>\n </span>\n <span class="node-cell-expand">\n <span class="node-cell-expand-label">版本:</span>\n @#node.host.Version#@\n </span>\n <span class="node-echarts-expand">\n <div class="chartbox" :id="`chart-${node.ID}`" chartbox-show="0" :key="node.ID" style="width: 100%; height: auto;"></div>\n </span>\n </div>\n </div>\n </td>\n </tr>\n </template>\n </tbody>\n</table>\n\n </div>\n</template>\n<div class="modal fade" id="mapChartBox" tabindex="-1" role="dialog" aria-labelledby="mapChartTitle" aria-hidden="true" style="padding-left:0">\n <div class="modal-dialog modal-lg modal-dialog-centered">\n <div class="modal-content">\n <div class="modal-header">\n <h4 class="modal-title" id="mapChartTitle">\n <i class="bi bi-geo-alt"></i>\n <span>服务器世界分布图</span>\n </h4>\n <i class="bi bi-x xclose" data-dismiss="modal" aria-label="Close"></i>\n </div>\n <div class="modal-body">\n <div id="mapChart"></div>\n </div>\n </div>\n </div>\n</div>\n\n </section>\n <footer class="container-fluid">\n <p>Server Status | Theme ServerStatus | Powered by <a target="_blank" href="https://github.com/naiba/nezha">哪吒监控</a> 0.20.6</p>\n </footer>\n <aside class="toolbox">\n <template v-if="showTools">\n <span v-if="page=='index' && countryMapChartData.length!=0" class="showMapChart">\n <i @click="showMapChart" data-toggle="modal" data-target="#mapChartBox" class="bi bi-geo-alt"></i>\n </span>\n <span class="toggleView">\n <i v-if="showGroup" @click="toggleShowGroup" class="show-nogroup bi bi-justify"></i>\n <i v-else @click="toggleShowGroup" class="show-group bi bi-view-stacked"></i>\n </span>\n <span class="toggleSemiTransparent" @click="toggleSemiTransparent">\n <i class="bi" :class="semiTransparent ? 'bi-droplet' : 'bi-droplet-half'"></i>\n </span>\n </template>\n <span v-if="!showTools">\n <i @click="toggleShowTools" class="bi bi-three-dots"></i>\n </span>\n <span class="setTheme">\n <i v-if="theme === 'light'" @click="setTheme('dark')" class="setTheme-dark bi bi-moon-fill"></i>\n <i v-else @click="setTheme('light')" class="setTheme-light bi bi-brightness-high-fill"></i>\n </span>\n <span v-if="showGoTop" class="showGoTop">\n <i @click="goTop" class="goTop bi bi-arrow-up"></i>\n </span>\n </aside>\n <template v-if="semiTransparent">\n <link rel="stylesheet" href="/static/theme-server-status/css/light.plus.css?v20241008">\n \t<link rel="stylesheet" href="/static/theme-server-status/css/dark.plus.css?v20241008"> \n </template>\n</div>\n<style>\r\n/* 手机端(屏幕宽度小于 1080px)样式 */\r\n@media (max-width: 1080px) {\r\n .load {\r\n display: none; /* 隐藏负载列 */\r\n }\r\n .os {\r\n display: none; /* 隐藏负载列 */\r\n }\r\n .traffic {\r\n display: block; /* 隐藏负载列 */\r\n }\r\n.name {\r\n width: 10px; /* 将宽度固定为 30px */\r\n overflow: hidden; /* 隐藏超出部分 */\r\n white-space: nowrap; /* 禁止换行 */\r\n text-overflow: ellipsis; /* 如果内容超过宽度,显示省略号 */\r\n}\r\n}\r\nbody[theme]::before {\r\n background-image: url(); /* 替换为自己的背景图片链接 */\r\n}\r\n\r\n}\r\n</style>\r\n<!-- 默认半透明模式 -->\r\n<script>\r\n// server-status 默认开启分组\r\n localStorage.setItem("showGroup", true)\r\n// server-status 主题默认半透明模式\r\n localStorage.setItem('semiTransparent', true); \r\n</script>\r\n\r\n<!-- Logo设置 -->\r\n<script>\r\n document.addEventListener('DOMContentLoaded', function() {\r\n var logo = document.querySelector('.navbar-brand img');\r\n if (logo) {\r\n logo.src = ''; /* 替换为自己的 Logo 图片链接 */\r\n }\r\n });\r\n</script>\r\n\r\n<!-- Favicon设置 -->\r\n<script>\r\n var faviconurl = "https://yourlogo.png"; /* 替换为自己的 Logo 图片链接 */\r\n var link = document.querySelector("link[rel*='icon']") || document.createElement('link');\r\n link.type = 'image/png';\r\n link.rel = 'shortcut icon';\r\n link.href = faviconurl;\r\n document.getElementsByTagName('head')[0].appendChild(link);\r\n</script>\n</body>\n</html>\n\n<script>\n new Vue({\n el: '#app',\n delimiters: ['@#', '#@'],\n data: {\n page: 'index',\n defaultTemplate: "server-status",\n templates: {"angel-kanade":"AngelKanade","custom":"Custom(local)","daynight":"JackieSung DayNight","default":"Default","hotaru":"Hotaru","mdui":"Neko Mdui","server-status":"ServerStatus"},\n cache: [],\n servers: [],\n nodesTag: [],\n nodesNoTag: [],\n additional: {},\n chartDataList: [],\n ws: null,\n language: "zh-CN",\n countryMap: {},\n countryServer: [],\n countryNameMap: {},\n countryMapChartData: [],\n countryMapGeoFile: localStorage.getItem("countryMapGeoFile") ? localStorage.getItem("countryMapGeoFile") : 'nezha.world.geo.json',\n sensorList: [\n 'TC0D', \n 'TC0H', \n 'TC0P', \n 'k10temp', \n 'k10temp_tctl', \n 'coretemp_package_id_0', \n 'cpu_thermal_zone', \n 'cpu-thermal', \n 'soc_thermal', \n 'cpu_thermal', \n 'ACPI\\ThermalZone\\TZ0__0', \n 'ACPI\\ThermalZone\\CPUZ_0', \n 'ACPI\\ThermalZone\\TZ00_0', \n 'ACPI\\ThermalZone\\TZ001_0', \n 'ACPI\\ThermalZone\\THM0_0' \n ]\n },\n mixins: [mixinsVue],\n created() {\n this.servers = JSON.parse('{\u0022now\u0022:1730572266000,\u0022servers\u0022:[{\u0022ID\u0022:1,\u0022CreatedAt\u0022:\u00222024-10-31T10:46:41.573235339Z\u0022,\u0022UpdatedAt\u0022:\u00222024-10-31T10:46:41.573235339Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Buyvm卢森堡\u0022,\u0022Tag\u0022:\u0022欧洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002211.10\u0022,\u0022CPU\u0022:[\u0022AMD Ryzen 9 3900X 12-Core Processor 1 Virtual Core\u0022],\u0022MemTotal\u0022:483692544,\u0022DiskTotal\u0022:10471305216,\u0022SwapTotal\u0022:1073737728,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022kvm\u0022,\u0022BootTime\u0022:1730370721,\u0022CountryCode\u0022:\u0022lu\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:1.0101010110215476,\u0022MemUsed\u0022:259260416,\u0022SwapUsed\u0022:156413952,\u0022DiskUsed\u0022:4565680128,\u0022NetInTransfer\u0022:34916875981,\u0022NetOutTransfer\u0022:23073719624,\u0022NetInSpeed\u0022:2430,\u0022NetOutSpeed\u0022:1496,\u0022Uptime\u0022:201545,\u0022Load1\u0022:0,\u0022Load5\u0022:0.01,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:25,\u0022UdpConnCount\u0022:2,\u0022ProcessCount\u0022:99,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:06.543878678Z\u0022},{\u0022ID\u0022:2,\u0022CreatedAt\u0022:\u00220001-01-01T00:00:00Z\u0022,\u0022UpdatedAt\u0022:\u00222024-10-31T10:49:30.90913581Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Sakura美西\u0022,\u0022Tag\u0022:\u0022美洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002211.11\u0022,\u0022CPU\u0022:[\u0022AMD Ryzen 9 7900 12-Core Processor 1 Virtual Core\u0022],\u0022MemTotal\u0022:1011445760,\u0022DiskTotal\u0022:9935609856,\u0022SwapTotal\u0022:535818240,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022kvm\u0022,\u0022BootTime\u0022:1730289830,\u0022CountryCode\u0022:\u0022us\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:447959040,\u0022SwapUsed\u0022:165953536,\u0022DiskUsed\u0022:3371384832,\u0022NetInTransfer\u0022:104326289612,\u0022NetOutTransfer\u0022:12786637210,\u0022NetInSpeed\u0022:486,\u0022NetOutSpeed\u0022:537,\u0022Uptime\u0022:282436,\u0022Load1\u0022:0,\u0022Load5\u0022:0,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:13,\u0022UdpConnCount\u0022:3,\u0022ProcessCount\u0022:89,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:06.33851176Z\u0022},{\u0022ID\u0022:3,\u0022CreatedAt\u0022:\u00222024-10-31T10:49:20.613662492Z\u0022,\u0022UpdatedAt\u0022:\u00222024-10-31T10:49:20.613662492Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Claw香港\u0022,\u0022Tag\u0022:\u0022亚洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002212.7\u0022,\u0022CPU\u0022:[\u0022Intel(R) Xeon(R) Platinum 1 Virtual Core\u0022],\u0022MemTotal\u0022:968704000,\u0022DiskTotal\u0022:20961435648,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1730365583,\u0022CountryCode\u0022:\u0022hk\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0.8474576254673926,\u0022MemUsed\u0022:361005056,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:1042272256,\u0022NetInTransfer\u0022:11947094400,\u0022NetOutTransfer\u0022:9604676436,\u0022NetInSpeed\u0022:568,\u0022NetOutSpeed\u0022:799,\u0022Uptime\u0022:206682,\u0022Load1\u0022:0.02,\u0022Load5\u0022:0.02,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:10,\u0022UdpConnCount\u0022:5,\u0022ProcessCount\u0022:68,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:05.946903176Z\u0022},{\u0022ID\u0022:4,\u0022CreatedAt\u0022:\u00222024-10-31T10:49:59.480966571Z\u0022,\u0022UpdatedAt\u0022:\u00222024-10-31T10:49:59.480966571Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022DiyLink香港\u0022,\u0022Tag\u0022:\u0022亚洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002211.11\u0022,\u0022CPU\u0022:[\u0022Intel Core Processor (Haswell, no TSX, IBRS) 1 Virtual Core\u0022],\u0022MemTotal\u0022:1011396608,\u0022DiskTotal\u0022:47720767488,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022kvm\u0022,\u0022BootTime\u0022:1729392268,\u0022CountryCode\u0022:\u0022hk\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:2.521008405827597,\u0022MemUsed\u0022:469118976,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:6280396800,\u0022NetInTransfer\u0022:1367480265,\u0022NetOutTransfer\u0022:1015155400,\u0022NetInSpeed\u0022:1651,\u0022NetOutSpeed\u0022:1017,\u0022Uptime\u0022:1179998,\u0022Load1\u0022:0,\u0022Load5\u0022:0.03,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:56,\u0022UdpConnCount\u0022:4,\u0022ProcessCount\u0022:113,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:06.455857431Z\u0022},{\u0022ID\u0022:5,\u0022CreatedAt\u0022:\u00222024-10-31T10:51:19.673203558Z\u0022,\u0022UpdatedAt\u0022:\u00222024-10-31T10:51:19.673203558Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022阿里云香港\u0022,\u0022Tag\u0022:\u0022亚洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022ubuntu\u0022,\u0022PlatformVersion\u0022:\u002222.04\u0022,\u0022CPU\u0022:[\u0022Intel(R) Xeon(R) Platinum 2 Virtual Core\u0022],\u0022MemTotal\u0022:933793792,\u0022DiskTotal\u0022:41882943488,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1722053660,\u0022CountryCode\u0022:\u0022hk\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0.42372872526962085,\u0022MemUsed\u0022:439123968,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:4124880896,\u0022NetInTransfer\u0022:79362852035,\u0022NetOutTransfer\u0022:74099159832,\u0022NetInSpeed\u0022:746,\u0022NetOutSpeed\u0022:922,\u0022Uptime\u0022:8518605,\u0022Load1\u0022:0,\u0022Load5\u0022:0.01,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:10,\u0022UdpConnCount\u0022:3,\u0022ProcessCount\u0022:112,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:05.898799113Z\u0022},{\u0022ID\u0022:6,\u0022CreatedAt\u0022:\u00222024-11-01T12:10:13.607354828Z\u0022,\u0022UpdatedAt\u0022:\u00222024-11-01T12:10:13.607354828Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022Aws日本\u0022,\u0022Tag\u0022:\u0022亚洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002211.11\u0022,\u0022CPU\u0022:[\u0022Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz 2 Physical Core\u0022],\u0022MemTotal\u0022:475582464,\u0022DiskTotal\u0022:20893278208,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1730462888,\u0022CountryCode\u0022:\u0022jp\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:1.21951219506424,\u0022MemUsed\u0022:111136768,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:1198370816,\u0022NetInTransfer\u0022:25244057732,\u0022NetOutTransfer\u0022:15426737054,\u0022NetInSpeed\u0022:221,\u0022NetOutSpeed\u0022:297,\u0022Uptime\u0022:109378,\u0022Load1\u0022:0.02,\u0022Load5\u0022:0.01,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:8,\u0022UdpConnCount\u0022:4,\u0022ProcessCount\u0022:68,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:06.168326405Z\u0022},{\u0022ID\u0022:7,\u0022CreatedAt\u0022:\u00222024-11-01T12:12:39.905314726Z\u0022,\u0022UpdatedAt\u0022:\u00222024-11-01T12:12:39.905314726Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022阿里云香港\u0022,\u0022Tag\u0022:\u0022亚洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022Microsoft Windows Server 2012 R2 Datacenter\u0022,\u0022PlatformVersion\u0022:\u0022\u0022,\u0022CPU\u0022:[\u0022Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz 1 Physical Core\u0022],\u0022MemTotal\u0022:1073205248,\u0022DiskTotal\u0022:42947571712,\u0022SwapTotal\u0022:5368709120,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1729946361,\u0022CountryCode\u0022:\u0022hk\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:0,\u0022MemUsed\u0022:646074368,\u0022SwapUsed\u0022:67854336,\u0022DiskUsed\u0022:18581389312,\u0022NetInTransfer\u0022:141956781,\u0022NetOutTransfer\u0022:98379997,\u0022NetInSpeed\u0022:259,\u0022NetOutSpeed\u0022:388,\u0022Uptime\u0022:625905,\u0022Load1\u0022:0.9481809281034936,\u0022Load5\u0022:1.1573033620399136,\u0022Load15\u0022:1.295983224682543,\u0022TcpConnCount\u0022:29,\u0022UdpConnCount\u0022:12,\u0022ProcessCount\u0022:39,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:06.829074449Z\u0022},{\u0022ID\u0022:8,\u0022CreatedAt\u0022:\u00222024-11-01T13:58:37.62774767Z\u0022,\u0022UpdatedAt\u0022:\u00222024-11-01T13:58:37.62774767Z\u0022,\u0022DeletedAt\u0022:null,\u0022Name\u0022:\u0022谷歌云香港\u0022,\u0022Tag\u0022:\u0022亚洲\u0022,\u0022DisplayIndex\u0022:0,\u0022HideForGuest\u0022:false,\u0022EnableDDNS\u0022:false,\u0022Host\u0022:{\u0022Platform\u0022:\u0022debian\u0022,\u0022PlatformVersion\u0022:\u002212.7\u0022,\u0022CPU\u0022:[\u0022Intel(R) Xeon(R) CPU @ 2.20GHz 2 Virtual Core\u0022],\u0022MemTotal\u0022:4115369984,\u0022DiskTotal\u0022:10331889664,\u0022SwapTotal\u0022:0,\u0022Arch\u0022:\u0022x86_64\u0022,\u0022Virtualization\u0022:\u0022\u0022,\u0022BootTime\u0022:1730468843,\u0022CountryCode\u0022:\u0022hk\u0022,\u0022Version\u0022:\u00220.20.3\u0022,\u0022GPU\u0022:null},\u0022State\u0022:{\u0022CPU\u0022:1.2499999999545253,\u0022MemUsed\u0022:553758720,\u0022SwapUsed\u0022:0,\u0022DiskUsed\u0022:2272104448,\u0022NetInTransfer\u0022:61393049896,\u0022NetOutTransfer\u0022:15203068718,\u0022NetInSpeed\u0022:467,\u0022NetOutSpeed\u0022:556,\u0022Uptime\u0022:103423,\u0022Load1\u0022:0.03,\u0022Load5\u0022:0.03,\u0022Load15\u0022:0,\u0022TcpConnCount\u0022:16,\u0022UdpConnCount\u0022:9,\u0022ProcessCount\u0022:84,\u0022Temperatures\u0022:null,\u0022GPU\u0022:0},\u0022LastActive\u0022:\u00222024-11-02T18:31:06.29751588Z\u0022}]}').servers;\n this.additional = this.initAdditional(this.servers);\n if(this.showGroup) {\n this.nodesTag = this.groupingData(this.handleNodes(this.servers),"Tag");\n this.nodesTag.forEach(group => {\n group.data.forEach(item => {\n const additionalData = this.additional[item.ID];\n if (additionalData) {\n item.additional = additionalData; \n }\n });\n });\n } else {\n this.nodesNoTag = this.handleNodes(this.servers);\n this.nodesNoTag.forEach(item => {\n const additionalData = this.additional[item.ID];\n if (additionalData) {\n item.additional = additionalData; \n }\n });\n }\n this.initCountryMap().then(countryMap => {\n this.countryMap = countryMap;\n this.countryNameMap = this.initCountryNameMap();\n this.countryServer = this.initCountryServer();\n this.countryMapChartData = this.initCountryMapChartData();\n });\n },\n mounted() {\n \n this.connect();\n \n document.addEventListener("visibilitychange", () => {\n if (document.visibilityState === "visible") {\n setTimeout(() => {\n if (document.hasFocus()) {\n this.connect();\n }\n }, 200);\n }\n });\n },\n methods: {\n initAdditional(servers) {\n let nodes = {};\n servers?.forEach(server => {\n if (server.PublicNote) {\n const remainingFormat = this.getRemainingFormat(server.live, server.PublicNote);\n const remainingDays = this.getRemainingDays(this.getNoteElementValue(server.PublicNote, "billingDataMod", "endDate"), server.PublicNote);\n const remainingPercent = this.getRemainingPercent(\n this.getNoteElementValue(server.PublicNote, "billingDataMod", "startDate"),\n this.getNoteElementValue(server.PublicNote, "billingDataMod", "endDate"),\n server.PublicNote\n );\n const priceAmount = this.getNoteElementValue(server.PublicNote, "billingDataMod", "amount");\n const priceCycle = this.getNoteElementValue(server.PublicNote, "billingDataMod", "cycle");\n\n \n nodes[server.ID] = {\n "remaining": {},\n "price": {}\n };\n\n if (remainingFormat) {\n nodes[server.ID].remaining.format = remainingFormat;\n }\n\n if (remainingDays) {\n nodes[server.ID].remaining.days = remainingDays;\n }\n\n if (remainingPercent) {\n nodes[server.ID].remaining.percent = this.toFixed2(100 - remainingPercent);\n }\n\n if (priceAmount) {\n nodes[server.ID].price.amount = priceAmount;\n }\n\n if (priceCycle && priceAmount) {\n nodes[server.ID].price.cycle = priceCycle;\n }\n }\n });\n return nodes;\n },\n initCountryMap() {\n return fetch(this.staticUrl + '/maps/nezha.countrymap.json')\n .then(response => response.json())\n .then(data => {\n return data;\n })\n },\n initCountryNameMap(){\n const result = {};\n for (const item in this.countryMap) {\n result[this.countryMap[item].en] = this.language=='zh-CN' ? this.countryMap[item].zh : this.countryMap[item].en;\n }\n return result;\n },\n initCountryServer() {\n let count = {};\n let result = [];\n let exist = {};\n this.servers.forEach(item => {\n if (item.Host.CountryCode) {\n if(this.countryMapGeoFile == 'nezha.world.geo.json' || this.countryMapGeoFile == 'nezha.world.antarctica.geo.json') {\n if(item.Host.CountryCode.toLowerCase() == 'tw' || item.Host.CountryCode.toLowerCase() == 'hk' || item.Host.CountryCode.toLowerCase() == 'mo') item.Host.CountryCode = 'cn';\n }\n if (!exist[item.Host.CountryCode]) {\n exist[item.Host.CountryCode] = true;\n count[item.Host.CountryCode] = 1;\n const obj = {\n 'countryCode': item.Host.CountryCode,\n 'count': count[item.Host.CountryCode]\n };\n result.push(obj);\n } else {\n count[item.Host.CountryCode]++;\n result.find(obj => obj.countryCode === item.Host.CountryCode).count = count[item.Host.CountryCode];\n }\n }\n });\n return result;\n },\n initCountryMapChartData(){\n let result = [];\n this.countryServer.forEach(item => {\n var obj = {\n "name": this.language=='zh-CN' ? this.countryMap[item.countryCode].zh : this.countryMap[item.countryCode].en,\n "value": item.count\n }\n result.push(obj);\n });\n return result;\n },\n showMapChart(){\n \n if( this.countryMapChartData.length == 0 ) {\n console.log('init countryMapChartData not complete');\n return;\n }\n const unit = this.language=='zh-CN' ? '台' : 'servers';\n const width = window.innerWidth;\n const height = 0.95 * window.innerHeight;\n const backgroundColor = this.theme == "dark" ? '' : '';\n const inRangeColor = this.theme == "dark" ? '#D2B206' : '#FFDF32';\n const tooltipBackgroundColor = this.theme == "dark" ? "#ffffff" : '#ffffff';\n const tooltipBorderColor = this.theme == "dark" ? "#ffffff" : "#ffffff"; \n const fontSize = this.isMobile ? 10 : 12;\n const fontColor = this.theme == "dark" ? "#000000" : "#000000"; \n const showLoadingMaskColor = this.theme == "dark" ? 'rgba(28, 29, 38, 1)' : 'rgba(249, 249, 249, 1)';\n const showLoadingTextColor = this.theme == "dark" ? 'rgba(241, 241, 241, 1)' : 'rgba(0, 0, 0, 1)';\n const showLoadingColor = inRangeColor; \n const chartContainer = document.getElementById('mapChart');\n const mapChart = echarts.init(chartContainer, '', { \n renderer: 'canvas',\n useDirtyRect: false,\n width: width,\n height: height,\n });\n mapChart.showLoading({\n text: 'loading',\n textColor: showLoadingTextColor,\n color: showLoadingColor,\n maskColor: showLoadingMaskColor,\n zlevel: 2\n });\n fetch(this.staticUrl + '/maps/' + this.countryMapGeoFile)\n .then(response => response.json())\n .then(worldMap => {\n echarts.registerMap('nezha-world-map', worldMap);\n const option = {\n title: {\n show: false,\n },\n backgroundColor: backgroundColor,\n grid: {\n top: 0,\n left: 10,\n right: 10\n },\n tooltip: {\n trigger: 'item',\n formatter: function (params) {\n if (params.data && params.data.value > 0) {\n return params.name + ' ' + params.data.value + ' ' + unit;\n } else {\n return '';\n }\n },\n backgroundColor: tooltipBackgroundColor,\n borderColor: tooltipBorderColor,\n padding: [4,10],\n textStyle: {\n fontSize: fontSize,\n color: fontColor\n }\n },\n visualMap: {\n show: false,\n min: 0,\n max: 1000,\n calculable: false,\n inRange: {\n color: inRangeColor\n }\n },\n series: [\n {\n type: 'map',\n map: 'nezha-world-map',\n roam: true,\n label: {\n show: false,\n fontSize: 8\n },\n data: this.countryMapChartData,\n nameMap: this.countryNameMap,\n }\n ]\n };\n setTimeout(() => {\n mapChart.hideLoading();\n mapChart.setOption(option);\n }, 1000);\n });\n },\n isWindowsPlatform(str) {\n return str.includes('Windows')\n },\n getPlatformName(str){\n if (str.toLowerCase().includes('opensuse')) {\n return 'openSUSE';\n }\n return str;\n },\n getFontLogoClass(str) {\n if (["almalinux",\n "alpine",\n "aosc",\n "apple",\n "archlinux",\n "archlabs",\n "artix",\n "budgie",\n "centos",\n "coreos",\n "debian",\n "deepin",\n "devuan",\n "docker",\n "elementary",\n "fedora",\n "ferris",\n "flathub",\n "freebsd",\n "gentoo",\n "gnu-guix",\n "illumos",\n "kali-linux",\n "linuxmint",\n "mageia",\n "mandriva",\n "manjaro",\n "nixos",\n "openbsd",\n "opensuse",\n "pop-os",\n "raspberry-pi",\n "redhat",\n "rocky-linux",\n "sabayon",\n "slackware",\n "snappy",\n "solus",\n "tux",\n "ubuntu",\n "void",\n "zorin"].indexOf(str)\n > -1) {\n return str;\n }\n if (str == 'darwin') {\n return 'apple';\n }\n if (['openwrt', 'linux', "immortalwrt"].indexOf(str) > -1) {\n return 'tux';\n }\n if (str == 'amazon') {\n return 'redhat';\n }\n if (str == 'arch') {\n return 'archlinux';\n }\n if (str.toLowerCase().includes('opensuse')) {\n return 'opensuse';\n }\n return '';\n },\n secondToDate(s) {\n const d = Math.floor(s / 3600 / 24);\n if (d > 0) {\n return d + ' 天'\n }\n const h = Math.floor(s / 3600 % 24);\n const m = Math.floor(s / 60 % 60);\n const second = Math.floor(s % 60);\n return h + ":" + ("0" + m).slice(-2) + ":" + ("0" + second).slice(-2);\n },\n formatTimestamp(t) {\n return new Date(t * 1000).toLocaleString()\n },\n formatByteSize(bs) {\n const x = this.readableBytes(bs)\n return x !== "NaN undefined" ? x : '0B'\n },\n formatPercent(live, used, total) {\n \n const percent = (this.toFixed2(used / total * 100) || 0)\n return this.formatPercents(live,percent)\n },\n formatPercents(live,percent) {\n \n if (isNaN(percent)) {\n percent = 0;\n }\n if (percent <= 0) {\n percent = 0;\n }\n if (percent >= 100) {\n percent = 100;\n }\n if (!this.cache[percent]) {\n this.cache[percent] = {\n class: 'progress-bar progress-bar-success',\n style: `width: ${parseInt(percent)+1}%`,\n percent,\n }\n if (percent < 80) {\n this.cache[percent].class = 'progress-bar progress-bar-success'\n } else if (percent < 90) {\n this.cache[percent].class = 'progress-bar progress-bar-warning'\n } else {\n this.cache[percent].class = 'progress-bar progress-bar-danger'\n }\n }\n return this.cache[percent]\n },\n readableBytes(bytes) {\n if (!bytes) {\n return '0B'\n }\n const i = Math.floor(Math.log(bytes) / Math.log(1024)),\n sizes = ["B", "K", "M", "G", "T", "P", "E", "Z", "Y"];\n return parseFloat((bytes / Math.pow(1024, i)).toFixed(2)) + sizes[i];\n },\n connect() {\n \n if (this.ws && this.ws.readyState === WebSocket.OPEN) {\n console.log('Closing old WebSocket connection...');\n this.ws.close();\n }\n const wsProtocol = window.location.protocol === "https:" ? "wss" : "ws";\n this.ws = new WebSocket(wsProtocol + '://' + window.location.host + '/ws');\n\n this.ws.onopen = function () {\n console.log("Connection open ...")\n }\n this.ws.onmessage = (evt) => {\n let jsonData = evt.data\n const data = JSON.parse(jsonData)\n for (let i = 0; i < data.servers?.length; i++) {\n const ns = data.servers[i];\n if (!ns.Host) {\n data.servers[i].live = false\n } else {\n const lastActive = new Date(ns.LastActive).getTime()\n data.servers[i].live = data.now - lastActive <= 10 * 1000;\n }\n }\n if(this.showGroup) {\n this.nodesTag = this.groupingData(this.handleNodes(data.servers),"Tag");\n this.nodesTag.forEach(group => {\n group.data.forEach(item => {\n const additionalData = this.additional[item.ID];\n if (additionalData) {\n item.additional = additionalData; \n }\n });\n });\n } else {\n this.nodesNoTag = this.handleNodes(data.servers);\n this.nodesNoTag.forEach(item => {\n const additionalData = this.additional[item.ID];\n if (additionalData) {\n item.additional = additionalData; \n }\n });\n }\n }\n this.ws.onclose = () => {\n setTimeout(() => {\n this.connect();\n }, 5000);\n };\n this.ws.onerror = () => {\n this.ws.close()\n }\n },\n handleNodes(servers) {\n let nodes = []\n servers?.forEach(server => {\n let platform = server.Host.Platform;\n if (this.isWindowsPlatform(platform)) {\n platform = "windows"\n }else if (platform === "immortalwrt") {\n platform = "openwrt"\n }\n let node = {\n ID: server.ID,\n name: server.Name,\n os: platform,\n location: server.Host.CountryCode,\n stateuptime: server.State.Uptime,\n uptime: this.secondToDate(server.State.Uptime),\n load: this.toFixed2(server.State.Load1),\n network: this.getNetworkSpeed(server.State.NetInSpeed, server.State.NetOutSpeed),\n traffic: this.formatByteSize(server.State.NetInTransfer) + ' | ' + this.formatByteSize(server.State.NetOutTransfer),\n cpu: this.formatPercents(server.live, this.toFixed2(server.State.CPU)),\n memory: this.formatPercent(server.live, server.State.MemUsed, server.Host.MemTotal),\n hdd: this.formatPercent(server.live, server.State.DiskUsed, server.Host.DiskTotal),\n online: server.live,\n state: server.State,\n host: server.Host,\n lastActive: server.LastActive,\n Tag: server.Tag,\n }\n nodes.push(node)\n })\n return nodes;\n },\n getNetworkSpeed(netInSpeed, netOutSpeed) {\n return this.formatByteSize(netInSpeed) + ' | ' + this.formatByteSize(netOutSpeed)\n },\n toggleDetailedTemp(id){\n const tempDom = document.getElementById(`temp-${id}`); \n const tempDetailShow = tempDom.getAttribute('temp-detail-show');\n const tempMain = document.getElementById(`temp-main-${id}`); \n const tempDetail = document.getElementById(`temp-detail-${id}`); \n if (tempDetailShow == 0){\n tempMain.style.display = 'none';\n tempDetail.style.display = 'inline';\n tempDom.setAttribute('temp-detail-show', 1);\n } else {\n tempMain.style.display = 'inline';\n tempDetail.style.display = 'none';\n tempDom.setAttribute('temp-detail-show', 0);\n }\n },\n getTemperature(temperatureList, sensorList) {\n \n const lowerCaseSensorList = sensorList.map(sensor => sensor.toLowerCase());\n\n \n const filtered = temperatureList.filter(item => ite
services.http.response.favicons.size 283
services.http.response.favicons.name http://104.244.75.153:8008/static/logo.svg
services.http.response.favicons.md5_hash fcc0a7d935368969f5fb3a99d8fa9edc
services.http.response.favicons.hashes md5:fcc0a7d935368969f5fb3a99d8fa9edc
services.http.response.favicons.hashes sha256:a33e3843ee1e8c932c5a33e1149f77ade81efc31f9a7087059e7bf136648425d
services.http.response.favicons.shodan_hash -1987640101
services.http.response.body_hashes sha256:018600a8f0b8708d3b58984251c4fa0dabba9919f382f358c28c79ee861c07bf
services.http.response.body_hashes sha1:c286e2e3bb05abb4d275d99ee9f56739ab9fbe8f
services.http.response.body_hash sha1:c286e2e3bb05abb4d275d99ee9f56739ab9fbe8f
services.http.response.html_title Server Status
services.http.supports_http2 false
services.labels bootstrap
services.labels echarts
services.labels jquery
services.labels semantic-ui
services.labels vue.js
services.observed_at 2024-11-02T18:31:06.773328993Z
services.perspective_id PERSPECTIVE_HE
services.port 8008
services.service_name HTTP
services.source_ip 162.142.125.222
services.transport_protocol TCP
services.truncated false