Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3323045
  • 博文数量: 366
  • 博客积分: 9916
  • 博客等级: 中将
  • 技术积分: 7194
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-29 23:27
个人简介

简单!

文章分类

全部博文(366)

文章存档

2013年(51)

2012年(269)

2011年(46)

分类: C/C++

2012-01-11 11:44:01

获取本地网关ip的c源码:
  1. int getWanGateway(char *gateway)
  2. {
  3.     char buff[256];
  4.     int nl = 0;
  5.     struct in_addr dest;
  6.     struct in_addr gw;
  7.     int flgs, ref, use, metric;
  8.     unsigned long int d, g, m;
  9.     int find_default_flag = 0;
  10.     char sgw[16];

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

  12.     while (fgets(buff, sizeof (buff), fp) != NULL)
  13.     {
  14.         if (nl)
  15.         {
  16.             int ifl = 0;
  17.             while (buff[ifl] != ' ' && buff[ifl] != '\t' && buff[ifl] != '\0')
  18.                 ifl++;
  19.             buff[ifl] = 0; /* interface */
  20.             if (sscanf(buff + ifl + 1, "%lx%lx%X%d%d%d%lx",
  21.                     &d, &g, &flgs, &ref, &use, &metric, &m) != 7)
  22.             {
  23.                 fclose(fp);
  24.                 return -1;
  25.             }

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

  31.                 if (dest.s_addr == 0)
  32.                 {
  33.                     find_default_flag = 1;
  34.                     memcpy(gateway, sgw, strlen(sgw));
  35.                     printf("gateway:%s\n", gateway);
  36.                     break;
  37.                 }
  38.             }
  39.         }
  40.         nl++;
  41.     }
  42.     fclose(fp);

  43.     if (find_default_flag == 1)
  44.         return 0;
  45.     else
  46.         return -1;
  47. }

阅读(4314) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

txgc_wm2012-03-20 08:52:44

baikaishiuc: 你的ifl是用来跳过route文件中的第一个字符串字段的吧?

你可以用sscanf中的 %*s特性,可以省略掉.....
呵呵,谢谢提醒!

baikaishiuc2012-03-19 18:51:10

你的ifl是用来跳过route文件中的第一个字符串字段的吧?

你可以用sscanf中的 %*s特性,可以省略掉