Winsocket RawSocket



  • also ich hab das problem, dass ich zwar den socket erzeugen kann, aber als rc immer nur -1 krieg, wenn ich recvfrom aufrufe.
    Ich habe gelesen, dann ms den rawsocket stark eingeschränkt hat seit dem SP2 für XP, kann es sein dass dann folgender code nciht mehr funktioniert? (der ist grad etwas grausig, liegt daran dass ich da einige verschiedene beispiele versucht hab zum laufen zu bringe.

    int main(int argc, char* argv[])
    {
      // The Variables
      UINT Option;
      WORD Version;
      SOCKET Socket;
      WSADATA WSAData;
      SOCKADDR_IN Address;
    
      char packet[PacketSize] ;
    
      memset( packet,0 , PacketSize ) ;
    
      // Show Program Info
      printf("\n");
      printf(PROGINFO);
      printf("\n \n");
    
      // Non-Unix Startup Routine
      if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
      {
        printf("Error: Startup failed. \n");
        return -1;
      }
    
      // Zero-Fill Address Struct
      memset(&Address, 0, sizeof(SOCKADDR_IN));
    
      // Set IPv4 Family
    
        // Socket Open
        if ( (Socket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP) ) == INVALID_SOCKET)
        {
          printf("Error: Could not create Socket. \n");
          return -1;
        }
    
        //// Header Senden aktivieren
        //Option = 1;
        //if (setsockopt(Socket, IPPROTO_IP, IP_HDRINCL, (char *) &Option, sizeof(Option)) != 0)
        //{
        //  printf("Error: Could not set socket option. \n");
        //  printf("%d", WSAGetLastError());
        //  return -1;
        //}
    
         char szBuffer[4096];
         SOCKADDR_IN saFrom;
    
          int nResponseLen = 0;
          int nFromLen = sizeof(saFrom);
    
          while ( true )
          {
            nResponseLen = recvfrom(Socket, szBuffer, 4096, 0, (SOCKADDR *) &saFrom, &nFromLen);
          }
    
      // Non-Unix Cleanup Routine
      if (WSACleanup() != 0)
      {
        printf("Error: Cleanup failed. \n");
        return -1;
      }
    
      // Exit
      return 0;
    


  • Bringt eventuell WSAGetLastError() noch brauchbare Infos?



  • liefert WSAEINVAL zurück 😑



  • MSDN schrieb:

    Restricted traffic over raw sockets
    Detailed description

    A very small number of Windows applications make use of raw IP sockets, which provide an industry-standard way for applications to create TCP/IP packets with fewer integrity and security checks by the TCP/IP stack. The Windows implementation of TCP/IP still supports receiving traffic on raw IP sockets. However, the ability to send traffic over raw sockets has been restricted in two ways:

    - TCP data cannot be sent over raw sockets.

    - UDP datagrams with invalid source addresses cannot be sent over raw sockets. The IP source address for any outgoing UDP datagram must exist on a network interface or the datagram is dropped.


Anmelden zum Antworten