Ich versuche, ein Python-Skript zu schreiben, ziehen Sie alle Google Cloud Compute-Subnetze aus ihrem DNS. Mehr Informationen zu dieser hier:Hostnamen aus einer einzelnen Textzeile mit Regex ziehen
https://cloud.google.com/compute/docs/faq#where_can_i_find_short_product_name_ip_ranges
Bisher bin ich in der Lage, die TXT-Eintrag Liste der einzelnen Host-Namen als basestring ohne Probleme ziehen.
import dns.resolver
# Set the resolver
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['8.8.8.8']
answer = my_resolver.query('_cloud-netblocks.googleusercontent.com', 'TXT')
for rdata in answer:
for txt_string in rdata.strings:
txt_record = txt_string
Dies läßt mich mit einer Reihe von
v=spf1 include:_cloud-netblocks1.googleusercontent.com include:_cloud-netblocks2.googleusercontent.com include:_cloud-netblocks3.googleusercontent.com include:_cloud-netblocks4.googleusercontent.com include:_cloud-netblocks5.googleusercontent.com ?all
Was würde ich tun möchte, ist die Verwendung re.match die 5 Host-Namen aus dieser ersten Antwort zu extrahieren, damit ich in Folge Lookups tun kann, und Streifen aus Die Subnetze ordnen sie dann in ein Array ein. Alle meine Bemühungen mit Regex waren bisher nicht so ... großartig ... Ich fragte mich, ob irgendjemand eine Anleitung geben würde? Vielen Dank!
Edit:
Hier ist die vollständige Skript für alle anderen mit einem Bedarf alle Google-Cloud-IPs zu sammeln.
import dns.resolver, re
# Set the resolver
my_resolver = dns.resolver.Resolver()
my_resolver.nameservers = ['8.8.8.8']
answer = my_resolver.query('_cloud-netblocks.googleusercontent.com', 'TXT')
for rdata in answer:
for txt_string in rdata.strings:
txt_record = txt_string
# Extract hostnames into array
hostnames = [x.split(":")[1] for x in txt_record.split() if ":" in x]
total_subnets = []
for host in hostnames:
answer = my_resolver.query(host, 'TXT')
for rdata in answer:
for txt_string in rdata.strings:
txt_record = txt_string
ip4_subnets = re.findall(r'ip4:(\S+)', txt_record)
ip6_subnets = re.findall(r'ip6:(\S+)', txt_record)
for subnet in ip4_subnets:
total_subnets.append(subnet)
for subnet in ip6_subnets:
total_subnets.append(subnet)
print total_subnets
Ausgezeichnet! Hat super funktioniert! Vielen Dank! – user2421173