Initial commit: mwhois with SCION AS support and decimal AS conversion

Based on mwhois by Antonios A. Chariton
Modifications for SCION AS support by Olaf Baumert, Axpo Systems AG
This commit is contained in:
Olaf Baumert
2025-06-03 11:01:02 +00:00
commit 34c631a06d
340 changed files with 212460 additions and 0 deletions

130
patch.diff Normal file
View File

@@ -0,0 +1,130 @@
diff --git a/mwhoisd b/mwhoisd
index 0000000..6e21fcc 100755
--- a/mwhoisd
+++ b/mwhoisd
@@ -54,7 +54,7 @@ def isDomain(qr):
if(len(qr.split(".")) == 1):
return False
zones = qr.split(".")
- ac = re.compile("^[a-z0-9\.-]+\n")
+ ac = re.compile(r"^[a-z0-9\.-]+\n")
for zone in zones:
if(zone == ""):
return False
@@ -66,6 +66,13 @@ def isDomain(qr):
return False
return True
+# Check if the input is a valid SCION AS identifier
+def isAS(qr):
+ # Check if format matches SCION AS identifier (e.g., "2:2:0")
+ if re.match(r'^\d+:\d+:\d+$', qr):
+ return True
+ return False
+
# Check if an IP belongs to a CIDR IP block
def isIPinCIDR(ip, network):
return IPAddress(ip) in IPNetwork(network)
@@ -76,14 +83,16 @@ while True:
while True:
query = con.recv(MAX_QUERY_SIZE)
if not query:
break
- log = log + query.replace("\r\n", "").replace("\n", "") + " - "
- query = sanitizeQuery(query)
+ # Decode bytes to string
+ query_str = query.decode('utf-8', errors='ignore')
+ log = log + query_str.replace("\r\n", "").replace("\n", "") + " - "
+ query = sanitizeQuery(query_str)
rsp = "# +-----------------------------------+" + n
- rsp = rsp + "# | DaKnObNET |" + n
+ rsp = rsp + "# | AXPO SYSTEMS AG |" + n
rsp = rsp + "# +-----------------------------------+" + n
rsp = rsp + "# | This query was served by mwhois |" + n
rsp = rsp + "# +-----------------------------------+" + n
rsp = rsp + n
if(isIP(query)):
@@ -115,13 +124,27 @@ while True:
rsp = rsp + n
rsp = rsp + "# Domain name was not found in the whois database" + n
log = log + " (Not found)" + n
+ elif(isAS(query)):
+ # WHOIS SCION AS
+ log = log + "SCION AS" + n
+
+ if os.path.exists("db/as/" + query):
+ dd = open("db/as/" + query, "r")
+ rsp = rsp + dd.read()
+ dd.close()
+ found = True
+ log = log + n
+ else:
+ rsp = rsp + n
+ rsp = rsp + "# SCION AS was not found in the whois database" + n
+ log = log + " (Not found)" + n
else:
# Unrecognized
log = log + "Unrecognized" + n
rsp = rsp + n
- rsp = rsp + "# Error. Unknown query type. Query is not IPv4 or Domain" + n
- con.send(rsp)
+ rsp = rsp + "# Error. Unknown query type. Query is not IPv4, Domain or SCION AS" + n
+ # Encode string to bytes before sending
+ con.send(rsp.encode('utf-8'))
con.close()
if(LOGFILE!=""):
# Save to logs
diff --git a/add-as b/add-as
new file mode 100755
index 0000000..05f0df7
--- /dev/null
+++ b/add-as
@@ -0,0 +1,38 @@
+#!/usr/bin/python
+
+# Use this file to add SCION AS entries to the whois database
+
+import os
+import json
+
+# Ensure the AS database directory exists
+os.system("mkdir -p db/as")
+
+as_id = input("Enter SCION AS Identifier (format ISD:AS:Instance, e.g. 2:2:0): ")
+
+# Validate AS ID format
+import re
+if not re.match(r'^\d+:\d+:\d+$', as_id):
+ print("Invalid SCION AS Identifier format. Expected format: ISD:AS:Instance (e.g. 2:2:0)")
+ exit(1)
+
+# Get AS details
+isd = input("Enter ISD: ")
+as_decimal = input("Enter AS decimal value: ")
+organization = input("Enter Organization: ")
+country = input("Enter Country Code: ")
+status = input("Enter Status (ASSIGNED/ALLOCATED): ")
+description = input("Enter Description: ")
+contact = input("Enter Contact Email: ")
+date_allocated = input("Enter Date Allocated (YYYY-MM-DD): ")
+
+# Prepare AS data
+n = "\r\n"
+body = "% SCION AS WHOIS Information" + n + n
+body += "AS Identifier: " + as_id + n
+body += "ISD: " + isd + n
+body += "AS decimal: " + as_decimal + n
+body += "Organization: " + organization + n
+body += "Country: " + country + n
+body += "Status: " + status + n
+body += "Description: " + description + n
+body += "Contact: " + contact + n
+body += "DateAllocated: " + date_allocated + n
+
+# Save to file
+d = open("db/as/" + as_id, "w+")
+d.write(body)
+d.close()
+print("Done! SCION AS record added successfully.")