Cómo cambiar de una LAN a otra LAN en código C

Sí, esto es un poco complicado pero posible.

  • Puede verificar si el estado de la interfaz de nic principal utiliza el comando ifconfig de linux. Puede consultar el siguiente código para obtener la misma información
    • usando el código C para obtener la misma información que ifconfig
  • Almacene la salida de ifr_flags = IFF_UP en una variable. Puede ser un booleano (0 y 1) puede ayudarlo.
  • Asumiendo que 1 está abajo y 0 está arriba. Cuando la pista devuelve 1, puede realizar la misma acción que realiza para cambiar su ruta de tráfico. Creo que cambias tu ruta predeterminada a la interfaz secundaria. A continuación se encuentran las instrucciones para hacer esto.
    • Linux: ¿cómo configurar la ruta predeterminada desde C?
  • Si el valor cambia de 1 a 0 para la interfaz primaria. cambie la ruta predeterminada de nuevo al nic primario.

La parte difícil aquí es cuándo debe verificar el estado de la interfaz. si son dos bajos, desperdiciaría sus ciclos de CPU y si es demasiado bajo, podría perder su conectividad por una mayor duración.

Espero que esto ayude (esto es principalmente una lógica y codificación según el individuo)

Saludos

Vyas Girish

Bueno, puede verificar si la puerta de enlace a la LAN primaria está en funcionamiento. Si no es así, redirija todo el tráfico a la LAN secundaria. Use una aplicación similar para rastrear la puerta de enlace de la LAN secundaria; si la puerta de enlace no funciona, el tráfico se debe redirigir a la LAN principal.

Este código probablemente puede hacer tu trabajo

struct ifreq ifr;

memset (& ifr, 0, sizeof (ifr));
strcpy (ifr.ifr_name, ifrname);

if (ioctl (dummy_fd, SIOCGIFFLAGS, & ifr)! = -1)
{
up_and_running = (ifr.ifr_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING);
}
más
{
// error
}

Aquí el ioctl SIOCGIFFLAGS se usa para verificar si la interfaz está ARRIBA y EN FUNCIONAMIENTO

La variable de entrada es ifrname . Debe ser el nombre de la interfaz “eth0”, “ppp0” o algo similar. Se usará un archivo como descriptor para verificar la conexión.

Ahora puedes hacer eco de cosas usando el siguiente programa

#include

#include “tlpi_hdr.h”

#define BUF_SIZE 4096

En t

main (int argc, char * argv [])

{

char buf [TAMAÑO_BUF];

ssize_t numRead;

while ((numRead = read (STDIN_FILENO, buf, BUF_SIZE))> 0) {

if (escribe (STDOUT_FILENO, buf, numRead)! = numRead) {

syslog (LOG_ERR, “error de escritura ():% s”, strerror (errno));

salir (EXIT_FAILURE);

}

}

if (numRead == -1) {

syslog (LOG_ERR, “Error de lectura ():% s”, strerror (errno));

salir (EXIT_FAILURE);

}

salir (EXIT_SUCCESS);

}

Consulte el libro de Michael Kerrisk y el libro de Richard Steven para saber más.