Pregunta

Estoy escribiendo una aplicación que inyecta paquetes usando SharpPcap .

Sin embargo, ya que estoy construyendo los paquetes por mi cuenta y sólo conocer la dirección IP del destino, tengo que determinar la dirección física del siguiente salto. Siempre puedo enviar un ping a la dirección IP , huela, y obtener el direcciones MAC del paquete olido. Sin embargo, esperaba que hay una forma menos complicada de hacerlo en C # .

Obviamente, obtener la dirección IP del siguiente salto también será muy útil, ya que puede entonces utilizar SendArp para determinar su dirección MAC.

Obtener la tabla de enrutamiento va a hacer. ¿Cómo voy a conseguir que el uso de código?

¿Fue útil?

Solución

tuve con algunas dificultades WMI (parece que no se puede correlacionar entre una interfaz de índice en Win32_IP4RouteTable con un dispositivo real; documentación de MSDN es incorrecto, y otras técnicas más hacker fallar en algunos equipos).

Por lo tanto, he optado por utilizar el GetBestRoute , que en realidad me salvó un montón de tiempo, ya que le permite hacer de Windows la decisión de enrutamiento en sí mismo, y devuelve la dirección IP del siguiente salto y el identificador de tarjeta de red que lleva a esa dirección. También es mucho más rápido que ejecutar una consulta en WMI.

A continuación puede encontrar la misma tarjeta de red, mediante la búsqueda de ese identificador en la lista devuelta por GetAdaptersInfo .

Espero que ayuda ...

Otros consejos

Las direcciones físicas son resueltos por los href="http://en.wikipedia.org/wiki/Address_Resolution_Protocol" protocolo de resolución de - basta con enviar un ARP Reuest con la dirección IP para resolver.

Si el destino no está en la red local, el paquete se debe enviar a la pasarela estándar y uno debe realizar una solicitud ARP para la pasarela estándar. La puerta de enlace estándar se puede obtener mediante el uso de métodos de la System.Net .NetworkInformation espacio de nombres.

 NetworkInterface.GetAllNetworkInterfaces()[0].GetIPProperties().GatewayAddresses

La forma completamente hacker de hacerlo sería la de ejecutar el comando "arp -a" y leer y analizar los resultados del comando (utilizando el ARP caché que ya posean Windows).

En caso contrario, es necesario incluir ARP en su pila de protocolos. Así es como su propio sistema trabaja para averiguar dónde enviar tramas. O, por último, si usted no está preocupado por ser ineficaz, se puede establecer su destino Ethernet como: FF: FF: FF: FF: FF: FF y cada uno de inundación en la misma LAN que usted. Cuando algo responde o se obtiene un paquete, almacenar en caché usted mismo para tener la dirección MAC de destino adecuado.

En lo personal, si lo hizo el acercamiento a todos inundación en mi red, me gustaría hacerle daño a usted, pero dependiendo de su situación que podría ser un truco bastante fácil. Sin embargo, hacer una implementación pila completa 100% es bastante complejo, ya que hay una gran cantidad de casos extremos que deben ser bien apoyado (tales como el manejo de proxy ARP, ARP gratuito, etc.).

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