注册 登录
自由的生活_软路由 返回首页

11的个人空间 https://bbs.routerclub.com/?499 [收藏] [复制] [分享] [RSS]

日志

从任何字符串中提取IP

已有 759 次阅读2012-10-1 22:11 | 字符串

void getHostIP(char* hostIP,const char* sourceStr)
{
 char nbuf[4];
 int sn[4];
 int i,ret,start,n,m;
 int runnum=0;
 start = 0; 

 while (1)
 {  
  runnum++;
  //第一个数大于255的情况
  if (runnum > 1)
  {
   ret=RE_ERR;
   for (i=start+1;i<strlen(sourceStr);i++)
   {
    if (sourceStr[i]<'1' || sourceStr[i]>'9')
    {
     start = i;
     ret=RE_OK;
     break;
    }
   }

   if(ret==RE_ERR)
   {
    break;
   }
  }  

  //查找第一个数为数字的 
  ret=RE_ERR;
  for (i=start;i<strlen(sourceStr);i++)
  {
   if (sourceStr[i]>='1' && sourceStr[i]<='9')
   {
    start = i;
    ret=RE_OK;
    break;
   }
  }

  if(ret==RE_ERR)
  {
   break;
  }

  //在剩余的字串中是否含有三个点
  n=0;
  for (i=start;i<strlen(sourceStr);i++)
  {
   if (sourceStr[i]=='.')
   {
    n++;
   }
  }

  if (n<3)
  {
   ret = RE_ERR;
   break;
  }


  ret=RE_ERR;
  memset(nbuf,0,sizeof(nbuf));
  for (i=start,m=0,n=0;i<strlen(sourceStr);i++)
  {

   if (sourceStr[i]>='0' && sourceStr[i]<='9')
   {    

    if(n<3)
    {
     nbuf[n]=sourceStr[i];
     ret=RE_OK;
    }
    else
    {
     ret=RE_ERR;
     break;
    }
    n++;
   }
   else if (sourceStr[i]=='.')
   {
    if (strlen(nbuf)==0)
    {
     ret=RE_ERR;
     break;
    }

    sn[m] = atoi(nbuf);
    if (sn[m] <= 255)
    {
     m++;
     n=0;
     memset(nbuf,0,sizeof(nbuf));
     if (m==4)
     {
      ret=RE_OK;
      break;
     }  
    }
    else
    {
     ret=RE_ERR;
     break;

    }
   }
   else
   {
    break;
   }
  }

  if (m==3)
  {
   if (ret==RE_OK)
   {
    if (strlen(nbuf)==0)
    {
     ret=RE_ERR;
    }
    else
    {
     sn[3]=atoi(nbuf);
     if (sn[3] <= 255)
     {
      ret=RE_OK;
     }
     else
     {
      ret=RE_ERR;
     }
    }
   }
  }
  else
  {
   if (m!=4)
   {
    ret=RE_ERR;
   }   
  }

  if (ret==RE_OK)
  {
   break;
  }
  else
  {
   continue;
  }
 }

 if (ret==RE_OK)
 {
  sprintf(hostIP,"%u.%u.%u.%u",sn[0],sn[1],sn[2],sn[3]);
 }
}


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-6-9 02:23 , Processed in 0.064264 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

返回顶部