loranloran

Export DNS zones from InternetBS

May 14th, 2024 (edited)
1,130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.40 KB | Source Code | 0 0
  1. # Préalable :
  2.  
  3. # Installer venv si nécessaire
  4. sudo apt install python3-venv
  5.  
  6. # Créer un environnement virtuel
  7. python3 -m venv myenv
  8.  
  9. # Activer l'environnement virtuel
  10. source myenv/bin/activate
  11.  
  12. # Installer les librairies dans l'environnement virtuel
  13. pip install requests
  14. pip install tabulate
  15. .... installer les autres librairies
  16.  
  17. # Exécuter votre script
  18. python exportDNSfromInternetBS.py
  19.  
  20. # Désactiver l'environnement virtuel
  21. deactivate
  22.  
  23.  
  24. ==============================================================================
  25. Fichier Python exportDNSfromInternetBS.py
  26. ==============================================================================
  27.  
  28. import requests
  29. import json
  30. from tabulate import tabulate
  31. from collections import defaultdict
  32.  
  33. # Configuration de l'API
  34. API_URL = "https://api.internet.bs"
  35. API_KEY = 'XXXXXXXXXXXXXXXXXX'
  36. API_PASSWORD = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
  37.  
  38.  
  39. # Fonction pour effectuer une requête à l'API
  40. def api_request(resource, params):
  41.     params.update({
  42.         "ApiKey": API_KEY,
  43.         "Password": API_PASSWORD,
  44.         "ResponseFormat": "JSON"
  45.     })
  46.     response = requests.post(f"{API_URL}{resource}", data=params)
  47.     return response.json()
  48.  
  49. # Récupérer la liste des domaines
  50. def get_domain_list():
  51.     response = api_request("/Domain/List", {})
  52.     return response.get("domain", [])
  53.  
  54. # Récupérer les enregistrements DNS pour un domaine
  55. def get_dns_records(domain):
  56.     response = api_request("/Domain/DnsRecord/List", {"Domain": domain})
  57.     return response.get("records", [])
  58.  
  59. # Récupérer les nameservers pour un domaine
  60. def get_nameservers(domain):
  61.     response = api_request("/Domain/Info", {"Domain": domain})
  62.     return response.get("nameservers", [])
  63.  
  64. # Fonction principale
  65. def main():
  66.     domains = get_domain_list()
  67.     all_records = defaultdict(lambda: defaultdict(list))
  68.     all_types = set()
  69.  
  70.     for domain in domains:
  71.         records = get_dns_records(domain)
  72.         for record in records:
  73.             record_type = record.get('type', 'Unknown')
  74.             all_records[domain][record_type].append(record)
  75.             all_types.add(record_type)
  76.        
  77.         # Ajouter les nameservers
  78.         nameservers = get_nameservers(domain)
  79.         for ns in nameservers:
  80.             all_records[domain]['NS'].append({
  81.                 'type': 'NS',
  82.                 'name': domain,
  83.                 'ttl': 'N/A',
  84.                 'value': ns
  85.             })
  86.         all_types.add('NS')
  87.  
  88.     # Générer le tableau HTML
  89.     html_output = """
  90.    <html>
  91.    <head>
  92.    <style>
  93.    body { font-family: Arial, sans-serif; }
  94.    table { border-collapse: collapse; width: 100%; table-layout: fixed; }
  95.    th, td { border: 1px solid black; padding: 8px; text-align: left; overflow: hidden; text-overflow: ellipsis; }
  96.    th { background-color: #f2f2f2; }
  97.    .record-type { font-weight: bold; background-color: #e6e6e6; }
  98.    #filters { margin-bottom: 20px; }
  99.    #filters input, #filters select { margin-right: 10px; padding: 5px; }
  100.    </style>
  101.    </head>
  102.    <body>
  103.    <div id="filters">
  104.        <input type="text" id="domainFilter" placeholder="Filter by domain">
  105.        <select id="typeFilter">
  106.            <option value="">All Types</option>
  107.            """ + "".join([f"<option value='{t}'>{t}</option>" for t in sorted(all_types)]) + """
  108.        </select>
  109.        <button onclick="applyFilters()">Apply Filters</button>
  110.    </div>
  111.    <table id="dnsTable">
  112.    <thead>
  113.        <tr>
  114.            <th>Domain</th>
  115.            <th>Type</th>
  116.            <th>Name</th>
  117.            <th>TTL</th>
  118.            <th>Value</th>
  119.            <th>Priority</th>
  120.        </tr>
  121.    </thead>
  122.    <tbody>
  123.    """
  124.  
  125.     for domain, records in all_records.items():
  126.         for record_type, record_list in records.items():
  127.             for record in record_list:
  128.                 html_output += f"""
  129.                <tr>
  130.                    <td>{domain}</td>
  131.                    <td>{record_type}</td>
  132.                    <td>{record.get('name', 'N/A')}</td>
  133.                    <td>{record.get('ttl', 'N/A')}</td>
  134.                    <td>{record.get('value', 'N/A')}</td>
  135.                    <td>{record.get('priority', 'N/A') if record_type == 'MX' else 'N/A'}</td>
  136.                </tr>
  137.                """
  138.  
  139.     html_output += """
  140.    </tbody>
  141.    </table>
  142.    <script>
  143.    function applyFilters() {
  144.        var domainFilter = document.getElementById('domainFilter').value.toLowerCase();
  145.        var typeFilter = document.getElementById('typeFilter').value;
  146.        var table = document.getElementById('dnsTable');
  147.        var tr = table.getElementsByTagName('tr');
  148.  
  149.        for (var i = 1; i < tr.length; i++) {
  150.            var td = tr[i].getElementsByTagName('td');
  151.            var domain = td[0].textContent.toLowerCase();
  152.            var type = td[1].textContent;
  153.            
  154.            if ((domain.indexOf(domainFilter) > -1 || domainFilter === '') &&
  155.                (type === typeFilter || typeFilter === '')) {
  156.                tr[i].style.display = '';
  157.            } else {
  158.                tr[i].style.display = 'none';
  159.            }
  160.        }
  161.    }
  162.    </script>
  163.    </body>
  164.    </html>
  165.    """
  166.  
  167.     # Sauvegarder le résultat dans un fichier HTML
  168.     with open("dns_records.html", "w") as f:
  169.         f.write(html_output)
  170.  
  171.     print("DNS records exported to dns_records.html")
  172.  
  173. if __name__ == "__main__":
  174.     main()
  175.  
  176.  
Advertisement
Add Comment
Please, Sign In to add comment