一个关于sendARP的问题(局域网扫描)
小弟写了一个局域网在线ip的扫描代码,本意是想用sendARP来判断返回值,如果返回NO_ERROR就认为机器在线,否则判断不在线,这段代码编译没有错误,但是结果出现了问题,它的第一个返回值是没问题的,比如192.168.1.1在线,确实可以打印出来,第二个192.168.1.2不在线,返回值31,但是从第三个开始无限1784:ERROR_INVALID_USER_BUFFER
小弟才疏学浅,是在不知道问题出在哪里?请csdn各位高手指点一二。在此谢过!代码如下:
void main(){ DWORD dwRetVal; IPAddr DestIp = 0; IPAddr SrcIp = 0; /* default for src ip */ ULONG MacAddr[2]; /* for 6-byte hardware addresses */ ULONG PhysAddrLen=6; /* default to length of six bytes */ int i=0; //string ipStr; char Num[100]; for (i=1;i<=255;i++) { sprintf(Num,"%s%d","192.168.1.",i); //cout<<Num<<endl; DestIp=inet_addr(Num); //cout<<DestIp<<endl; //break; dwRetVal = SendARP(DestIp, SrcIp, &MacAddr, &PhysAddrLen); cout<<"sendarp返回值:"<<dwRetVal<<endl; ::Sleep(1000); ULONG PhysAddrLen=6; if(dwRetVal==0) { cout<<"当前在线:"<<Num<<endl; } else { printf("Error: SendArp failed with error: %d", dwRetVal); switch (dwRetVal) { case ERROR_GEN_FAILURE: printf(" (ERROR_GEN_FAILURE)\n"); break; case ERROR_INVALID_PARAMETER: printf(" (ERROR_INVALID_PARAMETER)\n"); break; case ERROR_INVALID_USER_BUFFER: printf(" (ERROR_INVALID_USER_BUFFER)\n"); break; case ERROR_BAD_NET_NAME: printf(" (ERROR_GEN_FAILURE)\n"); break; case ERROR_BUFFER_OVERFLOW: printf(" (ERROR_BUFFER_OVERFLOW)\n"); break; case ERROR_NOT_FOUND: printf(" (ERROR_NOT_FOUND)\n"); break; default: printf("\n"); break; } } }}