Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F3786011
D3258.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
4 KB
Referenced Files
None
Subscribers
None
D3258.diff
View Options
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
Details
Attached
Mime Type
text/plain
Expires
Wed, Nov 27, 12:08 (14 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2264609
Default Alt Text
D3258.diff (4 KB)
Attached To
Mode
D3258: Export Netbox IPAM information for darkbot
Attached
Detach File
Event Timeline
Log In to Comment