Linux 네트워킹 유틸리티

LinuxBeginner
지금 연습하기

소개

Linux 는 시스템 관리자와 사용자가 네트워크 통신을 관리하고, 연결 문제를 해결하며, 시스템 간에 데이터를 전송할 수 있도록 다양한 강력한 네트워킹 유틸리티를 제공합니다. 이러한 도구들은 Linux 환경에서 네트워크 관리를 위한 기반을 형성합니다.

이 랩에서는 네트워킹 도구의 "스위스 아미 나이프"라고 불리는 nc (netcat) 유틸리티를 탐구할 것입니다. 시스템 간의 연결을 설정하고, 데이터를 전송하며, 모든 Linux 사용자 또는 관리자에게 필수적인 기본적인 네트워크 통신 기술을 활용하는 방법을 배우게 됩니다.

Netcat (nc) 기본 이해

이 단계에서는 Linux 에서 가장 다재다능한 네트워킹 도구 중 하나인 netcat (nc) 유틸리티에 대해 배우게 됩니다. Netcat 을 사용하면 TCP 또는 UDP 프로토콜을 사용하여 네트워크 연결에서 읽고 쓸 수 있으므로 포트 스캔, 파일 전송, 간단한 클라이언트 - 서버 애플리케이션 생성과 같은 다양한 작업에 유용합니다.

먼저, 올바른 작업 디렉토리에 있는지 확인해 보겠습니다.

cd ~/project

netcat 이 시스템에 설치되어 있는지 확인해 보겠습니다.

which nc

다음과 유사한 출력을 볼 수 있습니다.

/usr/bin/nc

이제 netcat 의 도움말 정보를 보면서 netcat 의 기본 사용법을 살펴보겠습니다.

nc -h

이 명령은 netcat 유틸리티에서 사용할 수 있는 다양한 옵션을 표시합니다. 명령줄 플래그와 해당 설명을 볼 수 있습니다. netcat 의 기능을 전반적으로 이해하기 위해 잠시 시간을 내어 이러한 옵션을 검토하십시오.

netcat 의 가장 일반적인 사용 사례 중 하나는 간단한 클라이언트 - 서버 연결을 만드는 것입니다. 서버는 들어오는 연결을 위해 특정 포트를 수신하고, 클라이언트는 통신을 설정하기 위해 해당 서버에 연결합니다.

간단한 예시부터 시작해 보겠습니다. 먼저, 터미널 패널에서 "+" 아이콘을 클릭하여 새 터미널을 엽니다. 이 연습에는 두 개의 터미널이 필요합니다. 하나는 서버용이고 다른 하나는 클라이언트용입니다.

첫 번째 터미널에서 포트 8888 을 수신하는 netcat 서버를 설정합니다.

nc -l 8888

-l 플래그는 netcat 에게 지정된 포트 (이 경우 8888) 에서 들어오는 연결을 수신하도록 지시합니다. 터미널이 멈춘 것처럼 보이지만 이는 정상입니다. 연결을 기다리고 있는 것입니다.

이제 두 번째 터미널로 전환하여 클라이언트로 서버에 연결합니다.

nc localhost 8888

이 명령은 로컬 머신 (localhost) 에서 포트 8888에서 실행 중인 netcat 서버에 연결을 설정합니다.

연결되면 어느 터미널에서든 메시지를 입력할 수 있으며, Enter 키를 누르면 다른 터미널에 표시됩니다. 이는 기본적인 양방향 통신 채널을 보여줍니다. 클라이언트 터미널에 "Hello from the client!"를 입력하고 Enter 키를 누릅니다. 서버 터미널에 메시지가 표시되는 것을 볼 수 있습니다.

마찬가지로, 서버 터미널에 "Hello from the server!"를 입력하고 Enter 키를 누릅니다. 메시지가 클라이언트 터미널에 표시되어야 합니다.

이 간단한 예제는 netcat 을 사용하여 두 개의 엔드포인트 간에 기본적인 통신 채널을 만드는 방법을 보여줍니다. 연결을 종료하려면 어느 터미널에서든 Ctrl+C를 누릅니다.

Netcat 을 이용한 파일 전송

netcat 의 강력한 기능 중 하나는 시스템 간에 파일을 전송하는 능력입니다. 이 단계에서는 netcat 을 사용하여 한 시스템에서 다른 시스템으로 파일을 전송하는 방법을 배우게 됩니다.

먼저, 전송할 텍스트 파일을 만들어 보겠습니다. 첫 번째 터미널에서 (Ctrl+C를 눌러 이전 netcat 세션을 닫았는지 확인하십시오) sample.txt라는 파일을 만듭니다.

echo "This is a sample file that will be transferred using netcat." > ~/project/sample.txt

파일이 올바르게 생성되었는지 확인해 보겠습니다.

cat ~/project/sample.txt

다음 내용을 볼 수 있습니다.

This is a sample file that will be transferred using netcat.

이제 netcat 을 사용하여 이 파일을 전송해 보겠습니다. 두 번째 터미널에서 수신자 (서버) 를 설정합니다.

cd ~/project
nc -l 9999 > received_file.txt

이 명령은 netcat 에게 포트 9999 를 수신하고 수신된 모든 데이터를 received_file.txt라는 파일로 리디렉션하도록 지시합니다.

첫 번째 터미널에서 파일을 보냅니다.

cd ~/project
cat sample.txt | nc localhost 9999

이 명령은 sample.txt의 내용을 읽어 netcat 으로 파이프하고, netcat 은 이를 포트 9999 에서 수신하는 서버로 보냅니다.

전송이 완료되면 더 이상 보낼 데이터가 없으므로 연결이 자동으로 닫힙니다. 두 번째 터미널의 netcat 서버도 종료됩니다.

이제 파일이 올바르게 전송되었는지 확인해 보겠습니다. 두 번째 터미널에서 수신된 파일의 내용을 표시합니다.

cat ~/project/received_file.txt

원본 파일과 동일한 내용을 볼 수 있습니다.

This is a sample file that will be transferred using netcat.

이는 netcat 을 사용하여 시스템 간에 간단한 파일 전송을 수행하는 방법을 보여줍니다. 실제 시나리오에서는 이 기술을 사용하여 동일한 시스템의 다른 터미널 간뿐만 아니라 네트워크의 다른 컴퓨터 간에 파일을 전송할 수 있습니다.

Netcat 으로 간단한 채팅 서버 만들기

이 단계에서는 추가 옵션을 사용하여 netcat 으로 더 강력한 채팅 서버를 만드는 방법을 배우게 됩니다. 이 예제는 netcat 을 더 지속적인 연결에 사용하는 방법을 보여줍니다.

먼저, 유용한 몇 가지 추가 netcat 옵션을 이해해 보겠습니다.

  • -k: 이 옵션을 사용하면 클라이언트가 연결을 끊은 후에도 서버가 계속 수신 대기하여 시간이 지남에 따라 여러 연결을 사용할 수 있습니다.
  • -v: 자세한 출력을 활성화하여 연결에 대한 더 많은 정보를 제공합니다.

클라이언트가 연결을 끊은 후에도 계속 실행되는 채팅 서버를 만들어 보겠습니다. 첫 번째 터미널에서:

cd ~/project
nc -l -k -v 7777

netcat 이 수신 대기 중임을 나타내는 출력을 볼 수 있습니다.

Listening on 0.0.0.0 7777

이 서버는 클라이언트가 연결을 끊은 후에도 계속 실행되고 새 연결을 수락합니다.

이제 두 번째 터미널에서 이 서버에 연결합니다.

cd ~/project
nc localhost 7777

첫 번째 터미널에서 다음과 유사한 새 연결을 나타내는 메시지를 볼 수 있습니다.

Connection from 127.0.0.1 port 7777 [tcp/*] accepted

이제 이전과 마찬가지로 터미널 간에 메시지를 교환할 수 있습니다. 한 터미널에 메시지를 입력하고 Enter 키를 눌러 다른 터미널로 보냅니다.

서버의 지속성을 테스트하려면 두 번째 터미널에서 Ctrl+C를 눌러 클라이언트의 연결을 끊습니다. 그런 다음 동일한 명령을 사용하여 다시 연결합니다.

nc localhost 7777

다시 연결하여 채팅을 계속할 수 있으며, 이는 서버가 클라이언트 연결 간에 활성 상태를 유지함을 보여줍니다.

채팅 대화 내용을 로그로 저장하려면 서버 명령을 수정하여 모든 들어오는 메시지를 파일에 저장할 수 있습니다. Ctrl+C를 눌러 현재 서버를 중지한 다음 출력 리디렉션을 사용하여 새 서버를 시작합니다.

cd ~/project
nc -l -k -v 7777 | tee chat_log.txt

이 명령은 tee 유틸리티를 사용하여 들어오는 메시지를 화면에 표시하고 chat_log.txt 파일에 저장합니다.

두 번째 터미널에서 다시 연결하고 몇 개의 메시지를 보냅니다. 몇 개의 메시지를 교환한 후 클라이언트의 연결을 끊고 (두 번째 터미널에서 Ctrl+C 누르기) 채팅 로그 파일을 확인합니다.

cat ~/project/chat_log.txt

클라이언트 터미널에서 보낸 메시지를 볼 수 있습니다.

서버를 중지하려면 첫 번째 터미널에서 Ctrl+C를 누릅니다.

이 단계에서는 netcat 을 사용하여 더 강력한 채팅 서버를 만들고 통신을 로깅하는 방법을 보여주었습니다. 이는 기록 보관 또는 디버깅 목적으로 유용할 수 있습니다.

요약

이 랩에서는 Linux 환경에서 필수적인 네트워킹 도구인 강력한 netcat (nc) 유틸리티를 탐구했습니다. 다음은 학습한 내용의 요약입니다.

  1. 간단한 통신을 위한 클라이언트 - 서버 연결을 생성하는 netcat 의 기본 사용법
  2. netcat 을 사용하여 시스템 간에 파일 전송
  3. 로깅 기능을 갖춘 지속적인 채팅 서버 생성

이러한 기술은 다음과 같은 보다 고급 네트워킹 작업의 기반을 제공합니다.

  • 네트워크 문제 해결
  • 포트 스캔
  • 간단한 네트워크 서비스 생성
  • 시스템 간의 안전한 데이터 전송

Netcat 의 다재다능함은 시스템 관리자, 네트워크 엔지니어 및 보안 전문가에게 매우 유용한 도구입니다. 이 랩에서 배운 기술은 네트워크 통신 및 데이터 전송이 필요한 다양한 실제 시나리오에 적용할 수 있습니다.

Linux 여정을 계속 진행하면서 네트워킹 툴킷을 확장하기 위해 ssh, curl, wget, tcpdump와 같은 다른 네트워킹 유틸리티를 탐색해 보십시오.