ver saber puerta mis enlace configurar como comando cambiar agregar adicionar network-programming

network programming - saber - Puerta de enlace predeterminada en C en Linux



saber mis dns linux (3)

Creo que leer / proc / net / route será tu mejor apuesta. ¿Considerarías esto un "archivo"?

El formato de / proc / net / route es bien conocido, y en memoria, por lo que no hay penalización de E / S o miedo a este cambio (es decir, frente a leer algo de / etc / network / *)

¿Cómo se encuentra la puerta de enlace predeterminada de una tabla de enrutamiento con C en Linux?

No deseo emitir una llamada al shell o leer un archivo. Hay ioctls para agregar y eliminar rutas (SIOCADDRT, SIOCDELRT) y he encontrado referencias para obtener rutas (SIOCGRTCONF), pero parece que la versión del kernel que estoy usando no es compatible con SIOCGRTCONF.


Probablemente necesite usar un socket NETLINK_ROUTE , parte de la familia de sockets PF_NETLINK . Consulte el código fuente de la parte del programa ''ip'' de ''iproute''. Específicamente, su subcomando ''ruta''.


Puede usar / proc / net / route de esta manera:

int GetDefaultGw ( std::string & gw ) { FILE *f; char line[100] , *p , *c, *g, *saveptr; int nRet=1; f = fopen("/proc/net/route" , "r"); while(fgets(line , 100 , f)) { p = strtok_r(line , " /t", &saveptr); c = strtok_r(NULL , " /t", &saveptr); g = strtok_r(NULL , " /t", &saveptr); if(p!=NULL && c!=NULL) { if(strcmp(c , "00000000") == 0) { //printf("Default interface is : %s /n" , p); if (g) { char *pEnd; int ng=strtol(g,&pEnd,16); //ng=ntohl(ng); struct in_addr addr; addr.s_addr=ng; gw=std::string( inet_ntoa(addr) ); nRet=0; } break; } } } fclose(f); return nRet; }