🔧 chk_url_ips V1R1 — Rapport technique🔧 chk_url_ips V1R1 — Rapport technique🔧 chk_url_ips V1R1 — Informe técnico
Métriques clés
Key metrics
Métricas clave
| Indicateur | Valeur |
|---|---|
| Lignes de code | ~2 800 |
| Fonctions principales | 45+ |
| Formats d'hôtes | hostname, IP, plage IP, CIDR |
| Sorties | HTML · JSON cert · JSON RDAP · CSV |
| Plateformes | Windows · Linux · macOS |
| Dépendances | cryptography · requests · ipwhois · tldextract · paramiko (optionnel) |
| Metric | Value |
|---|---|
| Lines of code | ~2 800 |
| Main functions | 45+ |
| Host formats | hostname, IP, IP range, CIDR |
| Outputs | HTML · JSON cert · JSON RDAP · CSV |
| Platforms | Windows · Linux · macOS |
| Dependencies | cryptography · requests · ipwhois · tldextract · paramiko (optional) |
| Indicador | Valor |
|---|---|
| Líneas de código | ~2 800 |
| Funciones principales | 45+ |
| Formatos de host | hostname, IP, rango de IP, CIDR |
| Salidas | HTML · JSON cert · JSON RDAP · CSV |
| Plataformas | Windows · Linux · macOS |
| Dependencias | cryptography · requests · ipwhois · tldextract · paramiko (opcional) |
Architecture — flux d'exécution
Architecture — execution flow
Arquitectura — flujo de ejecución
argparse → analyze_hosts() → expand_ip_range() → main(host, port)
↓
fetch_cert_chain() → openssl s_client → save_certificates()
↓
process_extensions() + resolve_domain_ips() → dns_ips_list_v4
↓
build_dns_resolution_table(level) → dns_resolution_table
build_analysis_summary() → status + renewal commands
get_rdap_json_from_ip() + parse_rdap_network() → rdap_network
↓
generate_html_report() · generate_json_report() · generate_csv_report()
argparse → analyze_hosts() → expand_ip_range() → main(host, port)
↓
fetch_cert_chain() → openssl s_client → save_certificates()
process_extensions() + resolve_domain_ips() → dns_ips_list_v4
build_dns_resolution_table(level) → dns_resolution_table
build_analysis_summary() → status + renewal commands
get_rdap_json_from_ip() + parse_rdap_network() → rdap_network
generate_html_report() · generate_json_report() · generate_csv_report()
argparse → analyze_hosts() → expand_ip_range() → main(host, port)
↓
fetch_cert_chain() → openssl s_client → save_certificates()
process_extensions() + resolve_domain_ips() → dns_ips_list_v4
build_dns_resolution_table(level) → dns_resolution_table
build_analysis_summary() → status + renewal commands
get_rdap_json_from_ip() + parse_rdap_network() → rdap_network
generate_html_report() · generate_json_report() · generate_csv_report()
Fonctions principales
Main functions
Funciones principales
| Fonction | Rôle | Retour |
|---|---|---|
| analyze_hosts() | Point d'entrée principal — orchestration complète | None |
| main(host, port) | Analyse un host:port — boucle sur les IPs résolues | list[str] DNS clean |
| fetch_cert_chain() | Récupère la chaîne PEM via openssl s_client | CertChainResult |
| save_certificates() | Parse les PEM → objets x509, extrait métadonnées | CertChainResult |
| process_extensions() | Extrait les SANs, résout les IPs (level 1) | list[str] |
| build_dns_resolution_table() | Construit table dns_to_ips + ip_to_dns (level 0/1/2) | dict |
| build_analysis_summary() | Évalue expiration, algo, taille clé → commandes renouvellement | dict |
| get_rdap_json_from_ip() | Interroge ARIN RDAP pour une IP | dict |
| parse_rdap_network() | Extrait les champs utiles du JSON RDAP brut | dict |
| generate_html_report() | Produit le rapport HTML dark theme autonome | None (fichier) |
| resolve_domain_ips() | Résolution DNS avec @lru_cache | tuple |
| expand_ip_range() | Expanse une plage IP en liste d'IPs | tuple(int, list) |
| verify_chain() | Vérifie les liens issuer→subject de la chaîne | None |
| Function | Role | Return |
|---|---|---|
| analyze_hosts() | Main entry point — full orchestration | None |
| main(host, port) | Analyses one host:port — loops over resolved IPs | list[str] clean DNS |
| fetch_cert_chain() | Retrieves PEM chain via openssl s_client | CertChainResult |
| save_certificates() | Parses PEM → x509 objects, extracts metadata | CertChainResult |
| process_extensions() | Extracts SANs, resolves IPs (level 1) | list[str] |
| build_dns_resolution_table() | Builds dns_to_ips + ip_to_dns tables (level 0/1/2) | dict |
| build_analysis_summary() | Evaluates expiry, algo, key size → renewal commands | dict |
| get_rdap_json_from_ip() | Queries ARIN RDAP for an IP | dict |
| parse_rdap_network() | Extracts useful fields from raw RDAP JSON | dict |
| generate_html_report() | Produces standalone dark-theme HTML report | None (file) |
| resolve_domain_ips() | DNS resolution with @lru_cache | tuple |
| expand_ip_range() | Expands an IP range to a list of IPs | tuple(int, list) |
| verify_chain() | Verifies issuer→subject links in the chain | None |
| Función | Rol | Retorno |
|---|---|---|
| analyze_hosts() | Punto de entrada principal — orquestación completa | None |
| main(host, port) | Analiza un host:port — recorre las IPs resueltas | list[str] DNS limpio |
| fetch_cert_chain() | Obtiene la cadena PEM vía openssl s_client | CertChainResult |
| save_certificates() | Parsea los PEM → objetos x509, extrae metadatos | CertChainResult |
| process_extensions() | Extrae los SANs, resuelve las IPs (level 1) | list[str] |
| build_dns_resolution_table() | Construye tabla dns_to_ips + ip_to_dns (level 0/1/2) | dict |
| build_analysis_summary() | Evalúa expiración, algoritmo, tamaño de clave → comandos de renovación | dict |
| get_rdap_json_from_ip() | Consulta ARIN RDAP para una IP | dict |
| parse_rdap_network() | Extrae los campos útiles del JSON RDAP bruto | dict |
| generate_html_report() | Produce el informe HTML en tema oscuro autónomo | None (archivo) |
| resolve_domain_ips() | Resolución DNS con @lru_cache | tuple |
| expand_ip_range() | Expande un rango de IP en una lista de IPs | tuple(int, list) |
| verify_chain() | Verifica los enlaces issuer→subject de la cadena | None |
Structure des rapports HTML
HTML report structure
Estructura de los informes HTML
Chaque rapport HTML généré contient les sections suivantes dans l'ordre :
- Analysis Summary — banner vert/amber/rouge + commandes renouvellement si anomalie
- Summary bar — temps restant, nombre de certificats, IP, organisation
- Network Info (RDAP) — organisation, handle, CIDR, country, range
- Certificats — une card par certificat (subject, issuer, dates, empreintes, extensions SANs avec IPs)
- DNS Resolution Table — panel 1 : DNS→IPv4 · panel 2 : IP unique→noms (cert/PTR)
Each generated HTML report contains the following sections in order:
- Analysis Summary — green/amber/red banner + renewal commands if anomaly detected
- Summary bar — time remaining, certificate count, IP, organisation
- Network Info (RDAP) — organisation, handle, CIDR, country, range
- Certificates — one card per certificate (subject, issuer, dates, fingerprints, SAN extensions with IPs)
- DNS Resolution Table — panel 1: DNS→IPv4 · panel 2: unique IPs→names (cert/PTR)
Cada informe HTML generado contiene las siguientes secciones en orden:
- Analysis Summary — banner verde/ámbar/rojo + comandos de renovación si se detecta una anomalía
- Summary bar — tiempo restante, número de certificados, IP, organización
- Network Info (RDAP) — organización, handle, CIDR, país, rango
- Certificados — una tarjeta por certificado (subject, issuer, fechas, huellas, extensiones SAN con IPs)
- DNS Resolution Table — panel 1: DNS→IPv4 · panel 2: IPs únicas→nombres (cert/PTR)
Répertoire de sortie
Output directory
Directorio de salida
Le répertoire racine _SCRIPT_ROOT est dérivé du nom du script sans extension, créé dans le répertoire courant au moment du lancement (CWD). Chaque outil garde ainsi son propre arbre de sortie.
CWD/chk_url_ips_V1R1/{html,json,csv,certificate,tmp,log}/CUSTOMER/YYYYMMDD/
The root directory _SCRIPT_ROOT is derived from the script name without extension, created in the current working directory at launch time (CWD). Each tool thus keeps its own output tree.
CWD/chk_url_ips_V1R1/{html,json,csv,certificate,tmp,log}/CUSTOMER/YYYYMMDD/
El directorio raíz _SCRIPT_ROOT se deriva del nombre del script sin extensión, creado en el directorio de trabajo actual en el momento del lanzamiento (CWD). Cada herramienta mantiene así su propio árbol de salida.
CWD/chk_url_ips_V1R1/{html,json,csv,certificate,tmp,log}/CUSTOMER/YYYYMMDD/
Compatibilité Windows
Windows compatibility
Compatibilidad con Windows
Toutes les créations de répertoires utilisent Path.mkdir(parents=True, exist_ok=True). Les chemins sont construits via pathlib.Path. L'encodage console est géré avec errors='replace'. Compatible Windows 10/11 avec Python 3.8+.
All directory creation uses Path.mkdir(parents=True, exist_ok=True). Paths are built via pathlib.Path. Console encoding is handled with errors='replace'. Compatible with Windows 10/11 and Python 3.8+.
Toda creación de directorios usa Path.mkdir(parents=True, exist_ok=True). Las rutas se construyen vía pathlib.Path. La codificación de consola se gestiona con errors='replace'. Compatible con Windows 10/11 y Python 3.8+.