Pregunta

¿Cuál sería la forma más sencilla de poder enviar y recibir paquetes de red sin procesar?¿Tengo que escribir mi propio envoltorio JNI de alguna API c y, en ese caso, qué API estoy buscando?

EDITAR:Quiero poder hacer lo que hace Wireshark, es decir.registrar todos los paquetes entrantes en una interfaz y, además, poder enviar mis propios paquetes creados.Y quiero hacerlo en una mac.

¿Fue útil?

Solución

Si empiezas con la idea de que necesitas algo como un rastreador de paquetes, querrás mirar http://netresearch.ics.uci.edu/kfujii/jpcap/doc/.

Otros consejos

Raw Socket para Java es una solicitud de JDK desde hace mucho tiempo.Ver la solicitud aquí.Hay una larga discusión allí donde se pueden buscar soluciones y soluciones.Una vez necesité esto para una operación PING simple, pero no recuerdo cómo lo resolví.Lo siento :)

Mi mejor apuesta hasta ahora parece ser la BPF api y escribir un contenedor JNI delgado

No puede acceder a sockets sin formato desde Java puro, por lo que necesitará algún tipo de capa entre su código Java y las interfaces de red.

También tenga en cuenta que el acceso a sockets sin formato normalmente sólo está disponible para procesos "raíz", ya que de lo contrario cualquier usuario podría a) detectar todo el tráfico yb) generar paquetes falsificados.

En lugar de escribir todo el programa para que deba ejecutarse como "root", podría considerar realizar la captura y generación de paquetes en un programa independiente con algún tipo de IPC (RMI, canalización con nombre, socket TCP, etc.) para intercambiar el datos con su aplicación Java.

TINI es un controlador de Ethernet de Java, que puede tener bibliotecas y clases para acceder directamente a datos desde tramas de Ethernet a flujos TCP.Es posible que pueda encontrar algo allí que implemente las clases que necesita.De lo contrario, debería haber sugerencias o grupos de usuarios que le darán una ventaja.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top