diff --git a/decnet_web/src/components/AttackerDetail.tsx b/decnet_web/src/components/AttackerDetail.tsx
index 40453967..2564c7aa 100644
--- a/decnet_web/src/components/AttackerDetail.tsx
+++ b/decnet_web/src/components/AttackerDetail.tsx
@@ -61,6 +61,9 @@ interface AttackerData {
commands: { service: string; decky: string; command: string; timestamp: string }[];
country_code: string | null;
country_source: string | null;
+ asn: number | null;
+ as_name: string | null;
+ asn_source: string | null;
ptr_record: string | null;
updated_at: string;
behavior: AttackerBehavior | null;
@@ -1262,6 +1265,26 @@ const AttackerDetail: React.FC = () => {
unknown
)}
+
+ AS:
+ {attacker.asn != null ? (
+
+ AS{attacker.asn}
+ {attacker.as_name && (
+
+ {attacker.as_name}
+
+ )}
+ {attacker.asn_source && (
+
+ ({attacker.asn_source})
+
+ )}
+
+ ) : (
+ unknown
+ )}
+
REVERSE DNS:
{attacker.ptr_record ? (
diff --git a/decnet_web/src/components/Attackers.css b/decnet_web/src/components/Attackers.css
index 1de6638c..aeb60fbb 100644
--- a/decnet_web/src/components/Attackers.css
+++ b/decnet_web/src/components/Attackers.css
@@ -92,6 +92,16 @@
font-size: 0.72rem;
opacity: 0.7;
}
+.attackers-root .ak-card .ak-asn {
+ font-size: 0.62rem;
+ letter-spacing: 1px;
+ padding: 1px 6px;
+ border: 1px solid var(--border);
+ color: var(--matrix);
+ opacity: 0.75;
+ font-weight: 600;
+ cursor: help;
+}
.attackers-root .ak-stats {
display: flex;
diff --git a/decnet_web/src/components/Attackers.tsx b/decnet_web/src/components/Attackers.tsx
index f3e6a5fc..c83f0d01 100644
--- a/decnet_web/src/components/Attackers.tsx
+++ b/decnet_web/src/components/Attackers.tsx
@@ -25,6 +25,9 @@ interface AttackerEntry {
commands: any[];
country_code: string | null;
country_source: string | null;
+ asn: number | null;
+ as_name: string | null;
+ asn_source: string | null;
updated_at: string;
}
@@ -209,6 +212,14 @@ const Attackers: React.FC = () => {
First: {new Date(a.first_seen).toLocaleDateString()}
Last: {timeAgo(a.last_seen)}
+ {a.asn != null && (
+
+ AS{a.asn}
+
+ )}
{a.is_traversal && TRAVERSAL}