Necesito realizar ping a alguna ip/máquina. El código se puede ejecutar en cualquier tipo de plataforma (windows, linux, mac) y necesito obtener la información sobre la pérdida y el tiempo de ida y vuelta. por lo que el comando ping de java no es lo suficientemente bueno porque entonces tengo que analizar la respuesta del ping como cadena, que es diferente por plataforma y por idioma del sistema operativo. entonces, ¿qué debo hacer? Sé que hay algo así como JNI, pero soy nuevo en Java, así que necesito un poco de ayuda aquí. todavía significa que necesito tener una implementación nativa por plataforma? ¿Algún ejemplo o sugerencia?Ping con java a multiplataforma
Respuesta
He usado JNI para obtener el comando ping. Implementé el ping usando native (C) y luego lo envolví con JNI. La versión anterior es la necesidad de compilar el dll C por plataforma.
No puede hacer ICMP real con Java puro. Sin embargo, la biblioteca razonablemente portátil jpcap proporciona una agradable interfaz Java para bibliotecas nativas, que incluye ICMP (ping).
Supongo que el análisis sigue siendo su opción más fácil. Yo estaría sorprendido si necesitara más de esta expresión regular:
time[<=]([0-9.]+)[ ]?ms
encerrados entre paréntesis obtendrá el tiempo como 1
o 14
o 1.239
que puede ser alimentado a Float.parseFloat()
.
Sí, ¿pero si el sistema operativo está en italiano? Chino? entonces "tiempo" no funcionará. – Sophie
Ahora que es un problema, el orden de los parámetros no cambia. Tienes el modo Windows y el modo UNIX. – vbence
También: ¿tienes que PING literalmente el servidor? Puede ser un servidor de eco UDP especial es suficiente. (Si tiene control sobre el servidor). – vbence
Dado que Java no es independiente de la plataforma, puede preguntar qué sistema operativo tiene utilizando el System.getProperty("os.name")
y analizar la respuesta o definir el comando de acuerdo con ella.
Como alternativa, puede usar isReachable(int timeout)
en InetAddress
que parece ser la implementación más cercana a la PETICIÓN DE ECO DE ICMP, pero no le proporcionará la información sobre la pérdida y el tiempo de ida y vuelta.
Otra idea sería utilizar tracert/tracepath en lugar de ping para obtener el viaje redondo? marque this thread para obtener más información.
isReachable: es el mejor esfuerzo; si icmp no funciona, cambia a TCP. – Sophie
- 1. ¿Cómo puedo hacer ping a un host con un Perl one-liner con Net :: Ping?
- 2. Aplicaciones multiplataforma con WPF
- 3. Cómo hacer ping a IP externa desde Java Android
- 4. Alternativa multiplataforma a COM
- 5. Desarrollo multiplataforma con GLKit?
- 6. ¿Es Ruby tan multiplataforma como Java?
- 7. ¿Implementación multiplataforma A * más rápida?
- 8. ¿Cómo hacer un verdadero ping de Java desde Windows?
- 9. Acceso a la cámara web multiplataforma
- 10. Subproceso multiplataforma con ventana oculta
- 11. Instalador multiplataforma
- 12. Usando ping en C#
- 13. ruby ping para 1.9.1
- 14. Cifrado/descifrado multiplataforma (php a C# .NET) con Rijndael
- 15. ActiveMQ JMS ping
- 16. código para hacer ping a sitios web funciona a veces
- 17. Android ICMP ping
- 18. Bluetooth Ping Latency
- 19. Equivalente multiplataforma a eventos de Windows
- 20. ¿Una mejor opción para el desarrollo multiplataforma: Java o C#?
- 21. Programación de GUI multiplataforma con D
- 22. cómo hacer icmp ping en android
- 23. Programación multiplataforma
- 24. ¿Cómo generar una interfaz multiplataforma con SWIG?
- 25. Creación de aplicaciones multiplataforma
- 26. Ping un sitio en ruby?
- 27. (multiplataforma) Programación 3D con C# (mono)
- 28. IDE multiplataforma en C++?
- 29. ¿Cómo acceder/hacer ping a un servidor ubicado en AWS?
- 30. ¿Cómo escribir un programa multiplataforma?
He usado JNI para obtener el comando ping. – Sophie