timeout für SendARP()



  • hi

    kann man irgendwie einen timeout festlegen, dass SendARP z.b 3 sek auf eine arp antwort wartet und dann erst sagt ob ein Gerät geantwortet hat oder nicht?

    Manche Geräte brauchen bisschen länger um zu antworten und sendarp gibt fast instant eine antwort das dass gerät nicht gefunden wurde ...


    Anmelden zum Antworten
     


  • undn och eine Frage

    kann es sein das die funktion bei windows 7 nicht funktioniert wenn ich wireshark laufen lasse seh ich keine arp anfragen von mir ... SendARP gibt mir auch immer ERROR_NOT_FOUND

    die funktion:

    #include <winsock2.h>
    #include <iphlpapi.h>
    
    bool QPing::arpping(QString src, QString dst)
    {
        QIP ip(dst);
        ip.setInverseIp(ip.getIp());
    
        qDebug() << ip.toString();
    
        IPAddr uldst = ip.getIp();
        IPAddr ulsrc = QIP(src).getIp();
    
        ULONG macAddr[2] = {0};
        ULONG physAddrLen = 6;
    
        //unsigned long macAddr[2] = {0};
        //unsigned long physAddrLen = 6;
    
        memset(&macAddr, 0xFF, sizeof (macAddr));
    
        qDebug() << "sending arp req";
    
        DWORD ret = 0;
        if((ret = SendARP(uldst, ulsrc, &macAddr[0], &physAddrLen)) != NO_ERROR)
        {
            switch(ret)
            {
                case ERROR_BAD_NET_NAME:
                    qDebug() << "Network not found";
                    return false;
                case ERROR_BUFFER_OVERFLOW:
                    qDebug() << "The file name is too long";
                    return false;
                case ERROR_GEN_FAILURE:
                    qDebug() << "A device attached to the system is not functioning";
                    return false;
                case ERROR_INVALID_PARAMETER:
                    qDebug() << "One of the parameters is invalid";
                    return false;
                case ERROR_INVALID_USER_BUFFER:
                    qDebug() << "The supplied user buffer is not valid for the requested operation";
                    return false;
                case ERROR_NOT_FOUND:
                    qDebug() << "Element not found";
                    return false;
                case ERROR_NOT_SUPPORTED:
                    qDebug() << "The SendARP function is not supported by the operating system running on the local computer";
                    return false;
                default:
                    qDebug() << "other";
                    return false;
            }
        }
        if(physAddrLen)
            return true;
        return false;
    }
    

    naja ich benutze Qt 4.8.0 und hab den header und die lib aus dem SDK eingebunden

    LIBS += -liphlpapi

    unter windows xp hat das geklappt aber da hab ich die lib vom microsoft sdk benutzt 😕



  • hat keiner eine idee wieso das nicht geht oder ob man einen timeout ienfügen kann? 😞


Anmelden zum Antworten