Add script that parses the interesting parts from a wireguard config b/c C string handling is hard
parent
c9c72159b7
commit
1c72e34eec
|
@ -0,0 +1,68 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Carve the interesting parts out of a wireguard config file and print them to stdout such that it's easier to read them in C"""
|
||||
|
||||
import argparse
|
||||
|
||||
def is_ip4(string):
|
||||
"""Check if the given string is in IPv4 format"""
|
||||
if string.count(".") == 3:
|
||||
for s in string.split("."):
|
||||
try:
|
||||
int(s)
|
||||
except:
|
||||
return False
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def is_ip6(string):
|
||||
"""Check if the given string is in IPv6 format"""
|
||||
if ":" in string:
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def parse_ips(string):
|
||||
"""Parse the IP4s and IP6s out of a comma-separated list of IPs"""
|
||||
ip4 = []
|
||||
ip6 = []
|
||||
|
||||
ips = [s.strip() for s in string.split(",")]
|
||||
for ip in ips:
|
||||
if is_ip4(ip):
|
||||
ip4.append(ip)
|
||||
elif is_ip6(ip):
|
||||
ip6.append(ip)
|
||||
|
||||
return ip4, ip6
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("config", metavar="CONFIG-FILE", help="The path of the configuration file")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
with open(args.config, "r") as config_file:
|
||||
lines = config_file.readlines()
|
||||
|
||||
local_section = False
|
||||
for line in lines:
|
||||
line = line.strip()
|
||||
|
||||
if "[Interface]" in line:
|
||||
local_section = True
|
||||
|
||||
if line and not line.startswith("#"):
|
||||
if line.startswith("Address"):
|
||||
# this is the line where the local addresses are defined
|
||||
split = line.split("=")
|
||||
ip4, ip6 = parse_ips(split[1])
|
||||
|
||||
print("IPv4")
|
||||
for ip in ip4:
|
||||
print(ip)
|
||||
print("IPv6")
|
||||
for ip in ip6:
|
||||
print(ip)
|
Loading…
Reference in New Issue