示例:TragetToIpAndProt(127.0.0.1:80|192.168.0.1:88)
数组uip[0] 可以得到 127.0.0.1的长整数型数 数组DProt[0]可以得到 80 网络字节
数组uip[1] 可以得到 192.168.0. 1的长整数型数 数组DProt[1]可以得到 88 网络字节
现在我想实现:
TragetToIpAndProt(http://www.xxx.com:80|http://www.yyy.com:88)
数组uip[0] 可以得到 http://www.xxx.com的字符串 数组DProt[0]可以得到 80 整形
数组uip[1] 可以得到 http://www.yyy.com的字符串 数组DProt[1]可以得到 88 整形
应该如何改写。。。谢谢大家。新手求教
int iNum = 0;
unsigned long uip[100];
u_short DProt[100];
unsigned long ResolvDNS(char *szTarget)
{
long i;
struct hostent *he;
if((i=inet_addr(szTarget))<0)
if((he=gethostbyname(szTarget))==NULL)
return(0);
else
return(*(unsigned long *)he->h_addr);
return(i);
}
void TragetToIpAndProt(char *ip/*,ULONG *pip,DWORD *pProt,int icount*/)
{
//初始化SOCK_RAW
WSADATA wsaData;
if((WSAStartup(MAKEWORD(2,1),&wsaData))!=0){
return;
}
char ipTemp[64] = {"0"};
char chip[32] = {"0"},chprot[32] = {"0"};
char *ptr = NULL,*ptr2 = NULL;
while(*ip)
{
if (strstr(ip,"|") != NULL) //如果找到分隔符说明多个目标
{
int len = strcspn(ip,"|");
strncpy(ipTemp,ip,len); //分解出其中一个IP
if (strstr(ipTemp,":") != NULL) //有端口
{
ptr = ipTemp;
strncpy(chip,ptr,strcspn(ip,":"));
ptr += strcspn(ip,":") + 1;
strcpy(chprot,ptr);
uip[iNum] = ResolvDNS(chip);
DProt[iNum] = htons(atoi(chprot));
}else
{
uip[iNum] = ResolvDNS(ipTemp);
DProt[iNum] = 0;
}
ip += strlen(ipTemp) + 1;
}else //最后一个目标了
{
strcpy(ipTemp,ip);
if (strstr(ipTemp,":") != NULL)
{
ptr2 = ipTemp;
strncpy(chip,ptr2,strcspn(ptr2,":"));
ptr2 += strcspn(ptr2,":") +1;
strcpy(chprot,ptr2);
uip[iNum] = ResolvDNS(chip);
DProt[iNum] = htons(atoi(chprot));
}else
{
uip[iNum] = ResolvDNS(ip);
DProt[iNum] = 0;
}
ip += strlen(ipTemp);
}
memset(ipTemp,0,sizeof(ipTemp));
memset(chip,0,sizeof(chip));
memset(chprot,0,sizeof(chprot));
iNum++;
}
}