Aller au contenu

Tâche DNS Lookup

Résumé

  • Nom interne : DnsLookup
  • Catégorie : Communication
  • Objectif : Résoudre un nom de domaine en adresse IP en utilisant des stratégies DNS configurables. Retourne l'adresse IP résolue sous forme de chaîne.
  • Type de tâche : Normale

Compatibilité

  • Version AndroMate minimale : 1.1.0

  • Version AndroMate maximale : 1.1.0

  • Android minimum : Android 13 (API 33)

  • Android testé maximum : Android 16 (API 36)

  • Permissions requises :

    • INTERNET
    • ACCESS_NETWORK_STATE

Description détaillée

La tâche DNS Lookup résout le nom de domaine ou l'adresse IP fourni dans url en une adresse IP résolue. Si l'entrée est déjà une adresse IPv4 ou IPv6 valide, aucune requête DNS n'est effectuée — l'adresse est retournée directement.

Pour une résolution de domaine réelle, la tâche applique la stratégie sélectionnée par resolve_ops (une clé entière). Un dns_server optionnel peut être spécifié ; s'il est vide, le serveur DNS par défaut du système est utilisé. Toutes les requêtes DNS ont un délai fixe de 5000 ms.

En cas de succès, la chaîne d'adresse IP résolue est stockée dans value_output depuis StrTaskResult.


Paramètres d'entrée

Paramètre Type Obligatoire Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
url Chaîne Oui Nom de domaine ou adresse IP à résoudre — supporte les références $variable Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""
dns_server Chaîne Non Adresse IP d'un serveur DNS personnalisé — chaîne vide utilise le défaut du système Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""
resolve_ops Entier Non Stratégie de résolution : 1 = FORCE_IPV4, 2 = FORCE_IPV6, 3 = PREFER_IPV6_FALLBACK_IPV4, 4 = HAPPY_EYEBALLS Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 0 (PREFER_IPV6_FALLBACK_IPV4)

Clés de stratégie resolve_ops

Valeur Stratégie Description
1 FORCE_IPV4 Requête A records uniquement
2 FORCE_IPV6 Requête AAAA records uniquement
3 PREFER_IPV6_FALLBACK_IPV4 Essayer IPv6 d'abord, repli sur IPv4 si absent
4 HAPPY_EYEBALLS RFC 8305 — requêtes IPv6 + IPv4 concurrentes
0 ou omis PREFER_IPV6_FALLBACK_IPV4 Comportement par défaut

Paramètres de sortie

Champ Type Condition de déclenchement Compatibilité Android Compatibilité AndroMate Défaut
value_output Chaîne Toujours en cas de succès — adresse IP résolue Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 <ANDROMATE_NULL_VALUE>

Exceptions

Code Nom de l'exception Description
DNS-LOOK-UP-001 URL vide Le champ url est vide (depuis AndromateExceptionTypes.DNS_LOOKUP_EMPTY_URL).
DNS-LOOK-UP-002 Résolution DNS échouée La recherche DNS a échoué pour le domaine — aucun enregistrement A/AAAA trouvé ou erreur serveur DNS (depuis AndromateExceptionTypes.DNS_LOOKUP_FAILED).

Diagramme d'exécution

