Net Send - Messages abfangen - Geht das?



  • Hi,
    jetzt hab ich mal ne Frage. Kann sich jemand von euch vorstellen, dass man irgendwie Nachrichten unter NT/XP/2000 abfangen kann, die über "net send..." angerauscht kommen? So dass die MessageBox garnicht erst aufgeht sondern, dass ich die Nachricht verarbeite.



  • Naja rein technisch gesehen müsstest du den Ordner "\\localhost\MAILSLOT\messngr" besser überwachen können als der Service was eher schwierig sein sollte. Das beste wäre wohl den Service zu imitieren. Sonst fällt mir auch nichts ein



  • evtl. noch mittels hooking 🙄





  • Ich glaube der Nachrichtendienst schreibt auf port 139. Versuch mal ob du den port über ein eigenes Programm auch lesen kannst.



  • OK, ich hab jetze mal nen MailSlot eröffnet, reingeschrieben und gelesen. Funzt super! Jetzt ist die Frage, wie ich in den NetSend-MailSlot schreibe. Ich habe versucht, dazu folgenden String als Pfad zu verwenden:

    TEXT("\\\\.\\mailslot\\localhost\\MAILSLOT\\messngr")
    

    Aber CreateFile() gibt ERROR_INVALID_HANDLE zurück. GetLastError ist 0. Daher denke ich mal, dass der Pfad nicht existiert. Welchen Pfad muss ich benutzen?



  • OK, zum Schreiben hab ich jetzt

    lpszWriteMailSlot = TEXT("\\\\FRITZ\\mailslot\\messngr")
    

    verwendet. Das geht auch fehlerlos gut. Aber es öffnet sich keine MessageBox, wie es normalerweise tut bei einer NetSend-Nachricht. Ich verwende folgende Funktion zum Schreiben in den MailSlot:

    BOOL WriteSlot(HWND hwnd, HDC hdc)
    {
       LPSTR lpszMessage = "My Little Message";
       BOOL fResult;
       HANDLE hFile;
       DWORD cbWritten;
    
       hFile = CreateFile(lpszWriteMailSlot,
           GENERIC_WRITE,
           FILE_SHARE_READ,  // required to write to a mailslot
           (LPSECURITY_ATTRIBUTES) NULL,
           OPEN_EXISTING,
           FILE_ATTRIBUTE_NORMAL,
           (HANDLE) NULL);
    
       if (hFile == INVALID_HANDLE_VALUE)
       {
           ErrorHandler(hwnd, "Primary domain"); // local error handler
           ShowLastErrorString();
           return FALSE;
       }
    
       fResult = WriteFile(hFile,
           lpszMessage,
           (DWORD) lstrlen(lpszMessage) + 1,  // include terminating null
           &cbWritten,
           (LPOVERLAPPED) NULL);
    
       if (!fResult)
       {
           ErrorHandler(hwnd, "WriteFile");
           return FALSE;
       }
    
       TextOut(hdc, 10, 10, "WriteFile successful.", 21);
    
       fResult = CloseHandle(hFile);
    
       if (!fResult)
       {
           ErrorHandler(hwnd, "CloseHandle");
           return FALSE;
       }
    
       TextOut(hdc, 10, 30, "CloseHandle successful.", 23);
       return TRUE;
    }
    

    Er gibt mir auf meinem DC aus: "WriteHandle successfull" und "CloseHandle successfull". Was stimmt hier nicht? Vielleicht liegt es am Format der Message. Vielleicht muss noch der Absender dazu oder sonstiges. Wäre toll, wenn hier jemand weiß, was noch fehlt zu meinem Glück. 😉



  • Hi,
    mit Mailslot auf NT/2000/XP kannst du das vergessen. Du musst einen Netbios Listener bauen und den Service ersetzen. Das geht alles über eine Api:
    Netbios(&ncb)

    Für Miranda-Im (Das ist sowas wie Trillian, nur Opensource), gibt es ein Plugin, dass das Net send Protokoll unterstützt. Das Plugin ist Opensource, du musst nur ma suchen!



  • Das liegt am Format. Korrekt muß es so aussehen:

    LPSTR lpszMessage = "Absender-Name\0Empfaenger-Name\0My Little Message";
    


  • @-King-: Danke, aber das hatte ich auch schon rausgefunden. Ich konnte per MailSlot über NetSend etwas versenden. Lief wunderbar. Blieb nur die Frage, wie abfangen. Ich mag halt die MessageBoxes nicht, da man die einkommenden Messages nicht loggen kann. Da ich da keine Lösung gesehen habe, habe ich mir halt mein eigenes MailSlot-Programm zum Versenden von Nachrichten gebaut. Funzt super. Jetzt hapert es nur noch an Details in der Visualisierung.

    @tipp!: Danke, aber das ist mir zu krass. Aber danke trotzdem.



  • Wenn Du versenden kannst, kannst Du doch auch empfangen. Du erstellt den Mailslot so:

    HANDLE hSlot1 = CreateMailslot(TEXT("\\\\.\\mailslot\\messngr"), 0, MAILSLOT_WAIT_FOREVER, NULL);
    

    Du kannst dann das Sample aus dem MSDN 1:1 verwenden. Allerdings bekommst Du aufgrund der in der Message enthaltenen Null-Zeichen nur den Absender der Message in der Box ausgegeben.



  • -King- schrieb:

    Du erstellt den Mailslot so:

    Nein. Da es den MailSlot schon gibt, kann ich ihn auch nicht erstellen. Wenn ich das versuche, bekomme ich INVALID_HANDLE_VALUE zurück.



  • Da Dich die MessageBox sowieso nervt, wirst Du den Dienst doch eh deaktivieren. Und als Ersatz hast Du dann Deine Anwendung.



  • Das hast du etwas missverstanden. Den Dienst finde ich erstmal gut. Nur habe ich ein Programm geschrieben, welches diesen per NetSendBuffer (oder wie die Funktion noch gleich heißt) nutzt (siehe das Programm "NetSend" auf meiner HP). Dabei stört es mich eben, dass ich einkommende Messages nicht loggen kann. Aber das hat jetzt ein Ende. Doof ist nur, dass beim Erstellen eines MailSlots nur Hostnamen angenommen werden, aber keine IP's.



  • Dann deaktivier den Nachrichtendienst einfach und zeig dann selber die MessageBox an. Ob das nun der Nachrichtendienst oder dein Programm macht ist ja dann egal 😃



  • Geht nicht! Wenn man den Nachrichtendienst deaktiviert, gibt es auch den MailSlot nicht mehr.



  • Den Mailslot erstellst Du doch aber in Deiner Anwendung. Wenn der Nachrichtendienst deaktiviert ist, funktioniert der CreateMailslot-Aufruf. Dann kannst Du die Nachrichten anstelle des Originals einfangen.



  • @-King-
    Wenn ein anderer über Mailslot Nachrichten schickt, wird er sie problemlos empfangen, aber das Problem ist, dass er über Net Send keine Nachrichten mehr empfangen kann! Wenn ein anderer über Net Send eine Nachricht schickt, wird diese nicht über Mailslot übertragen! (Derjenige wird ein "Der Nachrichten Alias konnnte auf dem Netzwerk nicht gefunden werden." bekommen)

    @WebFritzi
    So schwer ist es auch net 😉
    Hab dir mal die Links raus gesucht, erst mal zu Miranda-Im und dem Plugin:
    www.miranda-im.org
    http://miranda-im.org/download/details.php?action=viewfile&id=364

    Und hier SourceForge Projekt Homepage des Plugin
    http://sourceforge.net/projects/nsp/

    Es lohnt sich echt, dass anzuschauen! Ich kann dir, wenn du willst, auch ein teils fertiges BCB Projekt per Mail schicken. Teils in der Beziehung, dass nur Empfangen geht und ich glaube auch, dass nur bis 128 Chars empfangen werden können, bei mehr als 128 Chars, muss ma noch mal kleinere Änderungen vornehmen.



  • @Tipp!
    Du bist echt nett, vielen Dank. Aber ich habe soeben mein Programm mit eigenem Mailslot fertiggestellt, und es stellt mich auch zufrieden. Jetzt kann ich einkommende Nachrichten auch loggen - genauso, wie ich es wollte. Ich danke dir trotzdem vielmals - auch für dein Angebot.



  • Kein Problem 🙂


Log in to reply