단순 TCP 서버에서 Telnet 거부 연결

윌리엄 _

텔넷을 통해 간단한 TCP 서버에 연결할 수 있도록 기본 c 프로그램을 만들려고했습니다. 연결되면 문자열을 입력 할 수 있고 서버가이를 토글합니다.

텔넷을 사용하려고 할 때 연결을 거부합니다. 이것이 내가 입력하는 것입니다.

telnet localhost 7654

서버 터미널에서 오류가 발생하지 않고 터미널에 다음이 표시됩니다.

"서버가 시작됩니다 ..."

"이제 서버가 들어오는 연결을 수신하고 있습니다."

다음은 서버 코드입니다.

#include<stdlib.h>
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<string.h>
#include<signal.h>
#include<errno.h>
#include<ctype.h>
#include <unistd.h> 

#define PORTNUMBER 7654
#define BUF_LEN 512
#define COM_LEN 32

void manageConnection(int, int);
int serverProcessing(char *input, char* output);
void handle_sigcld(int);

int main()
{
    int mainSocket, tempSocket;
    int errorCode, clientLength;
    int pid;
    
    struct sockaddr_in server,client;
    struct hostent* clientDetails;
    struct sigaction cldsig;
    
    fprintf(stderr,"The server is starting up...\n");
    
    /*  the following lines of codes are used to prevent zombie processes
        from occuring. It allows each childed to be waited on.  */
    cldsig.sa_handler = handle_sigcld;
    sigfillset(&cldsig.sa_mask);
    cldsig.sa_flags = SA_RESTART | SA_NOCLDSTOP;
    sigaction(SIGCHLD,&cldsig,NULL);
    
    /*  creating the socket stream, SOCK_STREAM is a connection based protocol
        where a connection is established between and is only disconnected 
        when a party leaves or network error.   */
    mainSocket = socket(PF_INET, SOCK_STREAM, 0);
    if (mainSocket < 0)
    {
        perror("Error in function socket()");
        exit(EXIT_FAILURE);
    }
    
    //  setting up the server details by declaring the port number, address family and interface 
    memset(&server,0,sizeof(server));
    server.sin_family = AF_INET;
    server.sin_addr.s_addr = htonl(INADDR_ANY);
    server.sin_port = PORTNUMBER;
    
    // binding the socket to the server details listed above
    if ( (errorCode = bind(mainSocket,(struct sockaddr *)&server,sizeof(server)) ) < 0 )
    {
        perror("Error in function bind()\n");
        exit(EXIT_FAILURE);
    }
    
    // put the socket into listen mode so it can listen for incoming connections
    if ( (errorCode = listen(mainSocket,5) ) < 0 )
    {
        perror("Error in function listen()\n");
        exit(EXIT_FAILURE);
    }
    
    fprintf(stderr,"The server is now listening for incoming connections\n");
    
    while(1)
    {
        clientLength = sizeof(client);
        // accept function is used to extract the first connection and returns a new file discriptor
        tempSocket = accept(mainSocket,(struct sockaddr *)&client,(socklen_t *)&clientLength);
        if (tempSocket < 0 )
        {
            perror("Error in function accept()\n");
            exit(EXIT_FAILURE);
        }
        
        // printing the client connection details
        clientDetails = gethostbyaddr( (void*)&client.sin_addr.s_addr,4,AF_INET);
        if (clientDetails == NULL)
        {
            herror("Error in fetching client details\n");
            exit(EXIT_FAILURE);
        }
        fprintf(stderr,"accepted connection from %s on port %d with discriptor %d \n",
                clientDetails->h_name,ntohs(client.sin_port),tempSocket);
                
        // this function is used to create a new process to handle the client
        if ( (pid = fork() ) == 0)
        {
            // we close the connection to the main socket and open a sub connection with the temp socket
            close(mainSocket);
            manageConnection(tempSocket,tempSocket);
            exit(EXIT_FAILURE);
        }
        else 
        {
            close(tempSocket);
        }
    }
    close(mainSocket);
    return 0;
}

