获得网关地址

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

int main(int argc, char *argv[])
{
    int chars_read;
    char buf[BUFSIZ];
    
    FILE* fd = popen("route | grep 'default' | awk '{print $2}' ", "r");
    if (fd == NULL)
    {
        perror("get getway error\n");
        return -1;
    }
    
    memset( buf, 0, BUFSIZ );
    //fgets(buf, sizeof(buf), fd);
    
    chars_read = fread(buf, sizeof(char), BUFSIZ-1, fd);
    printf("the netmask is %s",buf);
    //free(buf);
    
    }

//////////////////////////////////////////////

方法二:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <fcntl.h>
#include <getopt.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
//#include <net/if.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>         
      
#include <arpa/inet.h>
#include <netinet/in.h>

#include <linux/ethtool.h>
#include <linux/sockios.h>
#include <linux/route.h>


int getWanGateway(char *gateway)
{
    char buff[256];
    int nl = 0;
    
    struct in_addr dest;
    struct in_addr gw;
    
    int flgs, ref, use, metric;
    unsigned long int d, g, m;
    int find_default_flag = 0;
    char sgw[16];

    FILE *fp = fopen("/proc/net/route", "r");

    while (fgets(buff, sizeof (buff), fp) != NULL)
    {
        if (nl)
        {
            int ifl = 0;
            while (buff[ifl] != ' ' && buff[ifl] != '\t' && buff[ifl] != '\0')
                ifl++;
            buff[ifl] = 0; /* interface */
            if (sscanf(buff + ifl + 1, "%lx%lx%X%d%d%d%lx",
                    &d, &g, &flgs, &ref, &use, &metric, &m) != 7)
            {
                fclose(fp);
                return -1;
            }

            if (flgs & RTF_UP)
            {
                dest.s_addr = d;
                gw.s_addr = g;
                strcpy(sgw, (gw.s_addr == 0 ? "" : (char *) inet_ntoa(gw)));

             if (dest.s_addr == 0)
                {
                    find_default_flag = 1;
                    memcpy(gateway, sgw, strlen(sgw));
                    printf("gateway:%s\n", gateway);
                    //printf("gateway:%s", gateway);
                    break;
                }
            }
        }
        nl++;
    }
    fclose(fp);

    if (find_default_flag == 1)
        return 0;
    else
        return -1;
}

int main(int argc, char *argv[])
{
    //int getWanGateway(char *gateway);
    char gateway[100];
    getWanGateway(gateway);
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值