IcmpSendEcho führt nichts aus.



  • Hi,
    danke. Habe das ganze mal ausprobiert und auch selber ein wenig mit Hilfe von anderen ein rumprobiert. Folgender Source ist derzeit einigermaßen Funktionsfähig:

    for (int i=iStart; i<=iEnde; i++) {
    				char *szTemp = NULL;
    				DWORD dwReplySize = sizeof(ICMP_ECHO_REPLY)*8;
    				DWORD dwTimeOut = 8000;
    				ICMP_ECHO_REPLY *aReply = new ICMP_ECHO_REPLY[64];
    
    				szTemp = new char[16];
    
    				hICMP = IcmpCreateFile();
    
    				sprintf(szTemp, "%i.%i.%i.%i", ip1, ip2, ip3, i);
    
    				IPAddr ip;
    				ip = inet_addr(szTemp);
    
    				if (IcmpSendEcho(hICMP, (IPAddr) ip, szTemp, strlen(szTemp), NULL, &aReply, dwReplySize, dwTimeOut) != 0) {
    					SendMessage(GetDlgItem(hWnd, IDC_RESULTLIST), LB_ADDSTRING, 0, (int) szTemp);
    				} else {
    					// SendMessage(GetDlgItem(hWnd, IDC_RESULTLIST), LB_ADDSTRING, 0, GetLastError());
    					/*
    					 *	You have to uncomment this for checking IcmpSendEcho-Results.
    					 */
    				}
    
    				IcmpCloseHandle(hICMP);
    
    				delete [] aReply;
    			}
    

    Allerdings bricht er irgendwann ab mit einer AccessViolation. Ich denke, dass irgendwo noch ein Speicherleck ist. Das wird erstmal gesucht... 😉

    Chris



  • The buffer should be large enough to hold at least one ICMP_ECHO_REPLY structure plus MAX(RequestSize, 😎 bytes of data since an ICMP error message contains 8 bytes of data.

    Vielleicht hängts damit zusammen 🙄

    Und für dwReplySize würd ich sizeof(aReply) ausprobieren



  • Hi flenders,
    habe das gerade eingebaut, aber daran lag es leider nicht.

    Chris



  • Wo genau hängt er sich denn auf? (Edit: s.o.)



  • Hi,
    ich habe gerade mal deine Änderung eingebaut (bzgl. sizeof(aReply);). Allerdings ist er beim Durchlaufen von 127.0.0.0 bis 127.0.0.3 direkt fertig, ohne ein Ergebnis. Das kann natürlich theoretisch nicht sein, weil er ja bei 127.0.0.1 was finden müsste, oder? 😉

    Chris
    PS: Er hängt sich in irgendeiner Funktion in irgendeiner Headerdatei auf. Ich glaube irgendwas mit dem Delete.



  • Ich hab mal gegoogled und bin häufiger auf folgendes gestoßen:

    char reply[sizeof(icmp_echo_reply)+8];
    IcmpSendEcho(hICMP, (IPAddr) ip, 0, 0,, NULL, reply,sizeof(icmp_echo_reply)+8,5000);
    


  • Wie gesagt: lass dir mal GetLastError ausgeben



  • Hi,
    bei diesem Source bekomme ich:

    ---------------------------
    Microsoft Visual C++ Debug Library
    ---------------------------
    Debug Assertion Failed!

    Program: c:\Coden\C++\NetworkPing\Debug\NetworkPing.exe
    File: dbgdel.cpp
    Line: 51

    Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.

    (Press Retry to debug the application)
    ---------------------------
    Abbrechen Wiederholen Ignorieren
    ---------------------------

    Das mit dem GetLastError hat mich jetzt auch nicht sehr viel weitergebracht: immer der Fehler, dass der Datenbereich zu klein sei... 😃
    Aber wie groß soll er dann sein? Und welcher ist jetzt gemeint?

    Chris



  • Die Fehlermeldung blick ich nicht 🙄

    The buffer should be large enough to hold at least one ICMP_ECHO_REPLY structure plus MAX(RequestSize, 😎 bytes of data since an ICMP error message contains 8 bytes of data.



  • Hi,
    ich habe jetzt den Buffer vergößert, jetzt gibt es allerdings wieder den Abbruch in dem Header dbgdel.h in der Methode void operator delete. 😞

    Chris

    PS: GetLastError brachte nur was wie "Fenster hat keine Scrollelstein" hervor. 😉



  • Was ist denn das überhaupt für ein Header 😕



  • Ich habe KEINE Ahnung. Aber ich vermute, die ist für die delete-Operatoren zuständig.

    Chris



  • Versuche doch einfach erstmal nur eine einzelne Adresse (z.B. 127.0.0.1) anzupingen - vielleicht kommst du ja so mal vorwärts 🙄



  • Hi,
    immer noch der gleiche Fehler... 😞

    Himmel, Ar*** und Zwirn! Das kann doch nicht so schwer sein!!! 😞

    Chris


Anmelden zum Antworten