这里只讨论最简单与直接的方法,和route命令一样,从/proc/net/route读取,代码如下:
bool GetIPV4Gateway(const char * pNICName, char *pGateway, unsigned long len)
{
char buffer[200] = { 0 };
unsigned long bufLen = sizeof(buffer);
unsigned long defaultRoutePara[4] = { 0 };
FILE * pfd = fopen(PATH_ROUTE, "r");
if (NULL == pfd)
{
return false;
}
while (fgets(buffer, bufLen, pfd))
{
sscanf(buffer, "%*s %x %x %x %*x %*x %*x %x %*x %*x %*x\n", (unsigned int *)&defaultRoutePara[1], (unsigned int *)&defaultRoutePara[0], (unsigned int *)&defaultRoutePara[3], (unsigned int *)&defaultRoutePara[2]);
if (NULL != strstr(buffer, pNICName))
{
//如果FLAG标志中有 RTF_GATEWAY
if (defaultRoutePara[3] & RTF_GATEWAY)
{
unsigned long ip = defaultRoutePara[0];
snprintf(pGateway, len, "%d.%d.%d.%d", (ip & 0xff), (ip >> 8) & 0xff, (ip >> 16) &a