Page MenuHomeDevCentral

D3258.diff
No OneTemporary

D3258.diff

diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,25 @@
+Copyright 2023 Nasqueron
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/netbox2darkbot.py b/netbox2darkbot.py
new file mode 100755
--- /dev/null
+++ b/netbox2darkbot.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+
+# -------------------------------------------------------------
+# Darkbot NetBox database
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Project: Nasqueron
+# Description: Reads queries from NetBox database (in CSV)
+# Write Darkbot .db database
+# License: BSD-2-Clause
+# -------------------------------------------------------------
+
+
+import csv
+import sys
+
+
+# -------------------------------------------------------------
+# Rows to darkbot
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+def print_reverse(rows, skip_first=False):
+ """List of lists [address, dns_name, description, status] into Darkbot entries"""
+ all_entries = {}
+ for address, dns_name, description, status in rows:
+ if skip_first:
+ skip_first = False
+ continue
+
+ if dns_name == "":
+ continue
+
+ entry = clean_ip(address)
+
+ if status != "active":
+ entry += f" [{status}]"
+
+ if dns_name not in all_entries:
+ all_entries[dns_name] = []
+ all_entries[dns_name].append(entry)
+
+ for dns_name, entries in all_entries.items():
+ line = f"{dns_name} "
+ line += " / ".join(entries)
+
+ print(line)
+
+
+def print_ips(rows, skip_first=False):
+ """List of lists [address, dns_name, description, status] into Darkbot entries"""
+ for address, dns_name, description, status in rows:
+ if skip_first:
+ skip_first = False
+ continue
+
+ line = clean_ip(address) + " "
+
+ stack = []
+
+ if not is_clean_ip(address):
+ stack.append(address)
+
+ if dns_name != "":
+ stack.append(dns_name)
+
+ if description != "":
+ stack.append(description)
+
+ if len(stack) > 0:
+ line += " / ".join(stack)
+ else:
+ line += "Undocumented IP on NetBox"
+
+ if status != "active":
+ line += f" [{status}]"
+
+ print(line)
+
+
+def clean_ip(ip):
+ return ip.split("/")[0]
+
+
+def is_clean_ip(ip):
+ return "/" not in ip
+
+
+# -------------------------------------------------------------
+# Application entry point
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+def run(content_type, ips_file):
+ """CSV to darkbot database"""
+ with open(ips_file) as fd:
+ rows = [row for row in csv.reader(fd)]
+
+ if content_type == "ips":
+ print_ips(rows, True)
+ elif content_type == "reverse":
+ print_reverse(rows, True)
+ else:
+ print(f"Unknown content type: {content_type}", file=sys.stderr)
+ sys.exit(2)
+
+
+if __name__ == "__main__":
+ argc = len(sys.argv)
+
+ if argc < 3:
+ print(f"Usage: {sys.argv[0]} <content type> <Netbox CSV file>", file=sys.stderr)
+ print("Supported content types are: ips, reverse", file=sys.stderr)
+ sys.exit(1)
+
+ run(sys.argv[1], sys.argv[2])

File Metadata

Mime Type
text/plain
Expires
Mon, Nov 18, 13:28 (19 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2250716
Default Alt Text
D3258.diff (4 KB)

Event Timeline