# Basic OSINT Python SDK from scratch ### Hobson Lane ### Feb Python User Group --- ## `osint.st` (SecurityTrails) ```python >>> from st import * >>> who get history history_all extract_links associated domain dotenv subdomains nearby ping requests ``` --- ## Links ```python >>> extract_links('http://lumeneo.ai') {'url': 'http://lumeneo.ai', 'endpoint': "cache://extract_links('http://lumeneo.ai')", 'links': [ 'https://vision.lumeneo.ai/', 'https://aikya.lumeneo.ai/', 'https://automitra.lumeneo.ai/', './#hero', ... './#hero'], 'message': 'Retrieved from cache'} ``` --- ## Basic DNS (A Record) ```python >>> domain('lumeneo.ai') {'alexa_rank': None, 'apex_domain': 'lumeneo.ai', 'current_dns': {'a': {'first_seen': '2025-12-20', 'values': [{'h': None, 'ip': '35.71.142.77', 'ip_organization': 'Amazon.com, Inc.'}, {'h': None, 'ip': '52.223.52.2', 'ip_organization': 'Amazon.com, Inc.'}, {'h': None, 'ip': '76.76.21.21', 'ip_organization': 'Amazon.com, Inc.'}]}, ``` --- ## More DNS (AAAA, MX Record) ```python 'aaaa': {}, 'mx': {'first_seen': '2024-08-11', 'values': [{'hostname': 'smtp.google.com', 'hostname_count': 0, 'hostname_organization': 'Google LLC', 'priority': 1}, {'hostname': 'flndgo354pe6xfs5e4bidm7ackjg36aqqngx4jbdgsctuvpi7baq.mx-verification.google.com', 'hostname_count': 0, 'hostname_organization': None, 'priority': 15}]}, ``` --- ## More DNS (AAAA, MX Record) ```python 'ns': {'first_seen': '2024-08-06', 'values': [{'nameserver': 'ns58.domaincontrol.com', 'nameserver_count': 0, 'nameserver_organization': 'GoDaddy'}, {'nameserver': 'ns57.domaincontrol.com', 'nameserver_count': 0, 'nameserver_organization': 'GoDaddy'}]}, ``` ## More DNS (AAAA, MX Record) ```python 'soa': {'first_seen': '2024-08-06', 'values': [{'email': 'dns.jomax.net', 'email_count': 0, 'ttl': 28800}]}, 'txt': {}}, 'endpoint': '/v1/domain/lumeneo.ai', 'hostname': 'lumeneo.ai', 'subdomain_count': 1} ``` ## More DNS (AAAA, MX Record) ```python >>> subdomains('lumeneo.ai') {'endpoint': '/v1/domain/lumeneo.ai/subdomains', 'subdomain_count': 15, 'subdomains': ['pay', 'aikya', 'automitra', 'www', 'aikyalabs', 'test', 'aarogya', 'vision', 'demo', 'aarogya-backend', 'dev', 'voice', 'web', 'qa', 'voiceapi']} ``` --- ## Associated pages ```python >>> associated('lumeneo.ai') {'endpoint': '/v1/domain/lumeneo.ai/associated', 'meta': {'max_page': 0, 'page': 1, 'query': None, 'total_pages': 0}, 'record_count': 0, 'records': []} ``` --- ### Nearby IPs ```python >>> nearby('35.71.142.77') {'blocks': [ {'active_egress': False, 'hostnames': ['ab39a1748bb653273.awsglobalaccelerator.com'], 'ip': '35.71.142.64/32', 'ports': [], 'sites': 1}, ... {'active_egress': False, 'hostnames': ['23478e46.nip.io', 'a05379e7d562957d3.awsglobalaccelerator.com', 'customer.api.dev-aws.lantmannen.com', 'mtls.api.dev-aws.lantmannen.com'], 'ip': '35.71.142.70/32', 'ports': [4443, 443], 'sites': 4}, {'active_egress': False, 'hostnames': ['23478e47.nip.io', 'aca10d077a8ce05f6.awsglobalaccelerator.com'], 'ip': '35.71.142.71/32', 'ports': [], 'sites': 2}, ``` --- ## More Nearby IPs ``` {'active_egress': False, 'hostnames': ['acdb54cf2f10705e5.awsglobalaccelerator.com', 'apacinsurance.in', 'api.complicore.co'], 'ip': '35.71.142.72/32', 'ports': [80, 443], 'sites': 3}, {'active_egress': False, 'hostnames': ['af9557bdd0a2d195c.awsglobalaccelerator.com', 'api.search.brave.software', 'onvatoutdemanteler.fr'], 'ip': '35.71.142.76/32', 'ports': [443], 'sites': 3}, {'active_egress': False, 'current': True, 'hostnames': ['0-1-n.design', '0-1.so', '0-100.io', '0.1lab.fr', '00.smilesoft.dev'], 'ip': '35.71.142.77/32', 'ports': [80, 443], 'sites': 297225}, ``` --- ## Nearby IP Ports! ```python {'active_egress': False, 'hostnames': ['ae127f14d62144577.awsglobalaccelerator.com'], 'ip': '35.71.142.79/32', 'ports': [64738, 57176, 55554, ..., 110, 106, 102, 84, 82, 4443, 80, 443], 'sites': 1}], 'endpoint': '/v1/ips/nearby/35.71.142.77'} ``` --- ## Associated with Tacos? ```python >>> associated('artesanotaco.com') {'endpoint': '/v1/domain/artesanotaco.com/associated', 'meta': {'max_page': 0, 'page': 1, 'query': None, 'total_pages': 0}, 'record_count': 0, 'records': []} ``` --- ## Taco subdomains ```python >>> subdomains('artesanotaco.com') {'endpoint': '/v1/domain/artesanotaco.com/subdomains', 'meta': {'limit_reached': False}, 'subdomain_count': 1, 'subdomains': ['www']} ``` --- ## DNS History ```python >>> history('artesanotaco.com') {'endpoint': '/v1/history/artesanotaco.com/dns/a', 'pages': 1, 'records': [{'first_seen': '2020-12-18', 'last_seen': '2026-02-21', 'organizations': ['Wix.com Ltd.'], 'type': 'a', 'values': [{'ip': '185.230.63.186', 'ip_count': 0}, {'ip': '185.230.63.171', 'ip_count': 0}, {'ip': '185.230.63.107', 'ip_count': 0}]}, {'first_seen': '2019-10-25', 'last_seen': '2020-12-18', 'organizations': ['Google LLC'], 'type': 'a', 'values': [{'ip': '23.236.62.147', 'ip_count': 0}]}, {'first_seen': '2019-10-07', 'last_seen': '2019-10-25', 'organizations': ['GoDaddy.com, LLC'], 'type': 'a', 'values': [{'ip': '184.168.131.241', 'ip_count': 0}]}, ... 'type': 'a/ipv4', 'ips': []} ``` ## Full DNS History ```python >>> history_all('artesanotaco.com') {... 'aaaa': {'endpoint': '/v1/history/artesanotaco.com/dns/aaaa', 'pages': 0, 'records': [], 'type': 'a/ipv6', 'ips': []}, 'mx': {'endpoint': '/v1/history/artesanotaco.com/dns/mx', 'pages': 1, 'records': [{'first_seen': '2019-11-04', 'last_seen': '2026-02-21', 'organizations': ['Google LLC'], 'type': 'mx', 'values': [{'host': 'aspmx.l.google.com', 'mx_count': 0, 'priority': 10}, {'host': 'alt1.aspmx.l.google.com', 'mx_count': 0, 'priority': 20}, ...]}], 'type': 'mx', 'ips': []}, 'ns': {'endpoint': '/v1/history/artesanotaco.com/dns/ns', 'pages': 1, 'records': [{'first_seen': '2019-10-25', 'last_seen': '2026-02-21', 'organizations': ['Google LLC'], 'type': 'ns', 'values': [{'nameserver': 'ns12.wixdns.net', 'nameserver_count': 0}, {'nameserver': 'ns13.wixdns.net', 'nameserver_count': 0}]}, ``` --- ## DNS TXT Record ```python 'txt': {'endpoint': '/v1/history/artesanotaco.com/dns/txt', 'pages': 1, 'records': [{'first_seen': '2019-11-03', 'last_seen': '2026-02-21', 'organizations': [], 'type': 'txt', 'values': [{'value': 'google-site-verification=p26bC6YdYJ-4FFZjE4cqIh8rMG28134XWgsT9ZIqukQ'}]}, {'first_seen': '2019-09-12', 'last_seen': '2019-11-03', 'organizations': [], 'type': 'txt', 'values': []}], 'type': 'txt', 'ips': []}} ```