Advertisement
Keyznet

Subdomain Finder - SecurityTrails

Mar 6th, 2025 (edited)
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.01 KB | None | 0 0
  1. import requests
  2. import time
  3. from datetime import datetime
  4.  
  5. class SubdomainFinder:
  6.     def __init__(self, api_key):
  7.         self.api_key = api_key
  8.         self.base_url = "https://api.securitytrails.com/v1"
  9.         self.headers = {'apikey': self.api_key}
  10.    
  11.     def find_subdomains(self, domain, children_only=False):
  12.        
  13.         try:
  14.             all_subdomains = []
  15.             page = 1
  16.             total_pages = 1
  17.            
  18.             while page <= total_pages:
  19.                 params = {
  20.                     'children_only': str(children_only).lower(),
  21.                     'page': page,
  22.                     'limit': 100
  23.                 }
  24.                
  25.                 response = requests.get(
  26.                     f"{self.base_url}/domain/{domain}/subdomains",
  27.                     headers=self.headers,
  28.                     params=params
  29.                 )
  30.                 response.raise_for_status()
  31.                
  32.                 data = response.json()
  33.                 current_subs = data.get('subdomains', [])
  34.                 all_subdomains.extend([f"{sub}.{domain}" for sub in current_subs])
  35.                
  36.                 meta = data.get('meta', {})
  37.                 total_pages = meta.get('max_page', 1)
  38.                
  39.                 print(f"🔍 Memproses halaman {page}/{total_pages}...")
  40.                 page += 1
  41.                 time.sleep(0.3)
  42.            
  43.             return all_subdomains
  44.            
  45.         except Exception as e:
  46.             print(f"❌ Error: {str(e)}")
  47.             return []
  48.  
  49. def save_to_file(domain, subdomains):
  50.    
  51.     filename = f"results_{domain}.txt"
  52.     with open(filename, 'w') as f:
  53.         f.write("\n".join(subdomains))
  54.     return filename
  55.  
  56. def print_banner():
  57.    
  58.     print("""
  59.                                                      
  60. » Subdomain Finder
  61. » Author: ./KeyzNet
  62. » Contact: t.me/keyznet
  63.    """)
  64.  
  65. def main():
  66.     API_KEY = ""
  67.    
  68.     print_banner()
  69.    
  70.     if len(API_KEY) != 32 or not API_KEY.startswith('ADL'):
  71.         print("\n⚠️  ERROR: Format API key tidak valid!")
  72.         return
  73.    
  74.     finder = SubdomainFinder(API_KEY)
  75.    
  76.     domain = input("\n⌨  Masukkan domain target: ").strip().lower()
  77.     if not domain:
  78.         print("\n⚠️  ERROR: Domain tidak boleh kosong!")
  79.         return
  80.    
  81.     children_only = input("🔘 Cari subdomain langsung saja? (y/n): ").lower() == 'y'
  82.    
  83.     print("\n🔄 Memulai scanning...")
  84.     try:
  85.         subdomains = finder.find_subdomains(domain, children_only)
  86.        
  87.         if subdomains:
  88.             filename = save_to_file(domain, subdomains)
  89.             print(f"\n✅ Berhasil menemukan {len(subdomains)} subdomain")
  90.             print(f"💾 Hasil tersimpan di: {filename}")
  91.         else:
  92.             print("\n❌ Tidak ditemukan subdomain")
  93.            
  94.     except KeyboardInterrupt:
  95.         print("\n🛑 Operasi dibatalkan oleh pengguna")
  96.  
  97. if __name__ == "__main__":
  98.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement