Skip to content

Instantly share code, notes, and snippets.

@tomislacker
Last active September 14, 2017 17:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tomislacker/abed858f31a901584aa28b0e4b273a51 to your computer and use it in GitHub Desktop.
Save tomislacker/abed858f31a901584aa28b0e4b273a51 to your computer and use it in GitHub Desktop.
Route53 RecordSet Finder
#!/usr/bin/env python
from __future__ import print_function
import boto3
import sys
r53 = boto3.client('route53')
def recurse_zones(client, looking_for):
print("Looking for: {}".format(looking_for))
pager = client.get_paginator('list_hosted_zones')
for page in pager.paginate():
for zone in page['HostedZones']:
_, _, zone_id = zone['Id'].split('/')
print("Checking zone ({i}): {n}".format(
i=zone_id,
n=zone['Name']))
recurse_records(client, zone_id, looking_for)
def recurse_records(client, zone_id, looking_for):
state = 0
old_state = state
pager = client.get_paginator('list_resource_record_sets')
for page in pager.paginate(HostedZoneId=zone_id):
for rrset in page['ResourceRecordSets']:
targets = []
if 'ResourceRecords' in rrset:
state = state | 1
targets += [
rr['Value'].rstrip('.')
for rr in rrset['ResourceRecords']
]
if 'AliasTarget' in rrset:
state = state | 2
targets += [
at['DNSName'].rstrip('.')
for at in rrset['AliasTarget']
]
matches = list(set(targets) & set(looking_for))
if matches:
print("Match ({z}): {t}: {n}\n{r}".format(
z=zone_id,
t=rrset['Type'],
n=rrset['Name'],
r=matches,
))
if __name__ == '__main__':
assert len(sys.argv) > 1, \
"Must provide IPs/hostnames being looked for"
r53 = boto3.client('route53')
recurse_zones(r53, sys.argv[1:])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment