도커(docker)를 이용하여 nc 서버 구축하는법

2021-03-01

Table Of Contents

도커(docker)를 이용하여 nc 서버 구축하는법

  • 도커(docker)란?

    도커(docker)는 어플리케이션을 쉽게 구축하고 테스트등의 다양한 기능을 사용할 수 있는 플랫폼입니다.

    쉽게 말해서 도커로 한 운영체제안에 여러개의 운영체제를 쉽게 구축하고 배포할 수 있습니다.

    docker 설치하는법(아직 작성중)


  • 도커파일 빌드

    • 도커파일이란?

      도커파일을 작성한 다음 빌드하게되면 도커 파일안에 있었던 설정대로 이미지가 만들어지게 됩니다.

      작성된 도커파일을 빌드하면 Dockerfile에 작성된 명령어들을 한줄씩 실행하는것을 실시간으로 볼 수 있습니다.

    • nc 서버를 구축하기 위한 도커파일 작성

      파일 이름 설명
      Dockerfile Dockerfile를 이용하여 앱의 환경을 정의합니다.
      docker-compose.yml 격리 된 환경에서 함께 실행할 수 있도록 앱을 구성하는 서비스를 정의 합니다.

      도커파일 명령어는 공식 문서를 참고하면 됩니다.

      • Dockerfile

          FROM ubuntu:16.04
        
          RUN apt-get update
          RUN apt-get upgrade -y
          RUN apt-get install -y xinetd
          ENV TERM=linux
        
          RUN useradd -m attack
          WORKDIR /home/attack
        
          ADD nctest /home/attack
          ADD attack /etc/xinetd.d
        
          RUN chmod 460 /home/attack/*
          RUN chown attack:root /home/attack/*
          RUN chmod +x /home/attack/nctest
        
          RUN echo "attack 10001/tcp" >> /etc/services
        
          CMD ["/usr/sbin/xinetd","-dontfork"]
        
      • docker-compose.yml

          version: '2.2'
        
          services:
                  nctest:
                          build: ./
                          ports:
                                  - "10001:10001"
        
      • attack

          service attack
          {
             disable      = no
             flags      = REUSE
             socket_type   = stream
             protocol   = tcp
             user      = attack
             wait      = no
             server      = /home/attack/nctest
          }
        
      • nctest

          #include <stdio.h>
        
          void init(){
              setvbuf(stdin, (char *)NULL, _IONBF, 0);
              setvbuf(stdout, (char *)NULL, _IONBF, 0);
              setvbuf(stderr, (char *)NULL, _IONBF, 0);
          }
        
          int main(){
              init();
              printf("Hello Guest\n");
              printf("nc Server Test\n");
          }
        

        nc 서버 실행할때 사용되는 프로그램을 c언어로 작성한 다음 밑의 명령어를 실행하면 된다.

          root@root:~$ gcc -o nctest nctest.c
        

      Dockerfile, docker-compose.yml, attack, nctest 총 4개의 파일을 만든 다음

        docker-compose up -d
      

      명령어를 실행하면 정상적으로 도커가 빌드될시에

      docker-compose-up-d

      이와 비슷한 구조로 돌아가고있다고 보면 된다.

      이제 nc 0.0.0.0 10001 으로 접속하면 성공적으로 결과가 나오게된다.

        root@ip-10-0-2-102:/home/ubuntu/nctest# nc 0.0.0.0 10001
        Hello Guest
        nc Server Test
      

nc 서버 연결 안됨

만약 위와 비슷하게 도커(docker)를 이용하여 nc 서버를 만들었는데 연결이 안되는 경우는 대표적으로

  1. /etc/services에 서비스 이름과 port를 추가하지 않은 경우
  2. /etc/xinetd.d/ 에 적어놓은 서비스 이름과 /etc/services에 적은 서비스 이름이 다를 경우
  3. /etc/xinetd.d/ 에 잘못된 실행파일 경로를 넣은 경우

크게 3가지로 꼽히지만 구축하는 환경이 어떻게 되어있냐에 따라 달라질것같다.

마무리

만약 구축에 어려움이 있다면 미리 적어놓은 파일 다운로드한 다음 위에서 입력한 명령어들과 동일하게 실행하면 된다.

도커 컨테이너 각티슈 케이스

도커 컨테이너 모양의 각티슈 케이스를 이번에 좋은 기회로 얻게 되었습니다.

솔직히 각티슈 케이스에는 별 신경을 안썻는데 이런 템도 있다는게 좀 신기해서 써보고 있는데

같이 전공 하시는 분들은 이쁘다고 좋아하시는 반응입니다 ㅋㅋ

https://incatos.shop/surl/P/11

해당 링크에 들어가, 구매가 가능하고 만약 도커에 관심이 있으신 분들이라면 계속 두고두고 써먹을 수 있으니 한번 추천 드립니다 :)

docekr image1

docker image2