2012-02-20 24 views
8

Tengo una situación interesante en mis manos, y no estoy muy seguro de cómo solucionarla. Hice algunas búsquedas para algo similar a mi situación, pero nada coincide. Si la respuesta ya existe en algún lugar aquí, agradecería a cualquiera que pueda señalarme en la dirección correcta.lo que causaría que ICMPsendEcho fallara cuando ping.exe tiene éxito

Ok, al grano.

Estoy escribiendo una aplicación de vigilancia para controlar la conectividad a Internet. Está diseñado para hacer ping a un conjunto de dominios en un intervalo establecido, y cuando alguno de ellos responde al ping, el temporizador de estado se restablece. Si el temporizador de estado alguna vez supera un umbral establecido, se intentan varias etapas de acción correctiva para solucionar el problema.

Bastante simple ¿no?

Aquí es donde se pone raro.

Estoy usando ICMPsendecho para emitir la solicitud de ping. En mi entorno de desarrollo (win7) parece funcionar bien, probar y todo fue sin problemas. Sin embargo, en el entorno donde se implementa no recibe una respuesta. El entorno de despliegue es una máquina Windows XP sp3.

A lo largo del proceso de solución de problemas, he notado varias cosas, que pueden o no ser útiles para tratar de resolver este problema.

windows ping.exe funciona bien en el entorno de despliegue para todos los dominios que estoy usando para probar el estado de la conectividad, son solo mis llamadas ICMPsendecho que parecen no generar respuestas.

He instalado wireshark en el entorno de despliegue y puedo ver que los paquetes se emiten con éxito para las solicitudes en ambos tipos de ping. el ping de Windows genera paquetes de solicitud con una longitud de 74 bytes, y mi llamada de programas genera paquetes con una longitud de 42 bytes. Los paquetes de respuesta de Windows tienen 74 bytes cuando se reciben.

Cambiando al entorno de desarrollo por un minuto, con wireshark instalado. Windows ping genera una circunstancia similar a la del entorno de despliegue con los paquetes. Sin embargo, mi aplicación, cuando genera solicitudes, los paquetes tienen 42 bytes de longitud (lo mismo que el entorno de despliegue), pero las respuestas que recibe son de 60 bytes de longitud.

Como he dicho, esa información puede o no ser útil, pero estoy tratando de averiguar por qué esta aplicación no genera respuestas ICMP cuando el ping de Windows parece funcionar bien en esa máquina.

Otro pequeño detalle que puede ayudar, la conexión a Internet se monitorea utiliza AT & T elevar 4g puntos de acceso, el dispositivo real es una tarjeta sierra inalámbrica MC8790 AirPrime.

¿Alguien tiene alguna idea sobre por qué estos pings están fallando?

gracias de antemano por cualquier información útil que pueda tener y por tomarse el tiempo para leer mi publicación.

PS.

+2

¿ICMPSendEcho devolvió un error? – OnTheFly

+0

No hay error, simplemente nunca recibe una respuesta. – PoultrySlave

+0

¿Qué versión de Windows? –

Respuesta

3

La respuesta puede estar en el tamaño del ping enviado (parece haber un tamaño mínimo no documentado de 20 bytes para la carga útil). Consulte esta publicación para obtener más información: http://groups.google.com/group/microsoft.public.win32.programmer.networks/browse_thread/thread/2b28b994a8067713?pli=1

+0

¡Gracias por la respuesta! No me di cuenta de inmediato, pero el problema aún no se ha resuelto y será necesario solucionarlo en algún momento. Voy a ver esto como una posible causa. – PoultrySlave

+0

Esto fue en realidad la causa del problema. El código que estábamos utilizando asignó una cantidad incorrecta de espacio para el paquete de respuesta. Pensé que eso plantearía un error/excepción, pero ese no era el caso. Hubo muchos otros problemas en juego en la ubicación de este cliente en particular, por lo que hizo que resolver el problema sea mucho más difícil. – PoultrySlave

+0

@PoultrySlave ¿pueden dar más detalles al respecto? ¿Qué terminaste usando para el tamaño del búfer de respuesta? Los grupos de Google vinculan conversaciones sobre el aumento experimental del tamaño, pero no está claro para mí qué tamaño debería usarse en general. Estoy viendo un problema similar, IcmpSendEcho se agota cuando el ping funciona bien y tengo curiosidad por lo que terminaste haciendo para que funcione. – Nerdtron

2

¿Has comprobado los permisos de los usuarios? Ping.exe no requiere derechos de administrador, pero los comandos raw ICMP en Windows necesitan privilegios de administrador.

ver este ejemplo: http://www.delphi-central.com/tutorials/icmp-ping.aspx

Tenga en cuenta, sin embargo, que para Windows NT y Windows 2000 implementaciones, primas de sockets están sujetos a controles de seguridad y son accesible sólo a los miembros del grupo del administrador.


Otra posible razón podría ser un servidor de seguridadque bloquea los paquetes ICMP.

+0

¿por qué el ICMPsendecho generaría respuestas en el entorno de desarrollo y no en el entorno de despliegue? No he comprobado los permisos de usuario, pero me parece que a menos que el uso de icmp.dll sea diferente en Windows 7 (y puede ser) que ambos no puedan generar respuestas. Sin embargo, dado que actualmente estoy paralizado, investigaré más tu idea, ya que de lo contrario no tendré buenas ideas ... gracias por tu respuesta. – PoultrySlave

+0

Si la aplicación tiene derechos administrativos en ambos entornos, ambos deberían funcionar. Así que supongo que una configuración de firewall puede ser diferente (ver mi edición). – mjn

0

Tuvimos el mismo error con un cliente. La solución fue implementar IcmpSendEcho2 como un plan B cuando IcmpSendEcho falla. ¡Funcionó!

+0

¿Cómo se implementa la función IcmpSendEcho2? –

Cuestiones relacionadas