void manageConnection(int in, int out)
{
    int readCount,bufCount;
    char inBuf[BUF_LEN], outBuf[BUF_LEN], inData[COM_LEN], hostname[40];
    char prefix[100];
    char endOfData = '\n';
    int i, revCount;
    char revBuf[BUF_LEN];
    
    gethostname(hostname,40);
    sprintf(prefix,"\tC%d", getpid() );
    fprintf(stderr,"\n%s starting up\n",prefix);
    
    sprintf(outBuf,"\n\n connected to TCP server on host: %s \n"\
                    "enter X to exit otherwise enter the"\
                    "string to do something cool\n",hostname);
    
    write(out,outBuf,strlen(outBuf));
    while(1)
    {
        bufCount = 0;
        while(1)
        {
            readCount = read(in,inData,COM_LEN);
            if (readCount < 0 )
            {
                if ( (bufCount + readCount) > BUF_LEN)
                {
                    fprintf(stderr,"buffer limit exceeded\n");
                    close(in);
                    exit(EXIT_FAILURE);
                }
                fprintf(stderr,"%sHave read in:\n",prefix);
                for(i=0; i<readCount; i++)
                {
                    fprintf(stderr,"%s%d\t%c\n",prefix,inData[i],inData[i]);
                }
                memcpy(&inBuf[bufCount], inData, readCount);
                bufCount=bufCount+readCount;
                if (inData[readCount - 1] == endOfData)
                {
                    break;
                }
            }
            else if (readCount == 0 )
            {
                fprintf(stderr,"\n%s Client has closed connection\n",prefix);
                close(in);
                exit(EXIT_FAILURE);
            }
            else
            {
                sprintf(prefix,"\tC %d: while reading from connection", getpid() );
                perror(prefix);
                close(in);
                exit(EXIT_FAILURE);
            }
        }
        inBuf[bufCount - 2] = '\0';
        if (inBuf[0] == 'X')
        {
            break;
        }
        revCount = serverProcessing(inBuf,revBuf);
        sprintf(outBuf," the server recieved %d characters, which when the string is processed"\
                "are:\n%s\n\n enter next string:",strlen(revBuf),revBuf);
        write(out,outBuf,strlen(outBuf));
    }
    fprintf(stderr,"\n%s client has closed the connection\n",prefix);
    close(in);
}

int serverProcessing(char* input, char* output)
{
    int i, len;
    char c;
    len=strlen(input);
    for(i=0;i<len;i++)
    {
        c=tolower(input[i]);
        if(c==input[i])
        {
            output[i]=toupper(input[i]);
        }
        else
        {
            output[i]=c;
        }
    }
    output[len]='\0';
    return len;
}

void handle_sigcld(int sig)
{
    pid_t cld;
    while ( 0 < waitpid(-1,NULL, WNOHANG) );

}
브루노

포트 번호는 네트워크 바이트 순서로 제공되어야하며 바이트 순서에 영향을받지 않도록 CPU에 해당 엔디안이 없을 수 있습니다.

server.sin_port = PORTNUMBER

으로

server.sin_port = htons(PORTNUMBER)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

iOS 단순 TCP 연결 예

분류에서Dev

TCP 서버로 들어오는 연결 거부

분류에서Dev

"> / dev / tcp / ip / port"에서 "연결이 거부 됨"줄을 제거하는 방법

분류에서Dev

외부 컴퓨터에서 TCP 서버에 연결할 수 없습니다.

분류에서Dev

Nexus 5X에서 TCP 연결이 거부되었습니다.

분류에서Dev

TCP 연결이 부족한 서비스

분류에서Dev

PHP 소켓 연결-Telnet이 연결을 거부했습니다.

분류에서Dev

여러 순차 클라이언트에서 서버에 대한 단일 영구 소켓 연결로의 tcp 소켓 전달

분류에서Dev

원격 서버에 TCP 연결

분류에서Dev

서버에 연결할 수 없습니다. 연결이 거부되었습니다. 서버가 "127.0.0.1"호스트에서 실행 중이고 포트 5432에서 TCP / IP 연결을 수락합니까?

분류에서Dev

telnet- "외부 호스트에 의해 연결이 닫힘"

분류에서Dev

Libuv-단일 연결에서 여러 TCP 요청

분류에서Dev

로컬 네트워크 외부에서 Chrome 앱 TCP 서버에 연결할 수 없습니다.

