Home > database >  Error:"Invalid padding length on received packet" when connecting to winsock server
Error:"Invalid padding length on received packet" when connecting to winsock server

Time:09-26

I'm mostly new to new to networking so I thought I'd start with something simple so I was trying to make a simple c echo server and I'm using putty for testing. When I connect to the server through putty I get a putty error of "Invalid padding length received packet". When I check the server console it says that the putty client connected but disconnected imidiatly. Here's my code.

#include <stdlib.h>
#include <WS2tcpip.h> //includes the winsock file as well
#include <string>
#pragma comment (lib,"ws2_32.lib")
#define PORT 17027
int main()
{

    //Initialize winsock
    WSADATA wsData;
    WORD ver = MAKEWORD(2, 2);

    int wsOK = WSAStartup(ver, &wsData);
    if (wsOK != 0)
    {
        std::cout << "Can't initialize wonsock! Quitting" << std::endl;
        return 0;
    }

    //Create a socket
    SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);
    if (listenSocket == INVALID_SOCKET)
    {
        std::cout << "Can't create socket! Quitting" << std::endl;
        return 0;
    }

    //Bind the socket to an ip address and port
    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(PORT);
    hint.sin_addr.S_un.S_addr = INADDR_ANY;

    bind(listenSocket, (sockaddr *)&hint, sizeof(hint));

    //Tell Winsock the socket is for listening
    listen(listenSocket, SOMAXCONN);

    //Wait for connection
    sockaddr_in client;
    int clientSize = sizeof(client);


    SOCKET clientSocket = accept(listenSocket, (sockaddr*)&client, &clientSize);
    if (clientSocket == INVALID_SOCKET)
    {
        std::cout << "Cant accept client! Quitting" << std::endl;
        return 0;
    }

    char host[NI_MAXHOST]; // Client's remote name;
    char service[NI_MAXHOST]; // Client's (i.e. port) the client is connected on

    ZeroMemory(host, NI_MAXHOST);
    ZeroMemory(service, NI_MAXHOST);

    if (getnameinfo((sockaddr*)&client, sizeof(client), host, NI_MAXHOST, service, NI_MAXHOST, 0) == 0) // try to get name of client
    {
        std::cout << host << " connected on port " << service << std::endl;
    }
    else 
    {
        inet_ntop(AF_INET, &client.sin_addr, host, NI_MAXHOST); //get address of client
        std::cout << host << " connected on port " << ntohs(client.sin_port) << std::endl;
    }

    //Close listening socket
    closesocket(listenSocket);

    //While loop: accept and echo message back to client
    char buf[4096];
    while (true)
    {
        ZeroMemory(buf, 4096);
        //Wait for client to send data
        int bytesReceived = recv(clientSocket, buf, 4096, 0);
        if (bytesReceived == SOCKET_ERROR)
        {
            std::cerr << "Error in recv(). Quitting" << std::endl;
            break;
        }

        if (bytesReceived == 0)
        {
            std::cerr << "Client disconnected" << std::endl;
            break;
        }

        //Echo message back to client
        send(clientSocket, buf, bytesReceived   1, 0);
    }

    //Close the socket
    closesocket(clientSocket);

    //Cleanup winsock
    WSACleanup();

    return 0;
}

CodePudding user response:

It loos like you are trying to connect with SSH. Your code is not an SSH server.

To connect to a raw socket server with PuTTY, you need to select the "Raw" connection type.

  • Related