读书人

一个关于sendARP的有关问题(局域网扫

发布时间: 2012-01-20 18:53:53 作者: rapoo

一个关于sendARP的问题(局域网扫描)
小弟写了一个局域网在线ip的扫描代码,本意是想用sendARP来判断返回值,如果返回NO_ERROR就认为机器在线,否则判断不在线,这段代码编译没有错误,但是结果出现了问题,它的第一个返回值是没问题的,比如192.168.1.1在线,确实可以打印出来,第二个192.168.1.2不在线,返回值31,但是从第三个开始无限1784:ERROR_INVALID_USER_BUFFER
小弟才疏学浅,是在不知道问题出在哪里?请csdn各位高手指点一二。在此谢过!代码如下:

C/C++ code
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;            }        }    }}


[解决办法]
::Sleep(1000);
ULONG PhysAddrLen=6; //多了ULONG,不会重置PhysAddrLen

读书人网 >VC/MFC

热点推荐