분류에서Dev

로컬 네트워크 외부에서 Chrome 앱 TCP 서버에 연결할 수 없습니다.

분류에서Dev

파이썬 TCP HolePunching에 대한 연결이 거부되었습니다.

분류에서Dev

JMeter 연결 Apache 서버가 거부 됨

분류에서Dev

JMeter 연결 Apache 서버가 거부 됨

분류에서Dev

SSH 및 Telnet 연결이 거부되었습니다.

분류에서Dev

SSH 및 Telnet 연결이 거부되었습니다.

분류에서Dev

ASIO Tcp 클라이언트 / 서버 개체 연결 문제 부스트

분류에서Dev

다중 TCP 연결 vs 단일 연결

분류에서Dev

iOS에서 TCP 서버에 연결하려는 SIGBART 오류

분류에서Dev

클라이언트 C #에서 여러 TCP 서버에 연결

분류에서Dev

C ++에서 주간 TCP 서버의 연결 오류

분류에서Dev

TCP 서버에서 끊어진 연결 확인

분류에서Dev

redis HMSEET에서 오류가 발생했습니다. tcp : 6379로 전화를 겁니다 : 연결 : 연결이 거부되었습니다.

분류에서Dev

서버 연결 거부에 텔넷 수 없습니다

분류에서Dev

서버 연결 거부에 텔넷 수 없습니다

분류에서Dev

연결 거부-Nginx에서 Python BaseHTTPServer로

Related 관련 기사

  1. 1

    iOS 단순 TCP 연결 예

  2. 2

    TCP 서버로 들어오는 연결 거부

  3. 3

    "> / dev / tcp / ip / port"에서 "연결이 거부 됨"줄을 제거하는 방법

  4. 4

    외부 컴퓨터에서 TCP 서버에 연결할 수 없습니다.

  5. 5

    Nexus 5X에서 TCP 연결이 거부되었습니다.

  6. 6

    TCP 연결이 부족한 서비스

  7. 7

    PHP 소켓 연결-Telnet이 연결을 거부했습니다.

  8. 8

    여러 순차 클라이언트에서 서버에 대한 단일 영구 소켓 연결로의 tcp 소켓 전달

  9. 9

    원격 서버에 TCP 연결

  10. 10

    서버에 연결할 수 없습니다. 연결이 거부되었습니다. 서버가 "127.0.0.1"호스트에서 실행 중이고 포트 5432에서 TCP / IP 연결을 수락합니까?

  11. 11

    telnet- "외부 호스트에 의해 연결이 닫힘"

  12. 12

    Libuv-단일 연결에서 여러 TCP 요청

  13. 13

    로컬 네트워크 외부에서 Chrome 앱 TCP 서버에 연결할 수 없습니다.

  14. 14

    로컬 네트워크 외부에서 Chrome 앱 TCP 서버에 연결할 수 없습니다.

  15. 15

    파이썬 TCP HolePunching에 대한 연결이 거부되었습니다.

  16. 16

    JMeter 연결 Apache 서버가 거부 됨

  17. 17

    JMeter 연결 Apache 서버가 거부 됨

  18. 18

    SSH 및 Telnet 연결이 거부되었습니다.

  19. 19

    SSH 및 Telnet 연결이 거부되었습니다.

  20. 20

    ASIO Tcp 클라이언트 / 서버 개체 연결 문제 부스트

  21. 21

    다중 TCP 연결 vs 단일 연결

  22. 22

    iOS에서 TCP 서버에 연결하려는 SIGBART 오류

  23. 23

    클라이언트 C #에서 여러 TCP 서버에 연결

  24. 24

    C ++에서 주간 TCP 서버의 연결 오류

  25. 25

    TCP 서버에서 끊어진 연결 확인

  26. 26

    redis HMSEET에서 오류가 발생했습니다. tcp : 6379로 전화를 겁니다 : 연결 : 연결이 거부되었습니다.

  27. 27

    서버 연결 거부에 텔넷 수 없습니다

  28. 28

    서버 연결 거부에 텔넷 수 없습니다

  29. 29

    연결 거부-Nginx에서 Python BaseHTTPServer로

뜨겁다태그

보관