2012-02-20 10 views
8

Ho una situazione interessante tra le mie mani e non sono abbastanza sicuro su come risolverlo. Ho fatto alcune ricerche per qualcosa di simile alla mia situazione, ma non le combina assolutamente. Se la risposta esiste già da qualche parte qui, sarei grato a chiunque possa indicarmi la giusta direzione.cosa causerebbe l'errore di ICMPsendEcho quando ping.exe ha esito positivo

Ok, al punto.

Sto scrivendo un'applicazione watchdog per monitorare la connettività Internet. È progettato per eseguire il ping di un set di domini a intervalli regolari e quando uno di essi risponde al ping, il timer di stato viene ripristinato. Se il timer di stato supera sempre una soglia impostata, vengono tentate diverse fasi di correzione per risolvere il problema.

Abbastanza semplice, vero?

Ecco dove diventa strano.

Sto utilizzando ICMPsendecho per inviare la richiesta ping. Sul mio ambiente di sviluppo (win7) sembra funzionare bene, test e tutto è andato liscio. Tuttavia, nell'ambiente in cui viene distribuito non riesce a ricevere una risposta. L'ambiente di distribuzione è una macchina Windows XP SP3.

Durante la procedura di risoluzione dei problemi, ho notato diverse cose, che potrebbero essere utili o meno nel tentativo di risolvere questo problema.

windows ping.exe funziona correttamente sull'ambiente di distribuzione per tutti i domini che sto utilizzando per testare lo stato della connettività, è solo le mie chiamate ICMPsendecho che sembrano non riuscire a generare risposte.

Ho installato wireshark sull'ambiente di distribuzione e sono in grado di visualizzare i pacchetti che vengono emessi correttamente per le richieste su entrambi i tipi di ping. il ping di windows genera pacchetti di richiesta con una lunghezza di 74 byte, e la mia chiamata di programmi genera pacchetti con una lunghezza di 42 byte. I pacchetti di risposta di Windows sono allo stesso modo 74 byte quando vengono ricevuti.

Passaggio all'ambiente di sviluppo per un minuto, con wireshark installato. Il ping di Windows genera una circostanza simile come nell'ambiente di distribuzione con i pacchetti. Tuttavia, la mia applicazione, quando genera richieste, i pacchetti hanno una lunghezza di 42 byte (uguale all'ambiente di distribuzione), ma le risposte che riceve sono di 60 byte di lunghezza.

Come ho detto, questa informazione può o non può essere utile, ma sto cercando di scoprire perché questa applicazione non riesce a generare risposte ICMP quando Windows Ping sembra funzionare correttamente su quella macchina.

Un altro piccolo bocconcino che può aiutare, la connessione a internet stavano monitorando usi AT & hotspot 4g Elevate T, il dispositivo reale è una carta di Sierra Wireless MC8790 AirPrime.

Qualcuno ha qualche idea sul perché questi ping falliscono?

grazie in anticipo per eventuali informazioni utili che potresti avere e per aver dedicato del tempo a leggere il mio post.

PS.

+2

ha fatto un errore a ICMPSendEcho? – OnTheFly

+0

Nessun errore, non riesce a ricevere mai una risposta. – PoultrySlave

+0

Quale versione di Windows? –

risposta

3

La risposta potrebbe essere nella dimensione del ping inviato (sembra esserci una dimensione minima non documentata di 20 byte per il carico utile). Vedere questo post per maggiori informazioni: http://groups.google.com/group/microsoft.public.win32.programmer.networks/browse_thread/thread/2b28b994a8067713?pli=1

+0

Grazie per la risposta! Non sono riuscito a notarlo subito, ma il problema è ancora irrisolto e sarà necessario risolverlo a un certo punto. Vedrò questa come una possibile causa. – PoultrySlave

+0

Questa è stata effettivamente la causa del problema. Il codice che stavamo usando assegnava una quantità errata di spazio per il pacchetto di risposta. Avrei pensato che avrebbe sollevato un errore/eccezione, ma non era così. C'erano molti altri problemi in gioco nella posizione di questo particolare cliente, quindi ha reso il problema molto più difficile. – PoultrySlave

+0

@PoultrySlave puoi approfondire? Cosa hai utilizzato per la dimensione del buffer di risposta? I gruppi di Google link parlano di aumentare in modo sperimentale le dimensioni, ma non mi è chiaro quale dimensione debba essere utilizzata in generale. Sto vedendo un problema simile, IcmpSendEcho scade quando il ping funziona bene e sono curioso di sapere cosa hai finito per farlo funzionare. – Nerdtron

2

Hai controllato le autorizzazioni utente? Ping.exe non richiede i diritti di amministratore, ma i comandi ICMP non elaborati in Windows richiedono i privilegi di amministratore.

Vedi questo esempio: http://www.delphi-central.com/tutorials/icmp-ping.aspx

Si prega di notare, tuttavia, che per Windows NT e Windows 2000 implementazioni, prime prese di corrente sono soggetti a controlli di sicurezza e sono accessibile solo ai membri del gruppo degli amministratori.


Un'altra possibile causa potrebbe essere un firewall che blocca pacchetti ICMP.

+0

perché l'ICMPsendecho genera risposte nell'ambiente di sviluppo e non nell'ambiente di distribuzione? Non ho controllato le autorizzazioni utente, ma mi sembra che a meno che l'uso di icmp.dll sia diverso in Windows 7 (e potrebbe essere) che entrambi non riuscirebbero a generare risposte. Tuttavia visto che sono attualmente fermo, cercherò di approfondire ulteriormente la tua idea, perché altrimenti sarei fuori da buone idee ... grazie per la tua risposta. – PoultrySlave

+0

Se l'app dispone di diritti amministrativi in ​​entrambi gli ambienti, entrambi dovrebbero funzionare. Quindi immagino che un'impostazione del firewall possa essere diversa (vedi la mia modifica). – mjn

0

Abbiamo avuto lo stesso errore con un client. La soluzione era implementare IcmpSendEcho2 come piano B quando IcmpSendEcho fallisce. Ha funzionato!

+0

Come si implementa la funzione IcmpSendEcho2? –

Problemi correlati