flowchart TD
    Start([▶ DnsLookup]) --> ResolveParams[🔄 Résoudre url, dns_server,\nresolve_ops]

    ResolveParams --> ValidateURL{url vide ?}

    ValidateURL -->|Oui| E1[❌ DNS-LOOK-UP-001\nURL vide]
    ValidateURL -->|Non| CheckIP{Déjà une adresse\nIPv4 ou IPv6 valide ?}

    CheckIP -->|Oui| ReturnIP[📍 Retourner l'IP directement\nAucune requête DNS effectuée]
    CheckIP -->|Non| Strategy{Stratégie\nresolve_ops}

    Strategy -->|1 = FORCE_IPV4| ForceIPV4[🔍 Requête A records uniquement]
    Strategy -->|2 = FORCE_IPV6| ForceIPV6[🔍 Requête AAAA records uniquement]
    Strategy -->|3 ou défaut = PREFER_IPV6_FALLBACK_IPV4| PreferIPV6[🔄 Essayer IPv6 d'abord\nrepli sur IPv4]
    Strategy -->|4 = HAPPY_EYEBALLS| HappyEyeballs[⚡ RFC 8305\nIPv6 + IPv4 concurrents]

    ForceIPV4 --> DNSQuery[📡 Requête DNS\nTimeout : 5000ms]
    ForceIPV6 --> DNSQuery
    PreferIPV6 --> DNSQuery
    HappyEyeballs --> DNSQuery

    ReturnIP --> StoreResult[💾 Définir value_output\nStrTaskResult]

    DNSQuery -->|Succès| GetIP[📥 Extraire l'adresse IP résolue]
    DNSQuery -->|Échec| E2[❌ DNS-LOOK-UP-002\nRésolution DNS échouée]

    GetIP --> StoreResult

    StoreResult --> LogReport[📋 Journaliser le rapport]

    LogReport --> Success([✅ StrTaskResult])

    E1 --> Error([❌ Exception])
    E2 --> Error

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style E1 fill:#ffcdd2
    style E2 fill:#ffcdd2
    style ResolveParams fill:#fff9c4
    style DNSQuery fill:#f3e5f5
    style StoreResult fill:#c8e6c9
    style CheckIP fill:#fff9c4
    style Strategy fill:#fff9c4

Fonctionnement :

  1. Résoudre les paramètres : url, dns_server et resolve_ops sont résolus depuis le contexte workflow
  2. Valider l'URL : lève DNS-LOOK-UP-001 si url est vide
  3. Vérifier si déjà une IP : si l'entrée est déjà une adresse IPv4 ou IPv6 valide, elle est retournée directement dans value_output — aucune requête DNS n'est effectuée
  4. Sélectionner la stratégie : choisit la stratégie DNS en fonction de la valeur entière de resolve_ops
  5. Requête DNS : effectue la recherche DNS avec un délai fixe de 5000 ms ; utilise dns_server si spécifié, sinon le défaut du système
  6. En cas d'échec : lève DNS-LOOK-UP-002
  7. Extraire l'IP : récupère l'adresse IP résolue
  8. Stocker le résultat : définit value_output avec la chaîne IP résolue
  9. Résultat : retourne StrTaskResult

Exemples de code

Exemple 1 — Résoudre un domaine avec la stratégie par défaut

{
  "DnsLookup": [
    {
      "id": "1",
      "title": "Résoudre domaine API",
      "url": "api.example.com",
      "value_output": "$ip_resolue"
    }
  ]
}

Exemple 2 — Forcer la résolution IPv4

{
  "DnsLookup": [
    {
      "id": "2",
      "title": "Résolution IPv4 forcée",
      "url": "api.example.com",
      "resolve_ops": 1,
      "value_output": "$adresse_ipv4"
    }
  ]
}

Exemple 3 — Serveur DNS personnalisé avec Happy Eyeballs

{
  "DnsLookup": [
    {
      "id": "3",
      "title": "Happy Eyeballs avec DNS personnalisé",
      "url": "$domaine_a_resoudre",
      "dns_server": "1.1.1.1",
      "resolve_ops": 4,
      "value_output": "$ip_resolue"
    }
  ]
}

Exemple 4 — Forcer IPv6 avec DNS personnalisé

{
  "DnsLookup": [
    {
      "id": "4",
      "title": "Résolution IPv6 uniquement",
      "url": "ipv6.example.com",
      "dns_server": "8.8.8.8",
      "resolve_ops": 2,
      "value_output": "$adresse_ipv6"
    }
  ]
}

Détails des paramètres d'entrée

1. url — Domaine ou IP à résoudre

Le nom de domaine ou l'adresse IP à traiter. Si déjà une adresse IPv4 ou IPv6 valide, retournée directement sans requête DNS. Supporte les références $variable_workflow.

Valide Comportement
api.example.com Requête DNS effectuée
192.168.1.1 Retournée directement (pas de requête DNS)
2001:db8::1 Retournée directement (pas de requête DNS)
$domaine Résolue depuis la variable, puis traitée
"" Lève DNS-LOOK-UP-001
  • Défaut : ""

2. dns_server — Serveur DNS personnalisé

L'adresse IP d'un serveur DNS personnalisé à utiliser pour la résolution. Si vide (""), le serveur DNS par défaut du système est utilisé (depuis les paramètres réseau de l'appareil).

Exemple Description
"8.8.8.8" Google DNS
"1.1.1.1" Cloudflare DNS
"208.67.222.222" OpenDNS
"" Défaut système (paramètres DNS de l'appareil)
  • Défaut : "" (défaut système)

3. resolve_ops — Stratégie de résolution

Une clé entière sélectionnant la stratégie DNS. Le comportement par défaut (valeur 0 ou omis) est PREFER_IPV6_FALLBACK_IPV4.

Valeur Stratégie Description
1 FORCE_IPV4 A records uniquement — adresse IPv4 retournée
2 FORCE_IPV6 AAAA records uniquement — adresse IPv6 retournée
3 PREFER_IPV6_FALLBACK_IPV4 IPv6 d'abord ; repli sur IPv4 si pas de AAAA
4 HAPPY_EYEBALLS RFC 8305 requêtes concurrentes — première réponse gagne
0 ou omis PREFER_IPV6_FALLBACK_IPV4 Par défaut
  • Type : Entier
  • Défaut : 0 (PREFER_IPV6_FALLBACK_IPV4)

Détails des paramètres de sortie

value_output — Adresse IP résolue

Stocke la chaîne d'adresse IP résolue (depuis StrTaskResult) dans la variable workflow spécifiée.

  • Pour les entrées domaine : l'adresse IP résolue par DNS
  • Pour les entrées IP déjà passées : la même adresse IP retournée directement
  • Peut être IPv4 (ex. "93.184.216.34") ou IPv6 (ex. "2606:2800:220:1:248:1893:25c8:1946") selon la stratégie de résolution

Stratégies de résolution DNS

Stratégie 1 : FORCE_IPV4 (resolve_ops: 1)

Interroge uniquement les enregistrements A. Retourne la première adresse IPv4 trouvée. Lève DNS-LOOK-UP-002 si aucun enregistrement A n'est disponible.

Cas d'usage : Systèmes hérités nécessitant IPv4 uniquement.


Stratégie 2 : FORCE_IPV6 (resolve_ops: 2)

Interroge uniquement les enregistrements AAAA. Retourne la première adresse IPv6 trouvée. Lève DNS-LOOK-UP-002 si aucun enregistrement AAAA n'est disponible.

Cas d'usage : Environnements réseau IPv6 uniquement.


Stratégie 3 : PREFER_IPV6_FALLBACK_IPV4 (resolve_ops: 3 ou par défaut)

Interroge d'abord les enregistrements AAAA. Si une adresse IPv6 est trouvée, elle est retournée. Si aucun enregistrement AAAA n'existe, repli sur la requête d'enregistrements A. Lève DNS-LOOK-UP-002 si aucun des deux n'est trouvé.

Cas d'usage : Réseaux modernes préférant IPv6 avec compatibilité descendante.


Stratégie 4 : HAPPY_EYEBALLS (resolve_ops: 4)

Implémente RFC 8305. Démarre une requête IPv6 (AAAA), puis après un court délai démarre une requête IPv4 (A) en parallèle. La première requête à retourner un résultat gagne. Lève DNS-LOOK-UP-002 si les deux échouent.

Cas d'usage : Performance optimale sur tout type de réseau.


Comparaison des stratégies

Stratégie resolve_ops IPv4 IPv6 Cas d'usage
FORCE_IPV4 1 Systèmes hérités
FORCE_IPV6 2 Réseaux IPv6 uniquement
PREFER_IPV6_FALLBACK_IPV4 3 ou 0 ✅ (repli) ✅ (préféré) Réseaux modernes équilibrés
HAPPY_EYEBALLS 4 Optimisé (RFC 8305)

Exemple JSON complet

{
  "DnsLookup": [
    {
      "id": "1",
      "title": "Tâche DNS Lookup",
      "url": "api.example.com",
      "dns_server": "8.8.8.8",
      "resolve_ops": 4,
      "value_output": "$RESOLVED_IP"
    }
  ]
}