TCP Port abhören



  • @ Jochen

    Danke für deine Antwort
    Also ich arbeite mit pcap.h aus einem einzigen Grund. Ich will Daten an einen Server schicken - das Problem dabei ist dass er einen bestimmten festen Wert für die Checksumme benötigt. Das lässt der Windows Kernel abeer nicht zu er überbügelt mir dann einfach den Wert mit der richtigen Checksumme und verschickt das Paket (deshalb versagen sockets...)
    Ich benötige also einen Low Level Treiber ->pcap.h

    Kenne mich in dieser Hinsicht leider nicht wirklich gut aus
    Kennst du ein pcap.h Forum? (Windows)

    Das Problem ist ja jetzt dann bei ankommenden Nachrichten die ich als Antwort auf meine Anfrage erhalte.
    Der Kernel erkennt jetzt, dass an diesem Port gar keine Anwendung läuft - und schickt eigenhändig einen Reset der die Verbindung abbricht

    Mien Frage ist jetzt: gibt es die Möglichkeit mit winsock.... einen Port für diese Zeit zu belegen es muss ja anscheinend nichts anderes passieren damit kein Reset gesendet wird

    Vielen Dank im voraus



  • Tupo13 schrieb:

    Also ich arbeite mit pcap.h aus einem einzigen Grund. Ich will Daten an einen Server schicken - das Problem dabei ist dass er einen bestimmten festen Wert für die Checksumme benötigt. Das lässt der Windows Kernel abeer nicht zu er überbügelt mir dann einfach den Wert mit der richtigen Checksumme und verschickt das Paket (deshalb versagen sockets...)
    Ich benötige also einen Low Level Treiber ->pcap.h

    Warum verwendest Du nicht Raw-Sockets? Damit müsste es eigentlich gehen (auch mit XP-SP2).

    Tupo13 schrieb:

    Kenne mich in dieser Hinsicht leider nicht wirklich gut aus
    Kennst du ein pcap.h Forum? (Windows)

    Ich kenn mich mit pcap nicht aus 😉

    Tupo13 schrieb:

    Mien Frage ist jetzt: gibt es die Möglichkeit mit winsock.... einen Port für diese Zeit zu belegen es muss ja anscheinend nichts anderes passieren damit kein Reset gesendet wird

    Wenn Du ihn belegen willst, dann ist es doch schon zu spät, oder?



  • danke Jochen für deine Hilfe

    zu spät ist es eigentlich nicht

    Hier ein Auszug von MS

    Wenn keine Anwendung den TCP-Port abhört, wird an den Absender das TCP-Segment "Connection Reset" zurückgesendet und das Paket gelöscht.

    Ich benötige also eine Anwendung die diesen Port abhört.

    -ich will die Pakete die an diesem Port ankommen nicht weiterverarbeiten
    -ich benötige diese "Anwendung..." nur damit das Betriebsystem das Paket nicht verwirft
    -empfangen und verarbeiten tu ich es mit pcap.h was ja eigentlich sonst einwandfrei funktioniert

    Gruß Tupo13



  • Tupo13 schrieb:

    -ich benötige diese "Anwendung..." nur damit das Betriebsystem das Paket nicht verwirft

    Dann mach das doch. Oder was ist Deine Frage?



  • Dann mach das doch. Oder was ist Deine Frage?

    Meine Frage ist Wie?

    Wie schon gesagt kenne mich da nicht aus was für möglichkeiten gibt es Sockets..?





  • @ Danke Jochen

    Ich habe es jetzt so versucht, ich möchte den Port 3854 belegen. Meine IP
    ist 192.168.17.140 kompilieren funktioniert - der Reset wird aber immer noch gesendet.

    Höre ich so den Port 3854 auc meinem PC ab?

    // Initialize Winsock
      WSADATA wsaData;
      int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
      if (iResult != NO_ERROR)
        printf("Error at WSAStartup()\n");
    
      //----------------------
      // Create a SOCKET for listening for
      // incoming connection requests.
      SOCKET ListenSocket;
      ListenSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
      if (ListenSocket == INVALID_SOCKET) {
        printf("Error at socket(): %ld\n", WSAGetLastError());
        WSACleanup();
        return;
      }
    
    //----------------------
      // The sockaddr_in structure specifies the address family,
      // IP address, and port for the socket that is being bound.
      sockaddr_in service;
      service.sin_family = AF_INET;
      service.sin_addr.s_addr = inet_addr("192.168.17.140");
      service.sin_port = htons(3854);
    
      if (bind( ListenSocket, 
        (SOCKADDR*) &service, 
        sizeof(service)) == SOCKET_ERROR) {
        printf("bind() failed.\n");
        closesocket(ListenSocket);
        return;
      }
    
    //----------------------
      // Listen for incoming connection requests 
      // on the created socket
      if (listen( ListenSocket, 1 ) == SOCKET_ERROR)
        printf("Error listening on socket.\n");
    


  • Sendet der Server ein UDP oder TCP Packet?
    Falls UDP, dann ist das abhören eines TCP-Ports natürlich falsch...
    Dann solltest Du anstall "listen das "recvfrom" verwenden...



  • Er verwendet TCP

    Danke schon mal - hast mir sehr geholfen

    Aber eine Frage hätte ich noch:
    also deiner Meinung nach müsste wenn ich diesen Code zu beginn des Programms ausführe der Port belegt sein

    Gruß Tupo13



  • Wie "beleget"? er müsste hier zumindest auf Pakete warten...
    Kannst Du auch mit "netstat -a" anzeigen...



  • Also der Port hat den Status abhören - danach schicke ich die Pakete los
    leider wird der Reset immer noch geschickt - keine Ahnung weshalb

    Bin echt am verzweifeln

    Gruß Tupo13


Anmelden zum Antworten