어플리케이션

Netcat에 대해 알아보겠습니다.

forward error correction Circle 2024. 8. 28. 08:05
반응형

Ⅰ. Netcat 이란?

Netcat(일반적으로 nc로 줄여서 사용)은 네트워크 유틸리티로, TCP 및 UDP 프로토콜을 사용하여 네트워크 연결을 읽고 쓰는 데 사용됩니다. Netcat은 매우 유연하고 강력한 도구로, 네트워크 디버깅, 파일 전송, 포트 스캐닝, 원격 제어 등 다양한 용도로 사용될 수 있습니다.

 

대부분의 리눅스 배포판에서 기본적으로 설치되지 않습니다. 그러나 패키지 관리자를 통해 쉽게 설치할 수 있습니다. Netcat에는 여러 가지 변형이 있으며, 가장 일반적으로 사용되는 두 가지 변형은 netcat-traditional과 netcat-openbsd입니다.

Ⅱ. Netcat 설치 방법

ⅰ. Debian/Ubuntu 계열

Debian 및 Ubuntu 계열의 리눅스 배포판에서는 apt 패키지 관리자를 사용하여 Netcat을 설치할 수 있습니다.

1) netcat-openbsd 설치
sudo apt update
sudo apt install netcat-openbsd

2) netcat-traditional 설치
sudo apt update
sudo apt install netcat-traditional


ⅱ. Red Hat/CentOS 계열

Red Hat 및 CentOS 계열의 리눅스 배포판에서는 yum 또는 dnf 패키지 관리자를 사용하여 Netcat을 설치할 수 있습니다.

1) netcat 설치
yum install nc or sudo dnf install nc

2) Arch Linux
Arch Linux에서는 pacman 패키지 관리자를 사용하여 Netcat을 설치할 수 있습니다.

netcat 설치
sudo pacman -S openbsd-netcat


ⅲ. 설치 확인
Netcat이 제대로 설치되었는지 확인하려면 다음 명령어를 사용할 수 있습니다:

[root@feccle] # nc -h


Netcat의 도움말 메시지가 출력되면, Netcat이 성공적으로 설치된 것입니다.

Ⅲ. Netcat 주요 옵션

옵션명 옵션에 대한 설명 예제 예제에 대한 설명
-l 서버 모드로 실행하여 들어오는 연결을 기다립니다. 이 옵션을 사용하면 nc가 클라이언트 요청을 수신하는 역할을 하게 됩니다. nc -l -p 12345 12345 포트에서 연결 대기
-p [포트] 특정 포트 번호를 지정합니다. 서버 모드에서는 이 포트에서 대기하고, 클라이언트 모드에서는 이 포트를 사용해 연결을 시도합니다. nc -l -p 8080 8080 포트에서 대기
-v 연결 과정에서 더 자세한 정보를 출력합니다. 디버깅을 위해 유용합니다. 한 번 사용하면 "적당한" 정보가 나오고, 두 번 사용하면 (-vv) 더욱 자세한 정보가 나옵니다. nc -v example.com 80 example.com의 80 포트로 연결 시도 시 자세한 정보 출력
-w [시간] 연결 또는 전송 시도에 대한 타임아웃 시간을 초 단위로 설정합니다. 기본적으로는 무한정 대기할 수 있으므로, 이를 제한하기 위해 사용합니다. nc -w 5 example.com 80 5초 동안 응답을 기다림
-n DNS 해석을 하지 않고 IP 주소만 사용하도록 합니다. 이는 DNS 조회 시간을 절약하는 데 유용합니다. nc -n 192.168.0.1 80 DNS 해석 없이 192.168.0.1의 80 포트로 연결
-u UDP 모드를 활성화합니다. 기본적으로 Netcat은 TCP를 사용하지만, 이 옵션을 사용하면 UDP 프로토콜을 사용합니다. nc -u example.com 12345 UDP로 example.com의 12345 포트에 연결
-z 연결 확인만 하고 데이터를 전송하지 않습니다. 주로 포트 스캐닝에 사용됩니다. nc -zv example.com 80 example.com의 80 포트가 열려있는지 확인
-e [프로그램] 연결된 클라이언트와의 연결을 통해 특정 프로그램을 실행하고 그 입력/출력을 리디렉션합니다. 이 옵션은 보안상 위험할 수 있으므로 신중히 사용해야 합니다. nc -l -p 12345 -e /bin/bash 연결이 이루어지면 /bin/bash 셸을 실행
-k 한 번 연결이 종료되더라도 계속해서 새로운 연결을 대기합니다. 서버 모드에서 지속적으로 연결을 유지하려고 할 때 사용합니다. nc -l -p 12345 -k 12345 포트에서 여러 연결을 대기
-c 스크립트를 사용하여 Netcat의 입력과 출력을 처리합니다. 이 옵션은 운영체제에 따라 지원되지 않을 수 있습니다. nc -l -p 12345 -c 'echo "Hello, world!"' 연결이 수립되면 "Hello, world!"를 출력

Ⅳ. Netcat  사용 예제

주로 간단한 서버 테스트나 네트워크 연결을 확인할 때 사용되며, 다양한 네트워크 작업에 사용할 수 있습니다.

 

ⅰ. 특정 포트(이 경우 12345)에서 연결을 대기하는 서버를 설정

[root@feccle] # nc -l -p 12345


그리고 클라이언트 측에서는 다음 명령어를 사용하여 특정 호스트와 포트에 연결할 수 있습니다.

[root@feccle] # nc 192.168.1.10 12345


ⅱ. 파일 전송
다른 컴퓨터에서 파일을 전송하거나 간단한 텍스트 데이터를 전송할 때 사용할 수 있습니다.

 

서버측

[root@feccle] # nc -l -p 12345 > received_file.txt

 

클라이언트 측

[root@feccle] # nc [서버 IP] 12345 < send_file.txt


ⅲ. 포트 스캐닝
Netcat을 사용하여 특정 호스트의 포트를 스캔할 수 있습니다.

[root@feccle] # nc -zv 192.168.1.10 20-30


위 명령어는 IP 주소 192.168.1.10의 포트 20부터 30까지를 스캔합니다. -z 옵션은 연결을 시도하지 않고 포트가 열려 있는지 확인하며, -v 옵션은 자세한 출력을 제공합니다.

ⅳ. 원격 쉘
Netcat을 사용하여 원격 쉘을 열 수 있습니다.

서버 측 (원격 쉘 수신)

[root@feccle] # nc -l -p 12345 -e /bin/bash


위 명령어는 포트 12345에서 연결을 대기하며, 연결이 수립되면 /bin/bash 쉘을 실행합니다.

클라이언트 측 (원격 쉘 연결)

[root@feccle] # nc -l -p 12345 -e /bin/bash


ⅴ. 리버스 쉘
리버스 쉘은 클라이언트가 서버로 연결을 시도하여 쉘을 제공하는 방식입니다.

서버 측 (리버스 쉘 수신)

[root@feccle] # nc -l -p 12345


클라이언트 측 (리버스 쉘 연결)

[root@feccle] # /bin/bash | nc 192.168.1.10 12345

 

원격 쉘이나 리버스 쉘을 사용할 때는 보안에 유의해야 합니다.

반응형