Update templates/index.html
Browse files- templates/index.html +182 -182
templates/index.html
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
-
<html lang="
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
@@ -835,17 +835,17 @@
|
|
| 835 |
<div class="col-md-8">
|
| 836 |
<h2 class="section-title mb-0">
|
| 837 |
<i class="bi bi-graph-up text-warning me-2"></i>
|
| 838 |
-
|
| 839 |
</h2>
|
| 840 |
</div>
|
| 841 |
<div class="col-md-4 text-end">
|
| 842 |
{% if data.source_rir != 'Bilinmiyor' %}
|
| 843 |
<span class="badge badge-success fs-6">
|
| 844 |
-
<i class="bi bi-shield-check me-1"></i>
|
| 845 |
</span>
|
| 846 |
{% endif %}
|
| 847 |
<span class="badge badge-info fs-6 ms-2">
|
| 848 |
-
<i class="bi bi-diagram-3 me-1"></i>IP
|
| 849 |
</span>
|
| 850 |
</div>
|
| 851 |
</div>
|
|
@@ -858,7 +858,7 @@
|
|
| 858 |
<div class="card-header">
|
| 859 |
<h5 class="mb-0">
|
| 860 |
<i class="bi bi-diagram-3-fill me-2"></i>
|
| 861 |
-
|
| 862 |
</h5>
|
| 863 |
</div>
|
| 864 |
<div class="card-body">
|
|
@@ -867,16 +867,16 @@
|
|
| 867 |
{% if bgpview_prefix %}
|
| 868 |
<div class="col-lg-6">
|
| 869 |
<h6 class="text-primary fw-semibold border-bottom pb-2 mb-3">
|
| 870 |
-
<i class="bi bi-signpost-split-fill me-2"></i>
|
| 871 |
</h6>
|
| 872 |
<dl class="row">
|
| 873 |
<dt class="col-sm-4">Prefix</dt>
|
| 874 |
<dd class="col-sm-8">{{ bgpview_prefix.prefix }}</dd>
|
| 875 |
|
| 876 |
-
<dt class="col-sm-4">Prefix
|
| 877 |
<dd class="col-sm-8">{{ bgpview_prefix.name }}</dd>
|
| 878 |
|
| 879 |
-
<dt class="col-sm-4">
|
| 880 |
<dd class="col-sm-8">{{ bgpview_prefix.description }}</dd>
|
| 881 |
</dl>
|
| 882 |
</div>
|
|
@@ -886,28 +886,28 @@
|
|
| 886 |
{% if peeringdb_data %}
|
| 887 |
<div class="col-lg-6">
|
| 888 |
<h6 class="text-primary fw-semibold border-bottom pb-2 mb-3">
|
| 889 |
-
<i class="bi bi-building-fill-gear me-2"></i>
|
| 890 |
</h6>
|
| 891 |
<dl class="row">
|
| 892 |
-
<dt class="col-sm-5">
|
| 893 |
<dd class="col-sm-7">{{ peeringdb_data.name }} (AS{{ origin_asn }})</dd>
|
| 894 |
|
| 895 |
-
<dt class="col-sm-5">
|
| 896 |
<dd class="col-sm-7">
|
| 897 |
{% if peeringdb_data.website %}
|
| 898 |
<a href="{{ peeringdb_data.website }}" target="_blank">{{ peeringdb_data.website }}</a>
|
| 899 |
{% else %}
|
| 900 |
-
|
| 901 |
{% endif %}
|
| 902 |
</dd>
|
| 903 |
|
| 904 |
-
<dt class="col-sm-5">
|
| 905 |
<dd class="col-sm-7">{{ peeringdb_data.traffic_type }}</dd>
|
| 906 |
|
| 907 |
-
<dt class="col-sm-5">
|
| 908 |
<dd class="col-sm-7">{{ peeringdb_data.prefix_count_ipv4 }} / {{ peeringdb_data.prefix_count_ipv6 }}</dd>
|
| 909 |
|
| 910 |
-
<dt class="col-sm-5">Peering
|
| 911 |
<dd class="col-sm-7">{{ peeringdb_data.policy }}</dd>
|
| 912 |
</dl>
|
| 913 |
</div>
|
|
@@ -925,26 +925,26 @@
|
|
| 925 |
<div class="card-header">
|
| 926 |
<h5 class="mb-0">
|
| 927 |
<i class="bi bi-info-circle-fill me-2"></i>
|
| 928 |
-
|
| 929 |
</h5>
|
| 930 |
</div>
|
| 931 |
<div class="card-body">
|
| 932 |
<div class="row">
|
| 933 |
<div class="col-md-6">
|
| 934 |
<dl>
|
| 935 |
-
<dt class="text-primary fw-semibold">
|
| 936 |
<dd class="mb-3">{{ data.summary.name }}</dd>
|
| 937 |
|
| 938 |
<dt class="text-primary fw-semibold">Handle</dt>
|
| 939 |
<dd class="mb-3">{{ data.summary.handle }}</dd>
|
| 940 |
|
| 941 |
{% if data.summary.ip_range %}
|
| 942 |
-
<dt class="text-primary fw-semibold">IP
|
| 943 |
<dd class="mb-3">{{ data.summary.ip_range }}</dd>
|
| 944 |
{% endif %}
|
| 945 |
|
| 946 |
{% if data.summary.asn_range %}
|
| 947 |
-
<dt class="text-primary fw-semibold">ASN
|
| 948 |
<dd class="mb-3">{{ data.summary.asn_range }}</dd>
|
| 949 |
{% endif %}
|
| 950 |
</dl>
|
|
@@ -954,11 +954,11 @@
|
|
| 954 |
<!-- YENİ: Kaydı yapan kuruluşu bulmak için mantık eklendi -->
|
| 955 |
{% set org_contact = (data.contacts.registrant or data.contacts.administrative or data.contacts.technical)|first %}
|
| 956 |
{% if org_contact and org_contact.org != 'Bilinmiyor' %}
|
| 957 |
-
<dt class="text-primary fw-semibold">
|
| 958 |
<dd class="mb-3">{{ org_contact.org }}</dd>
|
| 959 |
{% endif %}
|
| 960 |
|
| 961 |
-
<dt class="text-primary fw-semibold">
|
| 962 |
<dd class="mb-3">
|
| 963 |
{{ data.summary.country }}
|
| 964 |
{% if ipinfo_data and ipinfo_data.country_name %}
|
|
@@ -966,10 +966,10 @@
|
|
| 966 |
{% endif %}
|
| 967 |
</dd>
|
| 968 |
|
| 969 |
-
<dt class="text-primary fw-semibold">
|
| 970 |
<dd class="mb-3">{{ data.summary.type }}</dd>
|
| 971 |
|
| 972 |
-
<dt class="text-primary fw-semibold">IP
|
| 973 |
<dd class="mb-3">
|
| 974 |
<span class="badge badge-info">{{ data.summary.ip_class }}</span>
|
| 975 |
<small class="text-muted">{{ data.summary.ip_class_desc }}</small>
|
|
@@ -981,7 +981,7 @@
|
|
| 981 |
<!-- YENİ: Önemli Tarihler (Events) bölümü eklendi -->
|
| 982 |
{% if data.details and data.details.events %}
|
| 983 |
<hr>
|
| 984 |
-
<h6 class="text-primary fw-semibold mb-2">
|
| 985 |
<div class="row small">
|
| 986 |
{% for event in data.details.events %}
|
| 987 |
<div class="col-md-6 mb-2">
|
|
@@ -996,7 +996,7 @@
|
|
| 996 |
<!-- YENİ: Kayıt Notları (Remarks) bölümü eklendi -->
|
| 997 |
{% if data.details and data.details.remarks %}
|
| 998 |
<hr>
|
| 999 |
-
<h6 class="text-primary fw-semibold mb-2">
|
| 1000 |
{% for remark in data.details.remarks %}
|
| 1001 |
<div class="alert alert-secondary p-2 small mt-2">
|
| 1002 |
{% if remark.title %}<p class="fw-bold mb-1">{{ remark.title }}</p>{% endif %}
|
|
@@ -1019,7 +1019,7 @@
|
|
| 1019 |
<div class="card-header">
|
| 1020 |
<h5 class="mb-0">
|
| 1021 |
<i class="bi bi-people-fill me-2"></i>
|
| 1022 |
-
|
| 1023 |
</h5>
|
| 1024 |
</div>
|
| 1025 |
<div class="card-body" style="max-height: 400px; overflow-y: auto;">
|
|
@@ -1052,7 +1052,7 @@
|
|
| 1052 |
{% endfor %}
|
| 1053 |
{% endfor %}
|
| 1054 |
{% if not has_contacts %}
|
| 1055 |
-
<p class="text-muted text-center">
|
| 1056 |
{% endif %}
|
| 1057 |
</div>
|
| 1058 |
</div>
|
|
@@ -1067,7 +1067,7 @@
|
|
| 1067 |
<div class="card-header">
|
| 1068 |
<h5 class="mb-0">
|
| 1069 |
<i class="bi bi-speedometer2 me-2"></i>
|
| 1070 |
-
Ping &
|
| 1071 |
</h5>
|
| 1072 |
</div>
|
| 1073 |
<div class="card-body">
|
|
@@ -1078,7 +1078,7 @@
|
|
| 1078 |
{{ ping_data.error }}
|
| 1079 |
</div>
|
| 1080 |
{% else %}
|
| 1081 |
-
<p class="text-muted mb-3">
|
| 1082 |
<div class="ping-stats">
|
| 1083 |
<div class="ping-stat">
|
| 1084 |
<div class="ping-value">{{ ping_data.min }}</div>
|
|
@@ -1086,16 +1086,16 @@
|
|
| 1086 |
</div>
|
| 1087 |
<div class="ping-stat">
|
| 1088 |
<div class="ping-value text-warning">{{ ping_data.avg }}</div>
|
| 1089 |
-
<div class="ping-label">
|
| 1090 |
</div>
|
| 1091 |
<div class="ping-stat">
|
| 1092 |
<div class="ping-value">{{ ping_data.max }}</div>
|
| 1093 |
-
<div class="ping-label">
|
| 1094 |
</div>
|
| 1095 |
</div>
|
| 1096 |
{% endif %}
|
| 1097 |
{% else %}
|
| 1098 |
-
<p class="text-muted text-center">Ping
|
| 1099 |
{% endif %}
|
| 1100 |
</div>
|
| 1101 |
</div>
|
|
@@ -1107,7 +1107,7 @@
|
|
| 1107 |
<div class="card-header">
|
| 1108 |
<h5 class="mb-0">
|
| 1109 |
<i class="bi bi-server me-2"></i>
|
| 1110 |
-
|
| 1111 |
</h5>
|
| 1112 |
</div>
|
| 1113 |
<div class="card-body">
|
|
@@ -1115,35 +1115,35 @@
|
|
| 1115 |
<div class="col-md-6">
|
| 1116 |
<dl>
|
| 1117 |
<dt class="text-primary fw-semibold">Reverse DNS (PTR)</dt>
|
| 1118 |
-
<dd class="mb-3">{{ reverse_dns or '
|
| 1119 |
|
| 1120 |
-
<dt class="text-primary fw-semibold">Ping
|
| 1121 |
<dd class="mb-3">
|
| 1122 |
{% if ping_data and not ping_data.error %}
|
| 1123 |
-
<span class="badge badge-success">
|
| 1124 |
{% else %}
|
| 1125 |
-
<span class="badge badge-danger">
|
| 1126 |
{% endif %}
|
| 1127 |
</dd>
|
| 1128 |
</dl>
|
| 1129 |
</div>
|
| 1130 |
<div class="col-md-6">
|
| 1131 |
<dl>
|
| 1132 |
-
<dt class="text-primary fw-semibold">HTTP/HTTPS
|
| 1133 |
<dd class="mb-3">
|
| 1134 |
{% if http_headers and not http_headers.error %}
|
| 1135 |
-
<span class="badge badge-success">
|
| 1136 |
{% else %}
|
| 1137 |
-
<span class="badge badge-danger">
|
| 1138 |
{% endif %}
|
| 1139 |
</dd>
|
| 1140 |
|
| 1141 |
-
<dt class="text-primary fw-semibold">
|
| 1142 |
<dd class="mb-3">
|
| 1143 |
{% if security_report.open_ports %}
|
| 1144 |
-
<span class="badge badge-warning">{{ security_report.open_ports|length }}
|
| 1145 |
{% else %}
|
| 1146 |
-
<span class="badge badge-success">
|
| 1147 |
{% endif %}
|
| 1148 |
</dd>
|
| 1149 |
</dl>
|
|
@@ -1162,7 +1162,7 @@
|
|
| 1162 |
<div class="card-header">
|
| 1163 |
<h5 class="mb-0">
|
| 1164 |
<i class="bi bi-shield-check me-2"></i>
|
| 1165 |
-
|
| 1166 |
</h5>
|
| 1167 |
</div>
|
| 1168 |
<div class="card-body">
|
|
@@ -1173,19 +1173,19 @@
|
|
| 1173 |
<div class="security-header">
|
| 1174 |
<i class="bi bi-incognito fs-3 text-primary security-icon"></i>
|
| 1175 |
<div>
|
| 1176 |
-
<h5 class="mb-1">
|
| 1177 |
-
<p class="text-muted mb-0">Proxy, VPN, Tor
|
| 1178 |
</div>
|
| 1179 |
</div>
|
| 1180 |
|
| 1181 |
{% if security_report.proxy_vpn_tor %}
|
| 1182 |
<div class="alert alert-danger">
|
| 1183 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1184 |
-
<strong>
|
| 1185 |
</div>
|
| 1186 |
|
| 1187 |
{% if security_report.anonymity_services %}
|
| 1188 |
-
<p class="mt-3 mb-2 text-muted">
|
| 1189 |
<div>
|
| 1190 |
{% for service in security_report.anonymity_services %}
|
| 1191 |
{% set service_lower = service.lower() %}
|
|
@@ -1214,7 +1214,7 @@
|
|
| 1214 |
{% else %}
|
| 1215 |
<div class="alert alert-success">
|
| 1216 |
<i class="bi bi-check-circle me-2"></i>
|
| 1217 |
-
|
| 1218 |
</div>
|
| 1219 |
{% endif %}
|
| 1220 |
</div>
|
|
@@ -1224,27 +1224,27 @@
|
|
| 1224 |
<div class="security-header">
|
| 1225 |
<i class="bi bi-shield-lock fs-3 text-primary security-icon"></i>
|
| 1226 |
<div>
|
| 1227 |
-
<h5 class="mb-1">HTTP
|
| 1228 |
-
<p class="text-muted mb-0">
|
| 1229 |
</div>
|
| 1230 |
</div>
|
| 1231 |
{% if security_report.security_headers %}
|
| 1232 |
<div class="alert alert-success">
|
| 1233 |
<i class="bi bi-check-circle me-2"></i>
|
| 1234 |
-
<strong>{{ security_report.security_headers|length }}
|
| 1235 |
</div>
|
| 1236 |
<ul class="list-group">
|
| 1237 |
{% for header in security_report.security_headers %}
|
| 1238 |
<li class="list-group-item d-flex justify-content-between align-items-center">
|
| 1239 |
{{ header }}
|
| 1240 |
-
<span class="badge bg-success">
|
| 1241 |
</li>
|
| 1242 |
{% endfor %}
|
| 1243 |
</ul>
|
| 1244 |
{% else %}
|
| 1245 |
<div class="alert alert-warning">
|
| 1246 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1247 |
-
|
| 1248 |
</div>
|
| 1249 |
{% endif %}
|
| 1250 |
</div>
|
|
@@ -1254,8 +1254,8 @@
|
|
| 1254 |
<div class="security-header">
|
| 1255 |
<i class="bi bi-shield-lock fs-3 text-primary security-icon"></i>
|
| 1256 |
<div>
|
| 1257 |
-
<h5 class="mb-1">SSL/TLS
|
| 1258 |
-
<p class="text-muted mb-0">
|
| 1259 |
</div>
|
| 1260 |
</div>
|
| 1261 |
{% if ssl_info %}
|
|
@@ -1267,24 +1267,24 @@
|
|
| 1267 |
{% else %}
|
| 1268 |
<div class="alert {% if ssl_info.is_valid %}alert-success{% else %}alert-danger{% endif %}">
|
| 1269 |
<i class="bi {% if ssl_info.is_valid %}bi-check-circle{% else %}bi-exclamation-triangle{% endif %} me-2"></i>
|
| 1270 |
-
<strong>
|
| 1271 |
{% if ssl_info.is_valid %}
|
| 1272 |
-
|
| 1273 |
{% else %}
|
| 1274 |
-
|
| 1275 |
{% endif %}
|
| 1276 |
</div>
|
| 1277 |
|
| 1278 |
<div class="table-responsive">
|
| 1279 |
<table class="table table-sm">
|
| 1280 |
<tbody>
|
| 1281 |
-
<tr><th class="text-primary">
|
| 1282 |
-
<tr><th class="text-primary">
|
| 1283 |
-
<tr><th class="text-primary">
|
| 1284 |
-
<tr><th class="text-primary">
|
| 1285 |
-
<tr><th class="text-primary">
|
| 1286 |
-
<tr><th class="text-primary">
|
| 1287 |
-
<tr><th class="text-primary">
|
| 1288 |
</tbody>
|
| 1289 |
</table>
|
| 1290 |
</div>
|
|
@@ -1292,14 +1292,14 @@
|
|
| 1292 |
{% if not ssl_info.is_valid %}
|
| 1293 |
<div class="security-issue">
|
| 1294 |
<i class="bi bi-exclamation-triangle-fill text-danger me-2"></i>
|
| 1295 |
-
<strong>
|
| 1296 |
</div>
|
| 1297 |
{% endif %}
|
| 1298 |
{% endif %}
|
| 1299 |
{% else %}
|
| 1300 |
<div class="alert alert-warning">
|
| 1301 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1302 |
-
SSL/TLS
|
| 1303 |
</div>
|
| 1304 |
{% endif %}
|
| 1305 |
</div>
|
|
@@ -1308,8 +1308,8 @@
|
|
| 1308 |
<div class="security-header">
|
| 1309 |
<i class="bi bi-shield-lock fs-3 text-primary security-icon"></i>
|
| 1310 |
<div>
|
| 1311 |
-
<h5 class="mb-1">DNS Blacklist
|
| 1312 |
-
<p class="text-muted mb-0">
|
| 1313 |
</div>
|
| 1314 |
</div>
|
| 1315 |
|
|
@@ -1326,7 +1326,7 @@
|
|
| 1326 |
{% if listed_entries %}
|
| 1327 |
<div class="alert alert-danger">
|
| 1328 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1329 |
-
<strong>IP
|
| 1330 |
</div>
|
| 1331 |
|
| 1332 |
<div class="accordion" id="dnsblAccordion">
|
|
@@ -1338,7 +1338,7 @@
|
|
| 1338 |
<button class="accordion-button collapsed" type="button"
|
| 1339 |
data-bs-toggle="collapse" data-bs-target="#collapse{{ category }}">
|
| 1340 |
<i class="bi bi-shield-slash me-2"></i>
|
| 1341 |
-
{{ category|title }} ({{ valid_entries | length }}
|
| 1342 |
</button>
|
| 1343 |
</h2>
|
| 1344 |
<div id="collapse{{ category }}" class="accordion-collapse collapse"
|
|
@@ -1348,9 +1348,9 @@
|
|
| 1348 |
<table class="table table-sm">
|
| 1349 |
<thead>
|
| 1350 |
<tr>
|
| 1351 |
-
<th>
|
| 1352 |
-
<th>
|
| 1353 |
-
<th>
|
| 1354 |
</tr>
|
| 1355 |
</thead>
|
| 1356 |
<tbody>
|
|
@@ -1374,13 +1374,13 @@
|
|
| 1374 |
{% else %}
|
| 1375 |
<div class="alert alert-success">
|
| 1376 |
<i class="bi bi-check-circle me-2"></i>
|
| 1377 |
-
IP
|
| 1378 |
</div>
|
| 1379 |
{% endif %}
|
| 1380 |
{% else %}
|
| 1381 |
<div class="alert alert-warning">
|
| 1382 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1383 |
-
DNSBL
|
| 1384 |
</div>
|
| 1385 |
{% endif %}
|
| 1386 |
</div>
|
|
@@ -1391,8 +1391,8 @@
|
|
| 1391 |
<div class="security-header">
|
| 1392 |
<i class="bi bi-door-open fs-3 text-primary security-icon"></i>
|
| 1393 |
<div>
|
| 1394 |
-
<h5 class="mb-1">
|
| 1395 |
-
<p class="text-muted mb-0">
|
| 1396 |
</div>
|
| 1397 |
</div>
|
| 1398 |
{% if security_report.open_ports %}
|
|
@@ -1400,7 +1400,7 @@
|
|
| 1400 |
<table class="table table-hover">
|
| 1401 |
<thead class="table-dark">
|
| 1402 |
<tr>
|
| 1403 |
-
<th>Port</th><th>
|
| 1404 |
</tr>
|
| 1405 |
</thead>
|
| 1406 |
<tbody>
|
|
@@ -1434,7 +1434,7 @@
|
|
| 1434 |
{% else %}
|
| 1435 |
<div class="alert alert-success">
|
| 1436 |
<i class="bi bi-check-circle me-2"></i>
|
| 1437 |
-
|
| 1438 |
</div>
|
| 1439 |
{% endif %}
|
| 1440 |
</div>
|
|
@@ -1445,8 +1445,8 @@
|
|
| 1445 |
<div class="security-header">
|
| 1446 |
<i class="bi bi-exclamation-triangle fs-3 text-danger security-icon"></i>
|
| 1447 |
<div>
|
| 1448 |
-
<h5 class="mb-1">
|
| 1449 |
-
<p class="text-muted mb-0">
|
| 1450 |
</div>
|
| 1451 |
</div>
|
| 1452 |
<div class="mt-3">
|
|
@@ -1463,13 +1463,13 @@
|
|
| 1463 |
<div class="security-header">
|
| 1464 |
<i class="bi bi-shield-check fs-3 text-success security-icon"></i>
|
| 1465 |
<div>
|
| 1466 |
-
<h5 class="mb-1">
|
| 1467 |
-
<p class="text-muted mb-0">
|
| 1468 |
</div>
|
| 1469 |
</div>
|
| 1470 |
<div class="alert alert-success mt-3">
|
| 1471 |
<i class="bi bi-check-circle me-2"></i>
|
| 1472 |
-
<strong>
|
| 1473 |
</div>
|
| 1474 |
</div>
|
| 1475 |
{% endif %} <!-- end if security_issues -->
|
|
@@ -1483,7 +1483,7 @@
|
|
| 1483 |
<!-- Detailed Analysis Accordion -->
|
| 1484 |
<h3 class="section-title mb-4">
|
| 1485 |
<i class="bi bi-gear-wide-connected me-2"></i>
|
| 1486 |
-
|
| 1487 |
</h3>
|
| 1488 |
|
| 1489 |
<div class="accordion" id="detailsAccordion">
|
|
@@ -1493,14 +1493,14 @@
|
|
| 1493 |
<h2 class="accordion-header">
|
| 1494 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseMtr">
|
| 1495 |
<i class="bi bi-geo-alt-fill me-2"></i>
|
| 1496 |
-
<strong>
|
| 1497 |
</button>
|
| 1498 |
</h2>
|
| 1499 |
<div id="collapseMtr" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 1500 |
<div class="accordion-body">
|
| 1501 |
{% if mtr_data.error %}
|
| 1502 |
<div class="alert alert-danger" role="alert">
|
| 1503 |
-
<h5 class="alert-heading">MTR
|
| 1504 |
<p>{{ mtr_data.error }}</p>
|
| 1505 |
{% if mtr_data.details %}
|
| 1506 |
<hr>
|
|
@@ -1508,17 +1508,17 @@
|
|
| 1508 |
{% endif %}
|
| 1509 |
</div>
|
| 1510 |
{% elif mtr_data.hops %}
|
| 1511 |
-
<p class="text-muted mb-3">
|
| 1512 |
<div class="table-responsive">
|
| 1513 |
<table class="table table-hover table-sm">
|
| 1514 |
<thead class="table-light">
|
| 1515 |
<tr>
|
| 1516 |
<th>#</th>
|
| 1517 |
<th>Host / IP</th>
|
| 1518 |
-
<th class="text-center">
|
| 1519 |
-
<th class="text-end">
|
| 1520 |
-
<th class="text-end">
|
| 1521 |
-
<th class="text-end">
|
| 1522 |
<th class="text-end">Son</th> {# Added 'Last' column #}
|
| 1523 |
</tr>
|
| 1524 |
</thead>
|
|
@@ -1529,7 +1529,7 @@
|
|
| 1529 |
<td>
|
| 1530 |
{{ hop.host }}
|
| 1531 |
{% if hop.is_private %}
|
| 1532 |
-
<span class="badge bg-secondary ms-1" data-bs-toggle="tooltip" data-bs-placement="top" title="
|
| 1533 |
{% endif %}
|
| 1534 |
</td>
|
| 1535 |
<td class="text-center">
|
|
@@ -1546,10 +1546,10 @@
|
|
| 1546 |
</tbody>
|
| 1547 |
</table>
|
| 1548 |
</div>
|
| 1549 |
-
<p class="text-muted mt-3">
|
| 1550 |
{% else %}
|
| 1551 |
<div class="alert alert-info text-center" role="alert">
|
| 1552 |
-
<i class="bi bi-info-circle-fill me-2"></i> MTR
|
| 1553 |
</div>
|
| 1554 |
{% endif %}
|
| 1555 |
</div>
|
|
@@ -1561,7 +1561,7 @@
|
|
| 1561 |
<h2 class="accordion-header">
|
| 1562 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWhois">
|
| 1563 |
<i class="bi bi-person-badge-fill me-2"></i>
|
| 1564 |
-
<strong>WHOIS
|
| 1565 |
</button>
|
| 1566 |
</h2>
|
| 1567 |
<div id="collapseWhois" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
@@ -1598,14 +1598,14 @@
|
|
| 1598 |
<h2 class="accordion-header">
|
| 1599 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDns">
|
| 1600 |
<i class="bi bi-list-nested me-2"></i>
|
| 1601 |
-
<strong>DNS
|
| 1602 |
</button>
|
| 1603 |
</h2>
|
| 1604 |
<div id="collapseDns" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 1605 |
<div class="accordion-body">
|
| 1606 |
|
| 1607 |
{% if dns_records.A %}
|
| 1608 |
-
<h6 class="text-primary mt-2"><i class="bi bi-hdd-network me-1"></i> A
|
| 1609 |
<ul class="list-group list-group-flush mb-3">
|
| 1610 |
{% for ip in dns_records.A %}
|
| 1611 |
<li class="list-group-item">{{ ip }}</li>
|
|
@@ -1614,7 +1614,7 @@
|
|
| 1614 |
{% endif %}
|
| 1615 |
|
| 1616 |
{% if dns_records.AAAA %}
|
| 1617 |
-
<h6 class="text-primary mt-2">AAAA
|
| 1618 |
<ul class="list-group list-group-flush mb-3">
|
| 1619 |
{% for ip in dns_records.AAAA %}
|
| 1620 |
<li class="list-group-item">{{ ip }}</li>
|
|
@@ -1622,7 +1622,7 @@
|
|
| 1622 |
</ul>
|
| 1623 |
{% endif %}
|
| 1624 |
{% if dns_records.PTR %}
|
| 1625 |
-
<h6 class="text-primary mt-2">PTR
|
| 1626 |
<ul class="list-group list-group-flush mb-3">
|
| 1627 |
{% for ptr in dns_records.PTR %}
|
| 1628 |
<li class="list-group-item">IP: {{ ptr.ip }} - PTR: {{ ptr.ptr }}</li>
|
|
@@ -1631,14 +1631,14 @@
|
|
| 1631 |
{% endif %}
|
| 1632 |
|
| 1633 |
{% if dns_records.CNAME %}
|
| 1634 |
-
<h6 class="text-primary mt-2"><i class="bi bi-link-45deg me-1"></i> CNAME
|
| 1635 |
<ul class="list-group list-group-flush mb-3">
|
| 1636 |
<li class="list-group-item">{{ dns_records.CNAME }}</li>
|
| 1637 |
</ul>
|
| 1638 |
{% endif %}
|
| 1639 |
|
| 1640 |
{% if dns_records.MX %}
|
| 1641 |
-
<h6 class="text-primary mt-2"><i class="bi bi-envelope-fill me-1"></i> MX
|
| 1642 |
<ul class="list-group list-group-flush mb-3">
|
| 1643 |
{% for mx in dns_records.MX %}
|
| 1644 |
<li class="list-group-item"><strong>{{ mx.preference }}</strong> - {{ mx.exchange }}</li>
|
|
@@ -1647,7 +1647,7 @@
|
|
| 1647 |
{% endif %}
|
| 1648 |
|
| 1649 |
{% if dns_records.NS %}
|
| 1650 |
-
<h6 class="text-primary mt-2"><i class="bi bi-diagram-3-fill me-1"></i> NS
|
| 1651 |
<ul class="list-group list-group-flush mb-3">
|
| 1652 |
{% for ns in dns_records.NS %}
|
| 1653 |
<li class="list-group-item">{{ ns }}</li>
|
|
@@ -1656,12 +1656,12 @@
|
|
| 1656 |
{% endif %}
|
| 1657 |
|
| 1658 |
{% if dns_records.SOA %}
|
| 1659 |
-
<h6 class="text-primary mt-2">SOA
|
| 1660 |
<pre class="bg-light p-2">{{ dns_records.SOA }}</pre>
|
| 1661 |
{% endif %}
|
| 1662 |
|
| 1663 |
{% if dns_records.TXT %}
|
| 1664 |
-
<h6 class="text-primary mt-2"><i class="bi bi-file-earmark-text me-1"></i> TXT
|
| 1665 |
<ul class="list-group list-group-flush mb-3">
|
| 1666 |
{% for txt in dns_records.TXT %}
|
| 1667 |
<li class="list-group-item">{{ txt }}</li>
|
|
@@ -1671,11 +1671,11 @@
|
|
| 1671 |
|
| 1672 |
{% if not dns_records.A and not dns_records.AAAA and not dns_records.MX and not dns_records.NS and not dns_records.SOA and not dns_records.TXT and not dns_records.CNAME %}
|
| 1673 |
<div class="alert alert-info text-center" role="alert">
|
| 1674 |
-
<i class="bi bi-info-circle-fill me-2"></i> DNS
|
| 1675 |
</div>
|
| 1676 |
{% endif %}
|
| 1677 |
{% if dns_records.CAA %}
|
| 1678 |
-
<h6 class="text-primary mt-2">CAA
|
| 1679 |
<ul class="list-group list-group-flush mb-3">
|
| 1680 |
{% for caa in dns_records.CAA %}
|
| 1681 |
<li class="list-group-item">{{ caa }}</li>
|
|
@@ -1693,29 +1693,29 @@
|
|
| 1693 |
<h2 class="accordion-header">
|
| 1694 |
<button class="accordion-button {% if not wayback_snapshots.error %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWayback">
|
| 1695 |
<i class="bi bi-archive-fill me-2"></i>
|
| 1696 |
-
<strong>Wayback Machine
|
| 1697 |
</button>
|
| 1698 |
</h2>
|
| 1699 |
<div id="collapseWayback" class="accordion-collapse collapse {% if wayback_snapshots.error %}show{% endif %}" data-bs-parent="#detailsAccordion">
|
| 1700 |
<div class="accordion-body">
|
| 1701 |
{% if wayback_snapshots.error %}
|
| 1702 |
<div class="alert alert-danger" role="alert">
|
| 1703 |
-
<h5 class="alert-heading">Wayback Machine
|
| 1704 |
<p>{{ wayback_snapshots.error }}</p>
|
| 1705 |
</div>
|
| 1706 |
{% elif wayback_snapshots.closest_snapshot %}
|
| 1707 |
-
<p class="text-muted mb-3">
|
| 1708 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1709 |
<dl class="row mb-0">
|
| 1710 |
-
<dt class="col-sm-4">
|
| 1711 |
<dd class="col-sm-8">{{ wayback_snapshots.closest_snapshot.timestamp }}</dd>
|
| 1712 |
-
<dt class="col-sm-4">
|
| 1713 |
<dd class="col-sm-8 text-break"><a href="{{ wayback_snapshots.closest_snapshot.url }}" target="_blank">{{ wayback_snapshots.closest_snapshot.url }}</a></dd>
|
| 1714 |
</dl>
|
| 1715 |
</div>
|
| 1716 |
{% else %}
|
| 1717 |
<div class="alert alert-info text-center" role="alert">
|
| 1718 |
-
<i class="bi bi-info-circle-fill me-2"></i>
|
| 1719 |
</div>
|
| 1720 |
{% endif %}
|
| 1721 |
</div>
|
|
@@ -1729,7 +1729,7 @@
|
|
| 1729 |
<h2 class="accordion-header">
|
| 1730 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapsePorts">
|
| 1731 |
<i class="bi bi-door-open-fill me-2"></i>
|
| 1732 |
-
<strong>
|
| 1733 |
</button>
|
| 1734 |
</h2>
|
| 1735 |
<div id="collapsePorts" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
@@ -1737,16 +1737,16 @@
|
|
| 1737 |
{% if port_scan.error %}
|
| 1738 |
<div class="alert alert-warning">{{ port_scan.error }}</div>
|
| 1739 |
{% elif port_scan.ports %}
|
| 1740 |
-
<p class="text-muted mb-3">
|
| 1741 |
<div class="table-responsive">
|
| 1742 |
<table class="table table-hover">
|
| 1743 |
<thead>
|
| 1744 |
<tr>
|
| 1745 |
<th>Port</th>
|
| 1746 |
-
<th>
|
| 1747 |
-
<th>
|
| 1748 |
-
<th>
|
| 1749 |
-
<th>
|
| 1750 |
</tr>
|
| 1751 |
</thead>
|
| 1752 |
<tbody>
|
|
@@ -1763,7 +1763,7 @@
|
|
| 1763 |
</table>
|
| 1764 |
</div>
|
| 1765 |
{% else %}
|
| 1766 |
-
<p class="text-muted text-center">
|
| 1767 |
{% endif %}
|
| 1768 |
</div>
|
| 1769 |
</div>
|
|
@@ -1775,52 +1775,52 @@
|
|
| 1775 |
<h2 class="accordion-header">
|
| 1776 |
<button class="accordion-button {% if not ssl_info.error %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSSL">
|
| 1777 |
<i class="bi bi-file-earmark-lock2-fill me-2"></i>
|
| 1778 |
-
<strong>
|
| 1779 |
</button>
|
| 1780 |
</h2>
|
| 1781 |
<div id="collapseSSL" class="accordion-collapse collapse {% if ssl_info.error %}show{% endif %}" data-bs-parent="#detailsAccordion">
|
| 1782 |
<div class="accordion-body">
|
| 1783 |
{% if ssl_info.error %}
|
| 1784 |
<div class="alert alert-danger" role="alert">
|
| 1785 |
-
<h5 class="alert-heading">SSL/TLS
|
| 1786 |
<p>{{ ssl_info.error }}</p>
|
| 1787 |
</div>
|
| 1788 |
{% else %}
|
| 1789 |
<div class="row mb-4">
|
| 1790 |
<div class="col-md-6">
|
| 1791 |
-
<h6 class="text-primary mb-3"><i class="bi bi-person-fill me-2"></i>
|
| 1792 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1793 |
<dl class="row mb-0">
|
| 1794 |
-
<dt class="col-sm-4">
|
| 1795 |
<dd class="col-sm-8 text-break">{{ ssl_info.common_name if ssl_info.common_name else 'N/A' }}</dd>
|
| 1796 |
|
| 1797 |
{% if ssl_info.subject.C %}
|
| 1798 |
-
<dt class="col-sm-4">
|
| 1799 |
<dd class="col-sm-8">{{ ssl_info.subject.C }}</dd>
|
| 1800 |
{% endif %}
|
| 1801 |
{% if ssl_info.subject.ST %}
|
| 1802 |
-
<dt class="col-sm-4">
|
| 1803 |
<dd class="col-sm-8">{{ ssl_info.subject.ST }}</dd>
|
| 1804 |
{% endif %}
|
| 1805 |
{% if ssl_info.subject.L %}
|
| 1806 |
-
<dt class="col-sm-4">
|
| 1807 |
<dd class="col-sm-8">{{ ssl_info.subject.L }}</dd>
|
| 1808 |
{% endif %}
|
| 1809 |
-
<dt class="col-sm-4">
|
| 1810 |
<dd class="col-sm-8 text-break">{{ ssl_info.organization if ssl_info.organization else 'N/A' }}</dd>
|
| 1811 |
{% if ssl_info.subject.OU %}
|
| 1812 |
-
<dt class="col-sm-4">
|
| 1813 |
<dd class="col-sm-8">{{ ssl_info.subject.OU }}</dd>
|
| 1814 |
{% endif %}
|
| 1815 |
{% if ssl_info.subject.emailAddress %}
|
| 1816 |
-
<dt class="col-sm-4">
|
| 1817 |
<dd class="col-sm-8">{{ ssl_info.subject.emailAddress }}</dd>
|
| 1818 |
{% endif %}
|
| 1819 |
</dl>
|
| 1820 |
</div>
|
| 1821 |
</div>
|
| 1822 |
<div class="col-md-6">
|
| 1823 |
-
<h6 class="text-primary mb-3"><i class="bi bi-building me-2"></i>
|
| 1824 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1825 |
<dl class="row mb-0">
|
| 1826 |
<dt class="col-sm-4">Ortak Ad (CN):</dt>
|
|
@@ -1848,40 +1848,40 @@
|
|
| 1848 |
|
| 1849 |
<div class="row mb-4">
|
| 1850 |
<div class="col-md-6">
|
| 1851 |
-
<h6 class="text-primary mb-3"><i class="bi bi-calendar-check-fill me-2"></i>
|
| 1852 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1853 |
<dl class="row mb-0">
|
| 1854 |
-
<dt class="col-sm-4">
|
| 1855 |
<dd class="col-sm-8">{{ ssl_info.valid_from }}</dd>
|
| 1856 |
-
<dt class="col-sm-4">
|
| 1857 |
<dd class="col-sm-8">{{ ssl_info.valid_until }}</dd>
|
| 1858 |
-
<dt class="col-sm-4">
|
| 1859 |
<dd class="col-sm-8">
|
| 1860 |
<span class="badge {% if ssl_info.days_remaining < 30 %}bg-danger{% elif ssl_info.days_remaining < 90 %}bg-warning text-dark{% else %}bg-success{% endif %}">
|
| 1861 |
-
{{ ssl_info.days_remaining }}
|
| 1862 |
</span>
|
| 1863 |
{% if not ssl_info.is_valid %}
|
| 1864 |
-
<span class="badge bg-danger ms-2">
|
| 1865 |
{% endif %}
|
| 1866 |
</dd>
|
| 1867 |
</dl>
|
| 1868 |
</div>
|
| 1869 |
</div>
|
| 1870 |
<div class="col-md-6">
|
| 1871 |
-
<h6 class="text-primary mb-3"><i class="bi bi-lock-fill me-2"></i>
|
| 1872 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1873 |
<dl class="row mb-0">
|
| 1874 |
-
<dt class="col-sm-4">
|
| 1875 |
<dd class="col-sm-8">{{ ssl_info.protocol if ssl_info.protocol else 'N/A' }}</dd>
|
| 1876 |
{% if ssl_info.cipher %}
|
| 1877 |
-
<dt class="col-sm-4">
|
| 1878 |
<dd class="col-sm-8 text-break">{{ ssl_info.cipher.name }}</dd>
|
| 1879 |
-
<dt class="col-sm-4">
|
| 1880 |
<dd class="col-sm-8">{{ ssl_info.cipher.version }}</dd>
|
| 1881 |
-
<dt class="col-sm-4">
|
| 1882 |
<dd class="col-sm-8">{{ ssl_info.cipher.bits }}</dd>
|
| 1883 |
{% else %}
|
| 1884 |
-
<dt class="col-sm-12">
|
| 1885 |
{% endif %}
|
| 1886 |
</dl>
|
| 1887 |
</div>
|
|
@@ -1890,7 +1890,7 @@
|
|
| 1890 |
|
| 1891 |
<div class="row mb-4">
|
| 1892 |
<div class="col-md-12">
|
| 1893 |
-
<h6 class="text-primary mb-3"><i class="bi bi-globe me-2"></i>
|
| 1894 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1895 |
{% if ssl_info.alt_names %}
|
| 1896 |
<ul class="list-unstyled mb-0">
|
|
@@ -1899,7 +1899,7 @@
|
|
| 1899 |
{% endfor %}
|
| 1900 |
</ul>
|
| 1901 |
{% else %}
|
| 1902 |
-
<p class="mb-0 text-muted">
|
| 1903 |
{% endif %}
|
| 1904 |
</div>
|
| 1905 |
</div>
|
|
@@ -1907,12 +1907,12 @@
|
|
| 1907 |
|
| 1908 |
<div class="row">
|
| 1909 |
<div class="col-md-12">
|
| 1910 |
-
<h6 class="text-primary mb-3"><i class="bi bi-info-circle-fill me-2"></i>
|
| 1911 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1912 |
<dl class="row mb-0">
|
| 1913 |
-
<dt class="col-sm-4">
|
| 1914 |
<dd class="col-sm-8 text-break">{{ ssl_info.serial_number }}</dd>
|
| 1915 |
-
<dt class="col-sm-4">
|
| 1916 |
<dd class="col-sm-8">{{ ssl_info.signature_algorithm }}</dd>
|
| 1917 |
</dl>
|
| 1918 |
</div>
|
|
@@ -1920,7 +1920,7 @@
|
|
| 1920 |
</div>
|
| 1921 |
|
| 1922 |
<div class="mt-4">
|
| 1923 |
-
<h6 class="text-primary mb-2"><i class="bi bi-code-slash me-2"></i>
|
| 1924 |
<div class="bg-dark text-light p-3 rounded" style="white-space: pre-wrap; word-break: break-word; font-family: monospace; font-size: 0.85em;">
|
| 1925 |
{{ ssl_info | tojson(indent=2) }}
|
| 1926 |
</div>
|
|
@@ -1937,21 +1937,21 @@
|
|
| 1937 |
<h2 class="accordion-header">
|
| 1938 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseHeaders">
|
| 1939 |
<i class="bi bi-file-text-fill me-2"></i>
|
| 1940 |
-
<strong>HTTP
|
| 1941 |
</button>
|
| 1942 |
</h2>
|
| 1943 |
<div id="collapseHeaders" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 1944 |
<div class="accordion-body">
|
| 1945 |
<h6 class="text-primary mb-3">
|
| 1946 |
<i class="bi bi-box-arrow-in-right me-2"></i>
|
| 1947 |
-
|
| 1948 |
</h6>
|
| 1949 |
<div class="table-responsive mb-4">
|
| 1950 |
<table class="table table-striped table-bordered align-middle">
|
| 1951 |
<thead class="table-primary">
|
| 1952 |
<tr>
|
| 1953 |
-
<th style="width: 30%">
|
| 1954 |
-
<th>
|
| 1955 |
</tr>
|
| 1956 |
</thead>
|
| 1957 |
<tbody>
|
|
@@ -1968,20 +1968,20 @@
|
|
| 1968 |
{% if http_headers.history %}
|
| 1969 |
<h6 class="text-primary mt-4 mb-3">
|
| 1970 |
<i class="bi bi-arrow-repeat me-2"></i>
|
| 1971 |
-
|
| 1972 |
</h6>
|
| 1973 |
{% for h in http_headers.history %}
|
| 1974 |
<div class="redirect-item">
|
| 1975 |
<span class="redirect-number">{{ loop.index }}.</span>
|
| 1976 |
<span class="redirect-url">{{ h.url }}</span>
|
| 1977 |
-
<span class="badge badge-warning">
|
| 1978 |
</div>
|
| 1979 |
{% endfor %}
|
| 1980 |
{% endif %}
|
| 1981 |
|
| 1982 |
<!-- Ham HTTP Başlıkları metin olarak -->
|
| 1983 |
<div class="mt-4">
|
| 1984 |
-
<h6 class="text-primary mb-2"><i class="bi bi-code-slash me-2"></i>
|
| 1985 |
<div class="bg-dark text-light p-3 rounded" style="white-space: pre-wrap; word-break: break-word; font-family: monospace;">
|
| 1986 |
{{ http_headers }}
|
| 1987 |
</div>
|
|
@@ -1997,7 +1997,7 @@
|
|
| 1997 |
<h2 class="accordion-header">
|
| 1998 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseIpInfo">
|
| 1999 |
<i class="bi bi-map-fill me-2"></i>
|
| 2000 |
-
<strong>
|
| 2001 |
</button>
|
| 2002 |
</h2>
|
| 2003 |
<div id="collapseIpInfo" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
@@ -2009,13 +2009,13 @@
|
|
| 2009 |
<dt class="text-primary fw-semibold">Hostname</dt>
|
| 2010 |
<dd class="mb-2">{{ ipinfo_data.hostname or 'N/A' }}</dd>
|
| 2011 |
|
| 2012 |
-
<dt class="text-primary fw-semibold">
|
| 2013 |
<dd class="mb-2">{{ ipinfo_data.org or 'N/A' }}</dd>
|
| 2014 |
</dl>
|
| 2015 |
</div>
|
| 2016 |
<div class="col-md-6">
|
| 2017 |
<dl>
|
| 2018 |
-
<dt class="text-primary fw-semibold">
|
| 2019 |
<dd class="mb-2">
|
| 2020 |
{{ ipinfo_data.city or '' }},
|
| 2021 |
{{ ipinfo_data.region or '' }},
|
|
@@ -2025,7 +2025,7 @@
|
|
| 2025 |
{% endif %}
|
| 2026 |
</dd>
|
| 2027 |
|
| 2028 |
-
<dt class="text-primary fw-semibold">
|
| 2029 |
<dd class="mb-2">{{ ipinfo_data.loc or 'N/A' }}</dd>
|
| 2030 |
</dl>
|
| 2031 |
</div>
|
|
@@ -2033,7 +2033,7 @@
|
|
| 2033 |
|
| 2034 |
<!-- Ham ipinfo_data JSON görünümü -->
|
| 2035 |
<div class="mt-4">
|
| 2036 |
-
<h6 class="text-primary mb-2"><i class="bi bi-code-slash me-2"></i>
|
| 2037 |
<div class="bg-dark text-light p-3 rounded" style="white-space: pre-wrap; word-break: break-word; font-family: monospace;">
|
| 2038 |
{{ ipinfo_data }}
|
| 2039 |
</div>
|
|
@@ -2047,15 +2047,15 @@
|
|
| 2047 |
<h2 class="accordion-header">
|
| 2048 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDnsRecords">
|
| 2049 |
<i class="bi bi-card-list me-2"></i>
|
| 2050 |
-
<strong>DNS
|
| 2051 |
</button>
|
| 2052 |
</h2>
|
| 2053 |
<div id="collapseDnsRecords" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 2054 |
<div class="accordion-body">
|
| 2055 |
<div class="row">
|
| 2056 |
<div class="col-md-6">
|
| 2057 |
-
<p><strong>
|
| 2058 |
-
<p><strong>DNSSEC
|
| 2059 |
</div>
|
| 2060 |
</div>
|
| 2061 |
<hr>
|
|
@@ -2063,11 +2063,11 @@
|
|
| 2063 |
{% for record_type, records in dns_records.items() %}
|
| 2064 |
{% if records %}
|
| 2065 |
<div class="col-md-6 mb-3">
|
| 2066 |
-
<h5>{{ record_type }}
|
| 2067 |
<ul class="list-unstyled">
|
| 2068 |
{% if record_type == 'MX' %}
|
| 2069 |
{% for mx_record in records %}
|
| 2070 |
-
<li><strong>
|
| 2071 |
{% endfor %}
|
| 2072 |
{% elif record_type == 'PTR' %}
|
| 2073 |
{% for ptr_record in records %}
|
|
@@ -2079,11 +2079,11 @@
|
|
| 2079 |
{% endfor %}
|
| 2080 |
{% elif record_type == 'SRV' %}
|
| 2081 |
{% for srv_record in records %}
|
| 2082 |
-
<li><strong>
|
| 2083 |
{% endfor %}
|
| 2084 |
{% elif record_type == 'CAA' %}
|
| 2085 |
{% for caa_record in records %}
|
| 2086 |
-
<li><strong>
|
| 2087 |
{% endfor %}
|
| 2088 |
{% elif record_type == 'CNAME' %}
|
| 2089 |
<li>{{ records }}</li>
|
|
@@ -2262,12 +2262,12 @@
|
|
| 2262 |
<h2 class="accordion-header">
|
| 2263 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseBgpGraph">
|
| 2264 |
<i class="bi bi-diagram-3-fill me-2"></i>
|
| 2265 |
-
<strong>BGP AS Path
|
| 2266 |
</button>
|
| 2267 |
</h2>
|
| 2268 |
<div id="collapseBgpGraph" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 2269 |
<div class="accordion-body">
|
| 2270 |
-
<p class="text-muted mb-3">
|
| 2271 |
|
| 2272 |
<div id="bgp-graph-container" class="bgp-graph-container"></div>
|
| 2273 |
|
|
@@ -2283,7 +2283,7 @@
|
|
| 2283 |
<h2 class="accordion-header">
|
| 2284 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseRipestat">
|
| 2285 |
<i class="bi bi-diagram-3-fill me-2"></i>
|
| 2286 |
-
<strong>
|
| 2287 |
</button>
|
| 2288 |
</h2>
|
| 2289 |
<div id="collapseRipestat" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
@@ -2309,7 +2309,7 @@
|
|
| 2309 |
<h2 class="accordion-header">
|
| 2310 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseRawJson">
|
| 2311 |
<i class="bi bi-filetype-json me-2"></i>
|
| 2312 |
-
<strong>
|
| 2313 |
</button>
|
| 2314 |
</h2>
|
| 2315 |
<div id="collapseRawJson" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
@@ -2443,7 +2443,7 @@
|
|
| 2443 |
})
|
| 2444 |
}).addTo(map)
|
| 2445 |
.bindPopup(`
|
| 2446 |
-
<b>
|
| 2447 |
${ipInfoData.city || ''}, ${ipInfoData.region || ''}, ${ipInfoData.country_name || ipInfoData.country || ''}
|
| 2448 |
`).openPopup();
|
| 2449 |
});
|
|
@@ -2458,7 +2458,7 @@
|
|
| 2458 |
let graphInitialized = false;
|
| 2459 |
const drawGraph = () => {
|
| 2460 |
if (graphInitialized || !bgpGraphContainer.clientWidth || !bgpGraphContainer.clientHeight) {
|
| 2461 |
-
console.warn("BGP Graph:
|
| 2462 |
return;
|
| 2463 |
}
|
| 2464 |
graphInitialized = true;
|
|
@@ -2537,12 +2537,12 @@
|
|
| 2537 |
const tooltip = d3.select("#tooltip");
|
| 2538 |
function mouseover(event, d) {
|
| 2539 |
tooltip.html(`
|
| 2540 |
-
<h6>AS
|
| 2541 |
-
<p><strong>
|
| 2542 |
-
<p><strong>
|
| 2543 |
-
<p><strong>
|
| 2544 |
<hr>
|
| 2545 |
-
<p>${d.description || '
|
| 2546 |
`)
|
| 2547 |
.style("left", (event.pageX + 15) + "px")
|
| 2548 |
.style("top", (event.pageY - 28) + "px")
|
|
@@ -2986,7 +2986,7 @@
|
|
| 2986 |
if (!form.checkValidity()) return;
|
| 2987 |
submitBtn.disabled = true;
|
| 2988 |
submitBtn.dataset.originalHtml = submitBtn.innerHTML;
|
| 2989 |
-
submitBtn.innerHTML = '<span class="loading-spinner me-2" aria-hidden="true"></span>
|
| 2990 |
});
|
| 2991 |
});
|
| 2992 |
</script>
|
|
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
<head>
|
| 4 |
<meta charset="UTF-8">
|
| 5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
| 835 |
<div class="col-md-8">
|
| 836 |
<h2 class="section-title mb-0">
|
| 837 |
<i class="bi bi-graph-up text-warning me-2"></i>
|
| 838 |
+
Analysis Results: {{ query }}
|
| 839 |
</h2>
|
| 840 |
</div>
|
| 841 |
<div class="col-md-4 text-end">
|
| 842 |
{% if data.source_rir != 'Bilinmiyor' %}
|
| 843 |
<span class="badge badge-success fs-6">
|
| 844 |
+
<i class="bi bi-shield-check me-1"></i>Source: {{ data.source_rir }}
|
| 845 |
</span>
|
| 846 |
{% endif %}
|
| 847 |
<span class="badge badge-info fs-6 ms-2">
|
| 848 |
+
<i class="bi bi-diagram-3 me-1"></i>IP Class: {{ data.summary.ip_class }}
|
| 849 |
</span>
|
| 850 |
</div>
|
| 851 |
</div>
|
|
|
|
| 858 |
<div class="card-header">
|
| 859 |
<h5 class="mb-0">
|
| 860 |
<i class="bi bi-diagram-3-fill me-2"></i>
|
| 861 |
+
Advanced Network and Routing Information
|
| 862 |
</h5>
|
| 863 |
</div>
|
| 864 |
<div class="card-body">
|
|
|
|
| 867 |
{% if bgpview_prefix %}
|
| 868 |
<div class="col-lg-6">
|
| 869 |
<h6 class="text-primary fw-semibold border-bottom pb-2 mb-3">
|
| 870 |
+
<i class="bi bi-signpost-split-fill me-2"></i>Network Prefix Information (BGPView)
|
| 871 |
</h6>
|
| 872 |
<dl class="row">
|
| 873 |
<dt class="col-sm-4">Prefix</dt>
|
| 874 |
<dd class="col-sm-8">{{ bgpview_prefix.prefix }}</dd>
|
| 875 |
|
| 876 |
+
<dt class="col-sm-4">Prefix Name</dt>
|
| 877 |
<dd class="col-sm-8">{{ bgpview_prefix.name }}</dd>
|
| 878 |
|
| 879 |
+
<dt class="col-sm-4">Description</dt>
|
| 880 |
<dd class="col-sm-8">{{ bgpview_prefix.description }}</dd>
|
| 881 |
</dl>
|
| 882 |
</div>
|
|
|
|
| 886 |
{% if peeringdb_data %}
|
| 887 |
<div class="col-lg-6">
|
| 888 |
<h6 class="text-primary fw-semibold border-bottom pb-2 mb-3">
|
| 889 |
+
<i class="bi bi-building-fill-gear me-2"></i> Service Provider Details (PeeringDB)
|
| 890 |
</h6>
|
| 891 |
<dl class="row">
|
| 892 |
+
<dt class="col-sm-5">Organization (ASN)</dt>
|
| 893 |
<dd class="col-sm-7">{{ peeringdb_data.name }} (AS{{ origin_asn }})</dd>
|
| 894 |
|
| 895 |
+
<dt class="col-sm-5">Website</dt>
|
| 896 |
<dd class="col-sm-7">
|
| 897 |
{% if peeringdb_data.website %}
|
| 898 |
<a href="{{ peeringdb_data.website }}" target="_blank">{{ peeringdb_data.website }}</a>
|
| 899 |
{% else %}
|
| 900 |
+
Unknown
|
| 901 |
{% endif %}
|
| 902 |
</dd>
|
| 903 |
|
| 904 |
+
<dt class="col-sm-5">Traffic Type</dt>
|
| 905 |
<dd class="col-sm-7">{{ peeringdb_data.traffic_type }}</dd>
|
| 906 |
|
| 907 |
+
<dt class="col-sm-5">Announced IPv4/v6</dt>
|
| 908 |
<dd class="col-sm-7">{{ peeringdb_data.prefix_count_ipv4 }} / {{ peeringdb_data.prefix_count_ipv6 }}</dd>
|
| 909 |
|
| 910 |
+
<dt class="col-sm-5">Peering Policy</dt>
|
| 911 |
<dd class="col-sm-7">{{ peeringdb_data.policy }}</dd>
|
| 912 |
</dl>
|
| 913 |
</div>
|
|
|
|
| 925 |
<div class="card-header">
|
| 926 |
<h5 class="mb-0">
|
| 927 |
<i class="bi bi-info-circle-fill me-2"></i>
|
| 928 |
+
Network Summary (RDAP)
|
| 929 |
</h5>
|
| 930 |
</div>
|
| 931 |
<div class="card-body">
|
| 932 |
<div class="row">
|
| 933 |
<div class="col-md-6">
|
| 934 |
<dl>
|
| 935 |
+
<dt class="text-primary fw-semibold">Network Name</dt>
|
| 936 |
<dd class="mb-3">{{ data.summary.name }}</dd>
|
| 937 |
|
| 938 |
<dt class="text-primary fw-semibold">Handle</dt>
|
| 939 |
<dd class="mb-3">{{ data.summary.handle }}</dd>
|
| 940 |
|
| 941 |
{% if data.summary.ip_range %}
|
| 942 |
+
<dt class="text-primary fw-semibold">IP Range</dt>
|
| 943 |
<dd class="mb-3">{{ data.summary.ip_range }}</dd>
|
| 944 |
{% endif %}
|
| 945 |
|
| 946 |
{% if data.summary.asn_range %}
|
| 947 |
+
<dt class="text-primary fw-semibold">ASN Range</dt>
|
| 948 |
<dd class="mb-3">{{ data.summary.asn_range }}</dd>
|
| 949 |
{% endif %}
|
| 950 |
</dl>
|
|
|
|
| 954 |
<!-- YENİ: Kaydı yapan kuruluşu bulmak için mantık eklendi -->
|
| 955 |
{% set org_contact = (data.contacts.registrant or data.contacts.administrative or data.contacts.technical)|first %}
|
| 956 |
{% if org_contact and org_contact.org != 'Bilinmiyor' %}
|
| 957 |
+
<dt class="text-primary fw-semibold">Registrant Organization</dt>
|
| 958 |
<dd class="mb-3">{{ org_contact.org }}</dd>
|
| 959 |
{% endif %}
|
| 960 |
|
| 961 |
+
<dt class="text-primary fw-semibold">Country</dt>
|
| 962 |
<dd class="mb-3">
|
| 963 |
{{ data.summary.country }}
|
| 964 |
{% if ipinfo_data and ipinfo_data.country_name %}
|
|
|
|
| 966 |
{% endif %}
|
| 967 |
</dd>
|
| 968 |
|
| 969 |
+
<dt class="text-primary fw-semibold">Record Type</dt>
|
| 970 |
<dd class="mb-3">{{ data.summary.type }}</dd>
|
| 971 |
|
| 972 |
+
<dt class="text-primary fw-semibold">IP Class</dt>
|
| 973 |
<dd class="mb-3">
|
| 974 |
<span class="badge badge-info">{{ data.summary.ip_class }}</span>
|
| 975 |
<small class="text-muted">{{ data.summary.ip_class_desc }}</small>
|
|
|
|
| 981 |
<!-- YENİ: Önemli Tarihler (Events) bölümü eklendi -->
|
| 982 |
{% if data.details and data.details.events %}
|
| 983 |
<hr>
|
| 984 |
+
<h6 class="text-primary fw-semibold mb-2">Important Dates</h6>
|
| 985 |
<div class="row small">
|
| 986 |
{% for event in data.details.events %}
|
| 987 |
<div class="col-md-6 mb-2">
|
|
|
|
| 996 |
<!-- YENİ: Kayıt Notları (Remarks) bölümü eklendi -->
|
| 997 |
{% if data.details and data.details.remarks %}
|
| 998 |
<hr>
|
| 999 |
+
<h6 class="text-primary fw-semibold mb-2">Registration Remarks</h6>
|
| 1000 |
{% for remark in data.details.remarks %}
|
| 1001 |
<div class="alert alert-secondary p-2 small mt-2">
|
| 1002 |
{% if remark.title %}<p class="fw-bold mb-1">{{ remark.title }}</p>{% endif %}
|
|
|
|
| 1019 |
<div class="card-header">
|
| 1020 |
<h5 class="mb-0">
|
| 1021 |
<i class="bi bi-people-fill me-2"></i>
|
| 1022 |
+
Contact Information
|
| 1023 |
</h5>
|
| 1024 |
</div>
|
| 1025 |
<div class="card-body" style="max-height: 400px; overflow-y: auto;">
|
|
|
|
| 1052 |
{% endfor %}
|
| 1053 |
{% endfor %}
|
| 1054 |
{% if not has_contacts %}
|
| 1055 |
+
<p class="text-muted text-center">No role-based contact information was found for this record.</p>
|
| 1056 |
{% endif %}
|
| 1057 |
</div>
|
| 1058 |
</div>
|
|
|
|
| 1067 |
<div class="card-header">
|
| 1068 |
<h5 class="mb-0">
|
| 1069 |
<i class="bi bi-speedometer2 me-2"></i>
|
| 1070 |
+
Ping & Latency Analysis
|
| 1071 |
</h5>
|
| 1072 |
</div>
|
| 1073 |
<div class="card-body">
|
|
|
|
| 1078 |
{{ ping_data.error }}
|
| 1079 |
</div>
|
| 1080 |
{% else %}
|
| 1081 |
+
<p class="text-muted mb-3">Round-trip times for packets sent to the target:</p>
|
| 1082 |
<div class="ping-stats">
|
| 1083 |
<div class="ping-stat">
|
| 1084 |
<div class="ping-value">{{ ping_data.min }}</div>
|
|
|
|
| 1086 |
</div>
|
| 1087 |
<div class="ping-stat">
|
| 1088 |
<div class="ping-value text-warning">{{ ping_data.avg }}</div>
|
| 1089 |
+
<div class="ping-label">Average</div>
|
| 1090 |
</div>
|
| 1091 |
<div class="ping-stat">
|
| 1092 |
<div class="ping-value">{{ ping_data.max }}</div>
|
| 1093 |
+
<div class="ping-label">Maximum</div>
|
| 1094 |
</div>
|
| 1095 |
</div>
|
| 1096 |
{% endif %}
|
| 1097 |
{% else %}
|
| 1098 |
+
<p class="text-muted text-center">Ping data could not be retrieved.</p>
|
| 1099 |
{% endif %}
|
| 1100 |
</div>
|
| 1101 |
</div>
|
|
|
|
| 1107 |
<div class="card-header">
|
| 1108 |
<h5 class="mb-0">
|
| 1109 |
<i class="bi bi-server me-2"></i>
|
| 1110 |
+
Server Information
|
| 1111 |
</h5>
|
| 1112 |
</div>
|
| 1113 |
<div class="card-body">
|
|
|
|
| 1115 |
<div class="col-md-6">
|
| 1116 |
<dl>
|
| 1117 |
<dt class="text-primary fw-semibold">Reverse DNS (PTR)</dt>
|
| 1118 |
+
<dd class="mb-3">{{ reverse_dns or 'Unknown' }}</dd>
|
| 1119 |
|
| 1120 |
+
<dt class="text-primary fw-semibold">Ping Status</dt>
|
| 1121 |
<dd class="mb-3">
|
| 1122 |
{% if ping_data and not ping_data.error %}
|
| 1123 |
+
<span class="badge badge-success">Successful</span>
|
| 1124 |
{% else %}
|
| 1125 |
+
<span class="badge badge-danger">Failed</span>
|
| 1126 |
{% endif %}
|
| 1127 |
</dd>
|
| 1128 |
</dl>
|
| 1129 |
</div>
|
| 1130 |
<div class="col-md-6">
|
| 1131 |
<dl>
|
| 1132 |
+
<dt class="text-primary fw-semibold">HTTP/HTTPS Access</dt>
|
| 1133 |
<dd class="mb-3">
|
| 1134 |
{% if http_headers and not http_headers.error %}
|
| 1135 |
+
<span class="badge badge-success">Active</span>
|
| 1136 |
{% else %}
|
| 1137 |
+
<span class="badge badge-danger">Inactive</span>
|
| 1138 |
{% endif %}
|
| 1139 |
</dd>
|
| 1140 |
|
| 1141 |
+
<dt class="text-primary fw-semibold">Open Ports</dt>
|
| 1142 |
<dd class="mb-3">
|
| 1143 |
{% if security_report.open_ports %}
|
| 1144 |
+
<span class="badge badge-warning">{{ security_report.open_ports|length }} found</span>
|
| 1145 |
{% else %}
|
| 1146 |
+
<span class="badge badge-success">Clean</span>
|
| 1147 |
{% endif %}
|
| 1148 |
</dd>
|
| 1149 |
</dl>
|
|
|
|
| 1162 |
<div class="card-header">
|
| 1163 |
<h5 class="mb-0">
|
| 1164 |
<i class="bi bi-shield-check me-2"></i>
|
| 1165 |
+
Security Status Report
|
| 1166 |
</h5>
|
| 1167 |
</div>
|
| 1168 |
<div class="card-body">
|
|
|
|
| 1173 |
<div class="security-header">
|
| 1174 |
<i class="bi bi-incognito fs-3 text-primary security-icon"></i>
|
| 1175 |
<div>
|
| 1176 |
+
<h5 class="mb-1">Anonymity Status</h5>
|
| 1177 |
+
<p class="text-muted mb-0">Proxy, VPN, Tor or Botnet Check</p>
|
| 1178 |
</div>
|
| 1179 |
</div>
|
| 1180 |
|
| 1181 |
{% if security_report.proxy_vpn_tor %}
|
| 1182 |
<div class="alert alert-danger">
|
| 1183 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1184 |
+
<strong>Anonymity network activity</strong> detected.
|
| 1185 |
</div>
|
| 1186 |
|
| 1187 |
{% if security_report.anonymity_services %}
|
| 1188 |
+
<p class="mt-3 mb-2 text-muted">Detected services:</p>
|
| 1189 |
<div>
|
| 1190 |
{% for service in security_report.anonymity_services %}
|
| 1191 |
{% set service_lower = service.lower() %}
|
|
|
|
| 1214 |
{% else %}
|
| 1215 |
<div class="alert alert-success">
|
| 1216 |
<i class="bi bi-check-circle me-2"></i>
|
| 1217 |
+
No anonymity network or bot record found in the checked lists.
|
| 1218 |
</div>
|
| 1219 |
{% endif %}
|
| 1220 |
</div>
|
|
|
|
| 1224 |
<div class="security-header">
|
| 1225 |
<i class="bi bi-shield-lock fs-3 text-primary security-icon"></i>
|
| 1226 |
<div>
|
| 1227 |
+
<h5 class="mb-1">HTTP Security Headers</h5>
|
| 1228 |
+
<p class="text-muted mb-0">Basic security headers</p>
|
| 1229 |
</div>
|
| 1230 |
</div>
|
| 1231 |
{% if security_report.security_headers %}
|
| 1232 |
<div class="alert alert-success">
|
| 1233 |
<i class="bi bi-check-circle me-2"></i>
|
| 1234 |
+
<strong>{{ security_report.security_headers|length }} security header(s)</strong> detected
|
| 1235 |
</div>
|
| 1236 |
<ul class="list-group">
|
| 1237 |
{% for header in security_report.security_headers %}
|
| 1238 |
<li class="list-group-item d-flex justify-content-between align-items-center">
|
| 1239 |
{{ header }}
|
| 1240 |
+
<span class="badge bg-success">Present</span>
|
| 1241 |
</li>
|
| 1242 |
{% endfor %}
|
| 1243 |
</ul>
|
| 1244 |
{% else %}
|
| 1245 |
<div class="alert alert-warning">
|
| 1246 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1247 |
+
Basic security headers not found
|
| 1248 |
</div>
|
| 1249 |
{% endif %}
|
| 1250 |
</div>
|
|
|
|
| 1254 |
<div class="security-header">
|
| 1255 |
<i class="bi bi-shield-lock fs-3 text-primary security-icon"></i>
|
| 1256 |
<div>
|
| 1257 |
+
<h5 class="mb-1">SSL/TLS Certificate Analysis</h5>
|
| 1258 |
+
<p class="text-muted mb-0">Server certificate and encryption details</p>
|
| 1259 |
</div>
|
| 1260 |
</div>
|
| 1261 |
{% if ssl_info %}
|
|
|
|
| 1267 |
{% else %}
|
| 1268 |
<div class="alert {% if ssl_info.is_valid %}alert-success{% else %}alert-danger{% endif %}">
|
| 1269 |
<i class="bi {% if ssl_info.is_valid %}bi-check-circle{% else %}bi-exclamation-triangle{% endif %} me-2"></i>
|
| 1270 |
+
<strong>Certificate Status:</strong>
|
| 1271 |
{% if ssl_info.is_valid %}
|
| 1272 |
+
Valid ({{ ssl_info.days_remaining }} days remaining)
|
| 1273 |
{% else %}
|
| 1274 |
+
Invalid/Expired
|
| 1275 |
{% endif %}
|
| 1276 |
</div>
|
| 1277 |
|
| 1278 |
<div class="table-responsive">
|
| 1279 |
<table class="table table-sm">
|
| 1280 |
<tbody>
|
| 1281 |
+
<tr><th class="text-primary">Common Name (CN)</th><td>{{ ssl_info.common_name or 'Unknown' }}</td></tr>
|
| 1282 |
+
<tr><th class="text-primary">Organization</th><td>{{ ssl_info.organization or 'Unknown' }}</td></tr>
|
| 1283 |
+
<tr><th class="text-primary">Validity</th><td>{{ ssl_info.valid_from }} - {{ ssl_info.valid_until }}</td></tr>
|
| 1284 |
+
<tr><th class="text-primary">Protocol</th><td>{{ ssl_info.protocol }}</td></tr>
|
| 1285 |
+
<tr><th class="text-primary">Cipher</th><td>{{ ssl_info.cipher }} ({{ ssl_info.key_size }} bit)</td></tr>
|
| 1286 |
+
<tr><th class="text-primary">Serial No</th><td>{{ ssl_info.serial_number }}</td></tr>
|
| 1287 |
+
<tr><th class="text-primary">Signature Algorithm</th><td>{{ ssl_info.signature_algorithm }}</td></tr>
|
| 1288 |
</tbody>
|
| 1289 |
</table>
|
| 1290 |
</div>
|
|
|
|
| 1292 |
{% if not ssl_info.is_valid %}
|
| 1293 |
<div class="security-issue">
|
| 1294 |
<i class="bi bi-exclamation-triangle-fill text-danger me-2"></i>
|
| 1295 |
+
<strong>Warning:</strong> Invalid or expired SSL certificate
|
| 1296 |
</div>
|
| 1297 |
{% endif %}
|
| 1298 |
{% endif %}
|
| 1299 |
{% else %}
|
| 1300 |
<div class="alert alert-warning">
|
| 1301 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1302 |
+
SSL/TLS info could not be retrieved or the server does not allow SSL connection
|
| 1303 |
</div>
|
| 1304 |
{% endif %}
|
| 1305 |
</div>
|
|
|
|
| 1308 |
<div class="security-header">
|
| 1309 |
<i class="bi bi-shield-lock fs-3 text-primary security-icon"></i>
|
| 1310 |
<div>
|
| 1311 |
+
<h5 class="mb-1">DNS Blacklist Check</h5>
|
| 1312 |
+
<p class="text-muted mb-0">Whether the IP address appears on spam and malicious lists</p>
|
| 1313 |
</div>
|
| 1314 |
</div>
|
| 1315 |
|
|
|
|
| 1326 |
{% if listed_entries %}
|
| 1327 |
<div class="alert alert-danger">
|
| 1328 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1329 |
+
<strong>The IP address was found on {{ listed_entries | length }} blacklist(s)!</strong>
|
| 1330 |
</div>
|
| 1331 |
|
| 1332 |
<div class="accordion" id="dnsblAccordion">
|
|
|
|
| 1338 |
<button class="accordion-button collapsed" type="button"
|
| 1339 |
data-bs-toggle="collapse" data-bs-target="#collapse{{ category }}">
|
| 1340 |
<i class="bi bi-shield-slash me-2"></i>
|
| 1341 |
+
{{ category|title }} ({{ valid_entries | length }} lists)
|
| 1342 |
</button>
|
| 1343 |
</h2>
|
| 1344 |
<div id="collapse{{ category }}" class="accordion-collapse collapse"
|
|
|
|
| 1348 |
<table class="table table-sm">
|
| 1349 |
<thead>
|
| 1350 |
<tr>
|
| 1351 |
+
<th>List</th>
|
| 1352 |
+
<th>Description</th>
|
| 1353 |
+
<th>Response</th>
|
| 1354 |
</tr>
|
| 1355 |
</thead>
|
| 1356 |
<tbody>
|
|
|
|
| 1374 |
{% else %}
|
| 1375 |
<div class="alert alert-success">
|
| 1376 |
<i class="bi bi-check-circle me-2"></i>
|
| 1377 |
+
The IP address was not found in the checked blacklists. It appears safe.
|
| 1378 |
</div>
|
| 1379 |
{% endif %}
|
| 1380 |
{% else %}
|
| 1381 |
<div class="alert alert-warning">
|
| 1382 |
<i class="bi bi-exclamation-triangle me-2"></i>
|
| 1383 |
+
DNSBL results could not be retrieved.
|
| 1384 |
</div>
|
| 1385 |
{% endif %}
|
| 1386 |
</div>
|
|
|
|
| 1391 |
<div class="security-header">
|
| 1392 |
<i class="bi bi-door-open fs-3 text-primary security-icon"></i>
|
| 1393 |
<div>
|
| 1394 |
+
<h5 class="mb-1">Open Ports ({{ security_report.open_ports|length }})</h5>
|
| 1395 |
+
<p class="text-muted mb-0">Detected open ports and services</p>
|
| 1396 |
</div>
|
| 1397 |
</div>
|
| 1398 |
{% if security_report.open_ports %}
|
|
|
|
| 1400 |
<table class="table table-hover">
|
| 1401 |
<thead class="table-dark">
|
| 1402 |
<tr>
|
| 1403 |
+
<th>Port</th><th>Service</th><th>Product</th><th>Version</th><th>Status</th>
|
| 1404 |
</tr>
|
| 1405 |
</thead>
|
| 1406 |
<tbody>
|
|
|
|
| 1434 |
{% else %}
|
| 1435 |
<div class="alert alert-success">
|
| 1436 |
<i class="bi bi-check-circle me-2"></i>
|
| 1437 |
+
No open ports were found among the scanned ports
|
| 1438 |
</div>
|
| 1439 |
{% endif %}
|
| 1440 |
</div>
|
|
|
|
| 1445 |
<div class="security-header">
|
| 1446 |
<i class="bi bi-exclamation-triangle fs-3 text-danger security-icon"></i>
|
| 1447 |
<div>
|
| 1448 |
+
<h5 class="mb-1">Security Alerts</h5>
|
| 1449 |
+
<p class="text-muted mb-0">Identified potential security issues</p>
|
| 1450 |
</div>
|
| 1451 |
</div>
|
| 1452 |
<div class="mt-3">
|
|
|
|
| 1463 |
<div class="security-header">
|
| 1464 |
<i class="bi bi-shield-check fs-3 text-success security-icon"></i>
|
| 1465 |
<div>
|
| 1466 |
+
<h5 class="mb-1">Security Status</h5>
|
| 1467 |
+
<p class="text-muted mb-0">Basic security checks successful</p>
|
| 1468 |
</div>
|
| 1469 |
</div>
|
| 1470 |
<div class="alert alert-success mt-3">
|
| 1471 |
<i class="bi bi-check-circle me-2"></i>
|
| 1472 |
+
<strong>Good security posture:</strong> No critical issues found in basic security checks
|
| 1473 |
</div>
|
| 1474 |
</div>
|
| 1475 |
{% endif %} <!-- end if security_issues -->
|
|
|
|
| 1483 |
<!-- Detailed Analysis Accordion -->
|
| 1484 |
<h3 class="section-title mb-4">
|
| 1485 |
<i class="bi bi-gear-wide-connected me-2"></i>
|
| 1486 |
+
Detailed Analysis Reports
|
| 1487 |
</h3>
|
| 1488 |
|
| 1489 |
<div class="accordion" id="detailsAccordion">
|
|
|
|
| 1493 |
<h2 class="accordion-header">
|
| 1494 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseMtr">
|
| 1495 |
<i class="bi bi-geo-alt-fill me-2"></i>
|
| 1496 |
+
<strong>Network Path and Loss Analysis (MTR)</strong>
|
| 1497 |
</button>
|
| 1498 |
</h2>
|
| 1499 |
<div id="collapseMtr" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 1500 |
<div class="accordion-body">
|
| 1501 |
{% if mtr_data.error %}
|
| 1502 |
<div class="alert alert-danger" role="alert">
|
| 1503 |
+
<h5 class="alert-heading">MTR Analysis Error!</h5>
|
| 1504 |
<p>{{ mtr_data.error }}</p>
|
| 1505 |
{% if mtr_data.details %}
|
| 1506 |
<hr>
|
|
|
|
| 1508 |
{% endif %}
|
| 1509 |
</div>
|
| 1510 |
{% elif mtr_data.hops %}
|
| 1511 |
+
<p class="text-muted mb-3">Packet loss and latency analysis at each hop along the path to the target.</p>
|
| 1512 |
<div class="table-responsive">
|
| 1513 |
<table class="table table-hover table-sm">
|
| 1514 |
<thead class="table-light">
|
| 1515 |
<tr>
|
| 1516 |
<th>#</th>
|
| 1517 |
<th>Host / IP</th>
|
| 1518 |
+
<th class="text-center">Packet Loss</th>
|
| 1519 |
+
<th class="text-end">Avg Latency</th>
|
| 1520 |
+
<th class="text-end">Best</th>
|
| 1521 |
+
<th class="text-end">Worst</th>
|
| 1522 |
<th class="text-end">Son</th> {# Added 'Last' column #}
|
| 1523 |
</tr>
|
| 1524 |
</thead>
|
|
|
|
| 1529 |
<td>
|
| 1530 |
{{ hop.host }}
|
| 1531 |
{% if hop.is_private %}
|
| 1532 |
+
<span class="badge bg-secondary ms-1" data-bs-toggle="tooltip" data-bs-placement="top" title="This is a private IP address and is typically used in internal networks.">Private IP</span>
|
| 1533 |
{% endif %}
|
| 1534 |
</td>
|
| 1535 |
<td class="text-center">
|
|
|
|
| 1546 |
</tbody>
|
| 1547 |
</table>
|
| 1548 |
</div>
|
| 1549 |
+
<p class="text-muted mt-3">Total Hops: <strong>{{ mtr_data.total_hops }}</strong> | Overall Packet Loss: <strong>{{ "%.1f"|format(mtr_data.packet_loss) }}%</strong></p>
|
| 1550 |
{% else %}
|
| 1551 |
<div class="alert alert-info text-center" role="alert">
|
| 1552 |
+
<i class="bi bi-info-circle-fill me-2"></i> No data found for MTR analysis or the analysis could not be completed.
|
| 1553 |
</div>
|
| 1554 |
{% endif %}
|
| 1555 |
</div>
|
|
|
|
| 1561 |
<h2 class="accordion-header">
|
| 1562 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWhois">
|
| 1563 |
<i class="bi bi-person-badge-fill me-2"></i>
|
| 1564 |
+
<strong>WHOIS Information</strong>
|
| 1565 |
</button>
|
| 1566 |
</h2>
|
| 1567 |
<div id="collapseWhois" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
|
|
| 1598 |
<h2 class="accordion-header">
|
| 1599 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDns">
|
| 1600 |
<i class="bi bi-list-nested me-2"></i>
|
| 1601 |
+
<strong>DNS Records</strong>
|
| 1602 |
</button>
|
| 1603 |
</h2>
|
| 1604 |
<div id="collapseDns" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 1605 |
<div class="accordion-body">
|
| 1606 |
|
| 1607 |
{% if dns_records.A %}
|
| 1608 |
+
<h6 class="text-primary mt-2"><i class="bi bi-hdd-network me-1"></i> A Records (IPv4)</h6>
|
| 1609 |
<ul class="list-group list-group-flush mb-3">
|
| 1610 |
{% for ip in dns_records.A %}
|
| 1611 |
<li class="list-group-item">{{ ip }}</li>
|
|
|
|
| 1614 |
{% endif %}
|
| 1615 |
|
| 1616 |
{% if dns_records.AAAA %}
|
| 1617 |
+
<h6 class="text-primary mt-2">AAAA Records (IPv6)</h6>
|
| 1618 |
<ul class="list-group list-group-flush mb-3">
|
| 1619 |
{% for ip in dns_records.AAAA %}
|
| 1620 |
<li class="list-group-item">{{ ip }}</li>
|
|
|
|
| 1622 |
</ul>
|
| 1623 |
{% endif %}
|
| 1624 |
{% if dns_records.PTR %}
|
| 1625 |
+
<h6 class="text-primary mt-2">PTR Records</h6>
|
| 1626 |
<ul class="list-group list-group-flush mb-3">
|
| 1627 |
{% for ptr in dns_records.PTR %}
|
| 1628 |
<li class="list-group-item">IP: {{ ptr.ip }} - PTR: {{ ptr.ptr }}</li>
|
|
|
|
| 1631 |
{% endif %}
|
| 1632 |
|
| 1633 |
{% if dns_records.CNAME %}
|
| 1634 |
+
<h6 class="text-primary mt-2"><i class="bi bi-link-45deg me-1"></i> CNAME Record</h6>
|
| 1635 |
<ul class="list-group list-group-flush mb-3">
|
| 1636 |
<li class="list-group-item">{{ dns_records.CNAME }}</li>
|
| 1637 |
</ul>
|
| 1638 |
{% endif %}
|
| 1639 |
|
| 1640 |
{% if dns_records.MX %}
|
| 1641 |
+
<h6 class="text-primary mt-2"><i class="bi bi-envelope-fill me-1"></i> MX Records (Mail Server)</h6>
|
| 1642 |
<ul class="list-group list-group-flush mb-3">
|
| 1643 |
{% for mx in dns_records.MX %}
|
| 1644 |
<li class="list-group-item"><strong>{{ mx.preference }}</strong> - {{ mx.exchange }}</li>
|
|
|
|
| 1647 |
{% endif %}
|
| 1648 |
|
| 1649 |
{% if dns_records.NS %}
|
| 1650 |
+
<h6 class="text-primary mt-2"><i class="bi bi-diagram-3-fill me-1"></i> NS Records (Name Server)</h6>
|
| 1651 |
<ul class="list-group list-group-flush mb-3">
|
| 1652 |
{% for ns in dns_records.NS %}
|
| 1653 |
<li class="list-group-item">{{ ns }}</li>
|
|
|
|
| 1656 |
{% endif %}
|
| 1657 |
|
| 1658 |
{% if dns_records.SOA %}
|
| 1659 |
+
<h6 class="text-primary mt-2">SOA Record</h6>
|
| 1660 |
<pre class="bg-light p-2">{{ dns_records.SOA }}</pre>
|
| 1661 |
{% endif %}
|
| 1662 |
|
| 1663 |
{% if dns_records.TXT %}
|
| 1664 |
+
<h6 class="text-primary mt-2"><i class="bi bi-file-earmark-text me-1"></i> TXT Records</h6>
|
| 1665 |
<ul class="list-group list-group-flush mb-3">
|
| 1666 |
{% for txt in dns_records.TXT %}
|
| 1667 |
<li class="list-group-item">{{ txt }}</li>
|
|
|
|
| 1671 |
|
| 1672 |
{% if not dns_records.A and not dns_records.AAAA and not dns_records.MX and not dns_records.NS and not dns_records.SOA and not dns_records.TXT and not dns_records.CNAME %}
|
| 1673 |
<div class="alert alert-info text-center" role="alert">
|
| 1674 |
+
<i class="bi bi-info-circle-fill me-2"></i> No DNS records found.
|
| 1675 |
</div>
|
| 1676 |
{% endif %}
|
| 1677 |
{% if dns_records.CAA %}
|
| 1678 |
+
<h6 class="text-primary mt-2">CAA Records</h6>
|
| 1679 |
<ul class="list-group list-group-flush mb-3">
|
| 1680 |
{% for caa in dns_records.CAA %}
|
| 1681 |
<li class="list-group-item">{{ caa }}</li>
|
|
|
|
| 1693 |
<h2 class="accordion-header">
|
| 1694 |
<button class="accordion-button {% if not wayback_snapshots.error %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapseWayback">
|
| 1695 |
<i class="bi bi-archive-fill me-2"></i>
|
| 1696 |
+
<strong>Wayback Machine Archive Records</strong>
|
| 1697 |
</button>
|
| 1698 |
</h2>
|
| 1699 |
<div id="collapseWayback" class="accordion-collapse collapse {% if wayback_snapshots.error %}show{% endif %}" data-bs-parent="#detailsAccordion">
|
| 1700 |
<div class="accordion-body">
|
| 1701 |
{% if wayback_snapshots.error %}
|
| 1702 |
<div class="alert alert-danger" role="alert">
|
| 1703 |
+
<h5 class="alert-heading">Wayback Machine Analysis Error!</h5>
|
| 1704 |
<p>{{ wayback_snapshots.error }}</p>
|
| 1705 |
</div>
|
| 1706 |
{% elif wayback_snapshots.closest_snapshot %}
|
| 1707 |
+
<p class="text-muted mb-3">Closest archived record found on the Wayback Machine:</p>
|
| 1708 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1709 |
<dl class="row mb-0">
|
| 1710 |
+
<dt class="col-sm-4">Date:</dt>
|
| 1711 |
<dd class="col-sm-8">{{ wayback_snapshots.closest_snapshot.timestamp }}</dd>
|
| 1712 |
+
<dt class="col-sm-4">Link:</dt>
|
| 1713 |
<dd class="col-sm-8 text-break"><a href="{{ wayback_snapshots.closest_snapshot.url }}" target="_blank">{{ wayback_snapshots.closest_snapshot.url }}</a></dd>
|
| 1714 |
</dl>
|
| 1715 |
</div>
|
| 1716 |
{% else %}
|
| 1717 |
<div class="alert alert-info text-center" role="alert">
|
| 1718 |
+
<i class="bi bi-info-circle-fill me-2"></i> No archived record found on the Wayback Machine.
|
| 1719 |
</div>
|
| 1720 |
{% endif %}
|
| 1721 |
</div>
|
|
|
|
| 1729 |
<h2 class="accordion-header">
|
| 1730 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapsePorts">
|
| 1731 |
<i class="bi bi-door-open-fill me-2"></i>
|
| 1732 |
+
<strong>Open Port Scan (Nmap)</strong>
|
| 1733 |
</button>
|
| 1734 |
</h2>
|
| 1735 |
<div id="collapsePorts" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
|
|
| 1737 |
{% if port_scan.error %}
|
| 1738 |
<div class="alert alert-warning">{{ port_scan.error }}</div>
|
| 1739 |
{% elif port_scan.ports %}
|
| 1740 |
+
<p class="text-muted mb-3">Open TCP ports and service information found on the target:</p>
|
| 1741 |
<div class="table-responsive">
|
| 1742 |
<table class="table table-hover">
|
| 1743 |
<thead>
|
| 1744 |
<tr>
|
| 1745 |
<th>Port</th>
|
| 1746 |
+
<th>State</th>
|
| 1747 |
+
<th>Service</th>
|
| 1748 |
+
<th>Product</th>
|
| 1749 |
+
<th>Version</th>
|
| 1750 |
</tr>
|
| 1751 |
</thead>
|
| 1752 |
<tbody>
|
|
|
|
| 1763 |
</table>
|
| 1764 |
</div>
|
| 1765 |
{% else %}
|
| 1766 |
+
<p class="text-muted text-center">No open ports were found among the scanned ports.</p>
|
| 1767 |
{% endif %}
|
| 1768 |
</div>
|
| 1769 |
</div>
|
|
|
|
| 1775 |
<h2 class="accordion-header">
|
| 1776 |
<button class="accordion-button {% if not ssl_info.error %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#collapseSSL">
|
| 1777 |
<i class="bi bi-file-earmark-lock2-fill me-2"></i>
|
| 1778 |
+
<strong>Detailed SSL/TLS Certificate Information</strong>
|
| 1779 |
</button>
|
| 1780 |
</h2>
|
| 1781 |
<div id="collapseSSL" class="accordion-collapse collapse {% if ssl_info.error %}show{% endif %}" data-bs-parent="#detailsAccordion">
|
| 1782 |
<div class="accordion-body">
|
| 1783 |
{% if ssl_info.error %}
|
| 1784 |
<div class="alert alert-danger" role="alert">
|
| 1785 |
+
<h5 class="alert-heading">SSL/TLS Analysis Error!</h5>
|
| 1786 |
<p>{{ ssl_info.error }}</p>
|
| 1787 |
</div>
|
| 1788 |
{% else %}
|
| 1789 |
<div class="row mb-4">
|
| 1790 |
<div class="col-md-6">
|
| 1791 |
+
<h6 class="text-primary mb-3"><i class="bi bi-person-fill me-2"></i>Certificate Subject</h6>
|
| 1792 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1793 |
<dl class="row mb-0">
|
| 1794 |
+
<dt class="col-sm-4">Common Name (CN):</dt>
|
| 1795 |
<dd class="col-sm-8 text-break">{{ ssl_info.common_name if ssl_info.common_name else 'N/A' }}</dd>
|
| 1796 |
|
| 1797 |
{% if ssl_info.subject.C %}
|
| 1798 |
+
<dt class="col-sm-4">Country (C):</dt>
|
| 1799 |
<dd class="col-sm-8">{{ ssl_info.subject.C }}</dd>
|
| 1800 |
{% endif %}
|
| 1801 |
{% if ssl_info.subject.ST %}
|
| 1802 |
+
<dt class="col-sm-4">State/Province (ST):</dt>
|
| 1803 |
<dd class="col-sm-8">{{ ssl_info.subject.ST }}</dd>
|
| 1804 |
{% endif %}
|
| 1805 |
{% if ssl_info.subject.L %}
|
| 1806 |
+
<dt class="col-sm-4">City (L):</dt>
|
| 1807 |
<dd class="col-sm-8">{{ ssl_info.subject.L }}</dd>
|
| 1808 |
{% endif %}
|
| 1809 |
+
<dt class="col-sm-4">Organization (O):</dt>
|
| 1810 |
<dd class="col-sm-8 text-break">{{ ssl_info.organization if ssl_info.organization else 'N/A' }}</dd>
|
| 1811 |
{% if ssl_info.subject.OU %}
|
| 1812 |
+
<dt class="col-sm-4">Organizational Unit (OU):</dt>
|
| 1813 |
<dd class="col-sm-8">{{ ssl_info.subject.OU }}</dd>
|
| 1814 |
{% endif %}
|
| 1815 |
{% if ssl_info.subject.emailAddress %}
|
| 1816 |
+
<dt class="col-sm-4">Email:</dt>
|
| 1817 |
<dd class="col-sm-8">{{ ssl_info.subject.emailAddress }}</dd>
|
| 1818 |
{% endif %}
|
| 1819 |
</dl>
|
| 1820 |
</div>
|
| 1821 |
</div>
|
| 1822 |
<div class="col-md-6">
|
| 1823 |
+
<h6 class="text-primary mb-3"><i class="bi bi-building me-2"></i>Certificate Issuer (Issuer)</h6>
|
| 1824 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1825 |
<dl class="row mb-0">
|
| 1826 |
<dt class="col-sm-4">Ortak Ad (CN):</dt>
|
|
|
|
| 1848 |
|
| 1849 |
<div class="row mb-4">
|
| 1850 |
<div class="col-md-6">
|
| 1851 |
+
<h6 class="text-primary mb-3"><i class="bi bi-calendar-check-fill me-2"></i>Validity Dates</h6>
|
| 1852 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1853 |
<dl class="row mb-0">
|
| 1854 |
+
<dt class="col-sm-4">Start:</dt>
|
| 1855 |
<dd class="col-sm-8">{{ ssl_info.valid_from }}</dd>
|
| 1856 |
+
<dt class="col-sm-4">End:</dt>
|
| 1857 |
<dd class="col-sm-8">{{ ssl_info.valid_until }}</dd>
|
| 1858 |
+
<dt class="col-sm-4">Days Remaining:</dt>
|
| 1859 |
<dd class="col-sm-8">
|
| 1860 |
<span class="badge {% if ssl_info.days_remaining < 30 %}bg-danger{% elif ssl_info.days_remaining < 90 %}bg-warning text-dark{% else %}bg-success{% endif %}">
|
| 1861 |
+
{{ ssl_info.days_remaining }} days
|
| 1862 |
</span>
|
| 1863 |
{% if not ssl_info.is_valid %}
|
| 1864 |
+
<span class="badge bg-danger ms-2">Expired!</span>
|
| 1865 |
{% endif %}
|
| 1866 |
</dd>
|
| 1867 |
</dl>
|
| 1868 |
</div>
|
| 1869 |
</div>
|
| 1870 |
<div class="col-md-6">
|
| 1871 |
+
<h6 class="text-primary mb-3"><i class="bi bi-lock-fill me-2"></i>Connection and Encryption</h6>
|
| 1872 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1873 |
<dl class="row mb-0">
|
| 1874 |
+
<dt class="col-sm-4">Protocol:</dt>
|
| 1875 |
<dd class="col-sm-8">{{ ssl_info.protocol if ssl_info.protocol else 'N/A' }}</dd>
|
| 1876 |
{% if ssl_info.cipher %}
|
| 1877 |
+
<dt class="col-sm-4">Cipher Name:</dt>
|
| 1878 |
<dd class="col-sm-8 text-break">{{ ssl_info.cipher.name }}</dd>
|
| 1879 |
+
<dt class="col-sm-4">Cipher Version:</dt>
|
| 1880 |
<dd class="col-sm-8">{{ ssl_info.cipher.version }}</dd>
|
| 1881 |
+
<dt class="col-sm-4">Key Size (bits):</dt>
|
| 1882 |
<dd class="col-sm-8">{{ ssl_info.cipher.bits }}</dd>
|
| 1883 |
{% else %}
|
| 1884 |
+
<dt class="col-sm-12">Cipher information not available.</dt>
|
| 1885 |
{% endif %}
|
| 1886 |
</dl>
|
| 1887 |
</div>
|
|
|
|
| 1890 |
|
| 1891 |
<div class="row mb-4">
|
| 1892 |
<div class="col-md-12">
|
| 1893 |
+
<h6 class="text-primary mb-3"><i class="bi bi-globe me-2"></i>Alternative Names (SAN)</h6>
|
| 1894 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1895 |
{% if ssl_info.alt_names %}
|
| 1896 |
<ul class="list-unstyled mb-0">
|
|
|
|
| 1899 |
{% endfor %}
|
| 1900 |
</ul>
|
| 1901 |
{% else %}
|
| 1902 |
+
<p class="mb-0 text-muted">No alternative names found (SANs).</p>
|
| 1903 |
{% endif %}
|
| 1904 |
</div>
|
| 1905 |
</div>
|
|
|
|
| 1907 |
|
| 1908 |
<div class="row">
|
| 1909 |
<div class="col-md-12">
|
| 1910 |
+
<h6 class="text-primary mb-3"><i class="bi bi-info-circle-fill me-2"></i>Additional Certificate Details</h6>
|
| 1911 |
<div class="bg-light p-3 rounded shadow-sm">
|
| 1912 |
<dl class="row mb-0">
|
| 1913 |
+
<dt class="col-sm-4">Serial Number:</dt>
|
| 1914 |
<dd class="col-sm-8 text-break">{{ ssl_info.serial_number }}</dd>
|
| 1915 |
+
<dt class="col-sm-4">Signature Algorithm:</dt>
|
| 1916 |
<dd class="col-sm-8">{{ ssl_info.signature_algorithm }}</dd>
|
| 1917 |
</dl>
|
| 1918 |
</div>
|
|
|
|
| 1920 |
</div>
|
| 1921 |
|
| 1922 |
<div class="mt-4">
|
| 1923 |
+
<h6 class="text-primary mb-2"><i class="bi bi-code-slash me-2"></i>Raw SSL Data</h6>
|
| 1924 |
<div class="bg-dark text-light p-3 rounded" style="white-space: pre-wrap; word-break: break-word; font-family: monospace; font-size: 0.85em;">
|
| 1925 |
{{ ssl_info | tojson(indent=2) }}
|
| 1926 |
</div>
|
|
|
|
| 1937 |
<h2 class="accordion-header">
|
| 1938 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseHeaders">
|
| 1939 |
<i class="bi bi-file-text-fill me-2"></i>
|
| 1940 |
+
<strong>HTTP Headers</strong>
|
| 1941 |
</button>
|
| 1942 |
</h2>
|
| 1943 |
<div id="collapseHeaders" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 1944 |
<div class="accordion-body">
|
| 1945 |
<h6 class="text-primary mb-3">
|
| 1946 |
<i class="bi bi-box-arrow-in-right me-2"></i>
|
| 1947 |
+
Final Response Headers ({{ http_headers.final_url }})
|
| 1948 |
</h6>
|
| 1949 |
<div class="table-responsive mb-4">
|
| 1950 |
<table class="table table-striped table-bordered align-middle">
|
| 1951 |
<thead class="table-primary">
|
| 1952 |
<tr>
|
| 1953 |
+
<th style="width: 30%">Header</th>
|
| 1954 |
+
<th>Value</th>
|
| 1955 |
</tr>
|
| 1956 |
</thead>
|
| 1957 |
<tbody>
|
|
|
|
| 1968 |
{% if http_headers.history %}
|
| 1969 |
<h6 class="text-primary mt-4 mb-3">
|
| 1970 |
<i class="bi bi-arrow-repeat me-2"></i>
|
| 1971 |
+
Redirect History
|
| 1972 |
</h6>
|
| 1973 |
{% for h in http_headers.history %}
|
| 1974 |
<div class="redirect-item">
|
| 1975 |
<span class="redirect-number">{{ loop.index }}.</span>
|
| 1976 |
<span class="redirect-url">{{ h.url }}</span>
|
| 1977 |
+
<span class="badge badge-warning">Code: {{ h.status_code }}</span>
|
| 1978 |
</div>
|
| 1979 |
{% endfor %}
|
| 1980 |
{% endif %}
|
| 1981 |
|
| 1982 |
<!-- Ham HTTP Başlıkları metin olarak -->
|
| 1983 |
<div class="mt-4">
|
| 1984 |
+
<h6 class="text-primary mb-2"><i class="bi bi-code-slash me-2"></i>Raw HTTP Headers</h6>
|
| 1985 |
<div class="bg-dark text-light p-3 rounded" style="white-space: pre-wrap; word-break: break-word; font-family: monospace;">
|
| 1986 |
{{ http_headers }}
|
| 1987 |
</div>
|
|
|
|
| 1997 |
<h2 class="accordion-header">
|
| 1998 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseIpInfo">
|
| 1999 |
<i class="bi bi-map-fill me-2"></i>
|
| 2000 |
+
<strong>General IP Information</strong>
|
| 2001 |
</button>
|
| 2002 |
</h2>
|
| 2003 |
<div id="collapseIpInfo" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
|
|
| 2009 |
<dt class="text-primary fw-semibold">Hostname</dt>
|
| 2010 |
<dd class="mb-2">{{ ipinfo_data.hostname or 'N/A' }}</dd>
|
| 2011 |
|
| 2012 |
+
<dt class="text-primary fw-semibold">Service Provider</dt>
|
| 2013 |
<dd class="mb-2">{{ ipinfo_data.org or 'N/A' }}</dd>
|
| 2014 |
</dl>
|
| 2015 |
</div>
|
| 2016 |
<div class="col-md-6">
|
| 2017 |
<dl>
|
| 2018 |
+
<dt class="text-primary fw-semibold">Location</dt>
|
| 2019 |
<dd class="mb-2">
|
| 2020 |
{{ ipinfo_data.city or '' }},
|
| 2021 |
{{ ipinfo_data.region or '' }},
|
|
|
|
| 2025 |
{% endif %}
|
| 2026 |
</dd>
|
| 2027 |
|
| 2028 |
+
<dt class="text-primary fw-semibold">Coordinates</dt>
|
| 2029 |
<dd class="mb-2">{{ ipinfo_data.loc or 'N/A' }}</dd>
|
| 2030 |
</dl>
|
| 2031 |
</div>
|
|
|
|
| 2033 |
|
| 2034 |
<!-- Ham ipinfo_data JSON görünümü -->
|
| 2035 |
<div class="mt-4">
|
| 2036 |
+
<h6 class="text-primary mb-2"><i class="bi bi-code-slash me-2"></i>Raw IP Info Data</h6>
|
| 2037 |
<div class="bg-dark text-light p-3 rounded" style="white-space: pre-wrap; word-break: break-word; font-family: monospace;">
|
| 2038 |
{{ ipinfo_data }}
|
| 2039 |
</div>
|
|
|
|
| 2047 |
<h2 class="accordion-header">
|
| 2048 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseDnsRecords">
|
| 2049 |
<i class="bi bi-card-list me-2"></i>
|
| 2050 |
+
<strong>DNS Records</strong>
|
| 2051 |
</button>
|
| 2052 |
</h2>
|
| 2053 |
<div id="collapseDnsRecords" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 2054 |
<div class="accordion-body">
|
| 2055 |
<div class="row">
|
| 2056 |
<div class="col-md-6">
|
| 2057 |
+
<p><strong>Authoritative DNS:</strong> {{ authoritative_dns if authoritative_dns else "Not found" }}</p>
|
| 2058 |
+
<p><strong>DNSSEC Status:</strong> {{ dnssec_status }}</p>
|
| 2059 |
</div>
|
| 2060 |
</div>
|
| 2061 |
<hr>
|
|
|
|
| 2063 |
{% for record_type, records in dns_records.items() %}
|
| 2064 |
{% if records %}
|
| 2065 |
<div class="col-md-6 mb-3">
|
| 2066 |
+
<h5>{{ record_type }} Records</h5>
|
| 2067 |
<ul class="list-unstyled">
|
| 2068 |
{% if record_type == 'MX' %}
|
| 2069 |
{% for mx_record in records %}
|
| 2070 |
+
<li><strong>Preference:</strong> {{ mx_record.preference }} - <strong>Exchange:</strong> {{ mx_record.exchange }}</li>
|
| 2071 |
{% endfor %}
|
| 2072 |
{% elif record_type == 'PTR' %}
|
| 2073 |
{% for ptr_record in records %}
|
|
|
|
| 2079 |
{% endfor %}
|
| 2080 |
{% elif record_type == 'SRV' %}
|
| 2081 |
{% for srv_record in records %}
|
| 2082 |
+
<li><strong>Target:</strong> {{ srv_record.target }} - <strong>Port:</strong> {{ srv_record.port }} - <strong>Priority:</strong> {{ srv_record.priority }} - <strong>Weight:</strong> {{ srv_record.weight }}</li>
|
| 2083 |
{% endfor %}
|
| 2084 |
{% elif record_type == 'CAA' %}
|
| 2085 |
{% for caa_record in records %}
|
| 2086 |
+
<li><strong>Flags:</strong> {{ caa_record.flags }} - <strong>Tag:</strong> {{ caa_record.tag }} - <strong>Value:</strong> {{ caa_record.value }}</li>
|
| 2087 |
{% endfor %}
|
| 2088 |
{% elif record_type == 'CNAME' %}
|
| 2089 |
<li>{{ records }}</li>
|
|
|
|
| 2262 |
<h2 class="accordion-header">
|
| 2263 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseBgpGraph">
|
| 2264 |
<i class="bi bi-diagram-3-fill me-2"></i>
|
| 2265 |
+
<strong>BGP AS Path Visualization</strong>
|
| 2266 |
</button>
|
| 2267 |
</h2>
|
| 2268 |
<div id="collapseBgpGraph" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
| 2269 |
<div class="accordion-body">
|
| 2270 |
+
<p class="text-muted mb-3">BGP AS paths from observation points to the target. Different colors represent different paths. Use the mouse to zoom and drag.</p>
|
| 2271 |
|
| 2272 |
<div id="bgp-graph-container" class="bgp-graph-container"></div>
|
| 2273 |
|
|
|
|
| 2283 |
<h2 class="accordion-header">
|
| 2284 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseRipestat">
|
| 2285 |
<i class="bi bi-diagram-3-fill me-2"></i>
|
| 2286 |
+
<strong>Advanced BGP & Routing Analysis</strong>
|
| 2287 |
</button>
|
| 2288 |
</h2>
|
| 2289 |
<div id="collapseRipestat" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
|
|
| 2309 |
<h2 class="accordion-header">
|
| 2310 |
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseRawJson">
|
| 2311 |
<i class="bi bi-filetype-json me-2"></i>
|
| 2312 |
+
<strong>Full RDAP Response</strong>
|
| 2313 |
</button>
|
| 2314 |
</h2>
|
| 2315 |
<div id="collapseRawJson" class="accordion-collapse collapse" data-bs-parent="#detailsAccordion">
|
|
|
|
| 2443 |
})
|
| 2444 |
}).addTo(map)
|
| 2445 |
.bindPopup(`
|
| 2446 |
+
<b>Approximate Location</b><br>
|
| 2447 |
${ipInfoData.city || ''}, ${ipInfoData.region || ''}, ${ipInfoData.country_name || ipInfoData.country || ''}
|
| 2448 |
`).openPopup();
|
| 2449 |
});
|
|
|
|
| 2458 |
let graphInitialized = false;
|
| 2459 |
const drawGraph = () => {
|
| 2460 |
if (graphInitialized || !bgpGraphContainer.clientWidth || !bgpGraphContainer.clientHeight) {
|
| 2461 |
+
console.warn("BGP Graph: Container size is zero or graph already drawn. Skipping render.");
|
| 2462 |
return;
|
| 2463 |
}
|
| 2464 |
graphInitialized = true;
|
|
|
|
| 2537 |
const tooltip = d3.select("#tooltip");
|
| 2538 |
function mouseover(event, d) {
|
| 2539 |
tooltip.html(`
|
| 2540 |
+
<h6>AS Info: <code>${d.id}</code></h6>
|
| 2541 |
+
<p><strong>Name:</strong> ${d.name || 'N/A'}</p>
|
| 2542 |
+
<p><strong>Country:</strong> ${d.country || 'N/A'}</p>
|
| 2543 |
+
<p><strong>Type:</strong> ${d.node_type ? (d.node_type.charAt(0).toUpperCase() + d.node_type.slice(1)) : 'N/A'}</p>
|
| 2544 |
<hr>
|
| 2545 |
+
<p>${d.description || 'No description available.'}</p>
|
| 2546 |
`)
|
| 2547 |
.style("left", (event.pageX + 15) + "px")
|
| 2548 |
.style("top", (event.pageY - 28) + "px")
|
|
|
|
| 2986 |
if (!form.checkValidity()) return;
|
| 2987 |
submitBtn.disabled = true;
|
| 2988 |
submitBtn.dataset.originalHtml = submitBtn.innerHTML;
|
| 2989 |
+
submitBtn.innerHTML = '<span class="loading-spinner me-2" aria-hidden="true"></span>Analyzing...';
|
| 2990 |
});
|
| 2991 |
});
|
| 2992 |
</script>
|