Domanda

La mia app deve inviare una richiesta GET a un sito Web e vorrei essere in grado di sapere se è stato bloccato da un firewall e chiedere all'utente di aggiungere un'eccezione.

Come posso scoprire che la mia richiesta get non è riuscita a causa di un firewall, invece di qualcos'altro?

È stato utile?

Soluzione

Se è un buon firewall, non puoi. Tra le altre opzioni, un firewall può:

  • rispondi con uno dei numerosi ICMP diversi, indicando che la destinazione non è accessibile o
  • elimina silenziosamente la richiesta, determinando un timeout.

Un'opzione ragionevole è spiegare perché l'app non è stata in grado di accedere al sito Web e fornire alcuni suggerimenti utili:

    No response from www.site.com:
    * Your computer may not be connected to the Internet.
    * The site may be down.
    * The site may be blocked by a firewall.
    The network indicated that www.site.com is not accessible:
    * Helpful messages go here.

L'importante è differenziare, forse meglio di quanto ho fatto sopra, tra i tipi di fallimento e le ragioni dietro di loro. Ad esempio, i passaggi per la risoluzione dei problemi "nessuna risposta" sarà diverso da quelli per la risoluzione dei problemi " il dispositivo mi ha detto che non è in ascolto su quella porta. "

Altri suggerimenti

Prova ad accedere a Internet con un breve timeout ... Se il comando non riesce, puoi supporre che la macchina abbia un firewall che richiede l'interazione dell'utente.

Se il firewall è buono, non è possibile rilevarlo.

Usa le API del firewall Win32 (classico)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top