70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import csv
 | |
| import datetime
 | |
| import logging
 | |
| import ipaddress
 | |
| import json
 | |
| import os
 | |
| import requests
 | |
| 
 | |
| servers_url = 'http://public-dns.info/nameservers.csv'
 | |
| csv_path = 'nameservers.csv'
 | |
| dns4_path = 'list4.json'
 | |
| dns6_path = 'list6.json'
 | |
| 
 | |
| if os.path.isfile(csv_path):
 | |
|     logging.warning('Not erasing local csv file')
 | |
| else:
 | |
|     req = requests.get(servers_url)
 | |
|     with open(csv_path, 'wb') as fd:
 | |
|         for chunk in req.iter_content(4096):
 | |
|             fd.write(chunk)
 | |
| 
 | |
| ip4_list = []
 | |
| ip6_list = []
 | |
| with open(csv_path) as csv_file:
 | |
|     servers_list = csv.reader(csv_file, delimiter=',', quotechar='"')
 | |
| 
 | |
|     for row in servers_list:
 | |
|         if row[5] == '':
 | |
|             try:
 | |
|                 ip = ipaddress.ip_address(row[0])
 | |
| 
 | |
|                 if ip.version == 4:
 | |
|                     list = ip4_list
 | |
|                 else:
 | |
|                     list = ip6_list
 | |
| 
 | |
|                 list.append(ip.compressed)
 | |
|                 if len(row[1]) > 0 and row[1] != '.':
 | |
|                     list.append(row[1])
 | |
| 
 | |
|             except ValueError as exc:
 | |
|                 logging.warning(str(exc))
 | |
| 
 | |
| version = int(datetime.date.today().strftime('%Y%m%d'))
 | |
| 
 | |
| out4_list = {}
 | |
| out4_list['name'] = 'List of known IPv4 public DNS resolvers'
 | |
| out4_list['version'] = version
 | |
| out4_list['description'] = 'Event contains one or more public IPv4 DNS resolvers as attribute with an IDS flag set'
 | |
| out4_list['matching_attributes'] = ['ip-src', 'ip-dst', 'domain|ip']
 | |
| out4_list['list'] = sorted(set(ip4_list))
 | |
| 
 | |
| 
 | |
| out6_list = {}
 | |
| out6_list['name'] = 'List of known IPv6 public DNS resolvers'
 | |
| out6_list['version'] = version
 | |
| out6_list['description'] = 'Event contains one or more public IPv6 DNS resolvers as attribute with an IDS flag set'
 | |
| out6_list['matching_attributes'] = ['ip-src', 'ip-dst', 'domain|ip']
 | |
| out6_list['list'] = sorted(set(ip6_list))
 | |
| 
 | |
| 
 | |
| # print(json.dumps(out4_list, indent=True))
 | |
| with open(dns4_path, 'w') as dns4_file:
 | |
|     dns4_file.write(json.dumps(out4_list, indent=4, sort_keys=True))
 | |
| 
 | |
| with open(dns6_path, 'w') as dns6_file:
 | |
|     dns6_file.write(json.dumps(out6_list, indent=4, sort_keys=True))
 |