Netcat을 사용하여 TCP 및 UDP 접속 구성 및 테스트 방법

Netcat을 사용하여 TCP 및 UDP 접속 구성 및 테스트 방법

2022-06-01 last update

11 minutes reading Linux Basics System Tools Networking

소개


모두가 알다시피 Linux는 대부분의 발행판에서 이미 만들어진 성숙하고 유용한 명령행 유틸리티를 대량으로 가지고 있다.일반적으로 시스템 관리자는 다른 소프트웨어를 설치하지 않고 내장 도구를 사용하여 대부분의 작업을 완성할 수 있다.
이 안내서에서, 우리는 넷캣 실용 프로그램을 어떻게 사용하는지 토론할 것이다.이 다기능 명령은 네트워크 연결을 통해 데이터를 감시하고 테스트하며 발송하는 데 도움을 줄 수 있습니다.
Netcat은 거의 모든 현대 Linux 버전에서 사용할 수 있을 것이다.Ubuntu는 netcat의 BSD 변체를 첨부했습니다. 이것이 바로 우리가 이 안내서에 사용할 내용입니다.다른 버전은 다른 조작이 있거나 다른 옵션을 제공할 수 있습니다.

일반 문법


기본적으로 넷캣은 원격 호스트에 대한 TCP 연결을 시작하여 실행됩니다.
가장 기본적인 문법은 다음과 같다.
  1. netcat [options] host port
그러면 정의된 호스트에 대한 TCP 접속이 지정된 포트 번호로 시작됩니다.이것은 이전 Linuxtelnet 명령의 기능과 유사합니다.연결이 완전히 암호화되지 않았다는 것을 기억하십시오.
UDP 패킷을 TCP 연결을 시작하지 않고 보내려면 -u 옵션을 사용합니다.
  1. netcat -u host port
첫 번째 포트와 마지막 포트 사이에 대시를 배치하여 포트 범위를 지정할 수 있습니다.
  1. netcat host startport-endport
이것은 통상적으로 일부 추가 표지와 함께 사용된다.
대부분의 시스템에서 우리는 교환해서 사용할 수 있다netcat 또는nc.그것들은 같은 명령의 별명이다.

Netcat을 사용하여 포트 검색 방법


netcat에서 가장 흔히 볼 수 있는 용도 중 하나는 포트 스캐너로 사용하는 것이다.
비록 넷캣은 가장 복잡한 작업 도구가 아닐 수도 있지만, (대부분의 경우 nmap이 더 좋은 선택) 간단한 포트 스캐닝을 통해 열려 있는 포트를 쉽게 식별할 수 있다.
위에서 설명한 바와 같이, 우리는 연결을 시작하려고 하지 않고 스캔할 포트 범위와 -z 옵션을 지정해서 스캔을 실행합니다.
예를 들어, 다음 명령을 실행하면 최대 1000개의 포트를 검색할 수 있습니다.
  1. netcat -z -v domain.com 1-1000
-z 옵션 외에 넷캣에 더 자세한 정보를 제공하기 위해 -v 옵션을 지정했습니다.
출력은 다음과 같습니다.
Output
nc: connect to domain.com port 1 (tcp) failed: Connection refused nc: connect to domain.com port 2 (tcp) failed: Connection refused nc: connect to domain.com port 3 (tcp) failed: Connection refused nc: connect to domain.com port 4 (tcp) failed: Connection refused nc: connect to domain.com port 5 (tcp) failed: Connection refused nc: connect to domain.com port 6 (tcp) failed: Connection refused nc: connect to domain.com port 7 (tcp) failed: Connection refused . . . Connection to domain.com 22 port [tcp/ssh] succeeded! . . .
보시다시피 이것은 대량의 정보를 제공하고 각 포트의 스캔이 성공했는지 알려 줍니다.
도메인 이름을 실제로 사용하는 경우 이 양식을 사용해야 합니다.
그러나 필요한 IP 주소를 알고 있으면 검색 속도가 훨씬 빨라집니다.그런 다음-n 플래그를 사용하여 DNS를 사용하여 IP 주소를 확인할 필요가 없음을 지정할 수 있습니다.
  1. netcat -z -n -v 198.51.100.0 1-1000
반환된 메시지는 실제로 표준 오류로 전송됩니다 (자세한 내용은 저희 I/O redirection article 를 참조하십시오.표준 오류 메시지를standardout에 보낼 수 있습니다. 이것은 결과를 더욱 쉽게 필터할 수 있습니다.
우리는 2>&1bash 문법을 사용하여 표준 오류를 표준 출력으로 다시 정할 것입니다.그런 다음 grep 필터링 결과를 사용합니다.
  1. netcat -z -n -v 198.51.100.0 1-1000 2>&1 | grep succeeded
Output
Connection to 198.51.100.0 22 port [tcp/*] succeeded!
여기서 볼 수 있듯이 원격 컴퓨터에서 유일하게 열려 있는 1 – 1000 범위의 포트는 포트 22입니다. 이것은 전통적인 SSH 포트입니다.

Netcat을 통한 통신 방법


Netcat은 TCP 및 UDP 패킷을 전송하는 데 국한되지 않습니다.그것은 또한 포트의 연결과 데이터 패키지를 정탐할 수 있다.이것은 우리로 하여금 클라이언트-서버 관계로 넷캣을 연결할 수 있는 두 가지 실례를 가지게 한다.
어떤 컴퓨터가 서버이고, 어떤 컴퓨터가 클라이언트인지는 초기 설정 기간의 차이일 뿐이다.연결을 설정한 후 두 방향의 통신은 완전히 같다.
한 기계에서 넷캣에게 특정 포트의 연결을 탐지할 수 있습니다.우리는 -l 파라미터를 제공하고 포트를 선택하여 이 점을 실현할 수 있다.
  1. netcat -l 4444
이것은 넷캣 탐지 포트 4444의 TCP 연결을 알려 줍니다.일반 (비root) 사용자로서, 보안 조치로 1000 이하의 포트를 열 수 없습니다.
두 번째 서버에서 우리는 선택한 포트 번호를 통해 첫 번째 기계에 연결할 수 있다.우리의 방식은 이전에 연락한 방식과 같다.
  1. netcat domain.com 4444
보아하니 아무 일도 없었던 것 같다.그러나, 지금은 연결된 모든 쪽에서 메시지를 보낼 수 있고, 모든 쪽에서 메시지를 볼 수 있습니다.
정보를 입력하고 ENTER 를 누릅니다.로컬 및 원격 화면에 나타납니다.이것은 반대 방향으로도 작용한다.
메시징이 완료되면 CTRL-D 키를 눌러 TCP 연결을 닫을 수 있습니다.

Netcat을 통해 파일 전송 방법


앞의 예시를 토대로 우리는 더욱 유용한 임무를 완성할 수 있다.
일반적인 TCP 연결을 구축하고 있기 때문에 이 연결을 통해 거의 모든 종류의 정보를 전송할 수 있습니다.그것은 사용자가 입력한 채팅 정보에만 국한된 것이 아니다.우리는 이 지식을 이용하여 넷캣을 파일 전송 프로그램으로 변환할 수 있다.
마찬가지로, 우리는 연결의 한쪽 끝을 선택해서 연결을 정탐해야 한다.그러나 이전 예제의 경우와 달리 화면에 출력하지 않고 모든 정보를 파일에 직접 넣습니다.
  1. netcat -l 4444 > received_file
이 명령의 >netcat 의 모든 출력을 지정된 파일 이름으로 다시 지정합니다.
두 번째 컴퓨터에서 다음 내용을 입력하여 간단한 텍스트 파일을 만듭니다.
  1. echo "Hello, this is a file" > original_file
현재, 우리는 이 파일을 탐지 컴퓨터에 연결할 넷캣 연결의 입력으로 사용할 수 있습니다.대화식으로 입력하는 것처럼 파일이 전송됩니다.
  1. netcat domain.com 4444 < original_file
연결을 기다리는 컴퓨터에서 현재 received_file 라는 새 파일이 있습니다. 여기에는 다른 컴퓨터에 입력한 파일 내용이 포함되어 있습니다.
  1. cat received_file
Output
Hello, this is a file
보시다시피 파이프를 통해 우리는 이런 연결을 쉽게 이용하여 각종 물건을 전송할 수 있습니다.
예를 들어 우리는 동적으로 이름 없는 tarball을 만들어서 전체 디렉터리의 내용을 원격 시스템으로 전송하고 원격 디렉터리로 압축할 수 있다.
수신기에서 다음 내용을 입력하여 압축을 풀고 추출해야 하는 파일이 나타날 것으로 예상할 수 있습니다.
  1. netcat -l 4444 | tar xzvf -
끝 대시 (-) 는 tar가 표준 입력에서 실행되고 연결이 설정될 때 표준 입력은 파이프를 통해 넷캣에서 네트워크를 통해 전송됩니다.
전송할 디렉터리의 내용을 tarball로 묶어서 넷캣을 통해 원격 컴퓨터로 보낼 수 있습니다.
  1. tar -czf - * | netcat domain.com 4444
이번 tar 명령의 대시 번호는 현재 디렉터리의 내용을 tar와 zip로 압축하고 (* 어댑터로 지정) 결과를 표준 출력에 쓰는 것을 의미합니다.
그런 다음 TCP 연결에 직접 쓰고 다른 쪽에서 수신하여 원격 컴퓨터의 현재 디렉터리로 압축을 해제합니다.
이것은 단지 더욱 복잡한 데이터를 한 컴퓨터에서 다른 컴퓨터로 전송하는 예일 뿐이다.또 다른 흔한 생각은 dd 명령을 사용하여 디스크를 한쪽으로 미러링하고 원격 컴퓨터로 전송하는 것이다.그러나 우리는 여기서 이 문제를 토론하지 않을 것이다.

Netcat을 간단한 웹 서버로 사용하는 방법


우리는 파일을 통신하고 전송하기 위해 넷캣을 정청 연결로 설정했습니다.우리는 같은 개념으로 넷캣을 매우 간단한 웹 서버로 조작할 수 있다.이것은 당신이 만들고 있는 페이지를 테스트하는 데 매우 유용합니다.
먼저 서버에 간단한 HTML 파일을 만듭니다.
  1. nano index.html
다음은 파일에서 사용할 수 있는 간단한 HTML입니다.
지수html
<html>
        <head>
                <title>Test Page</title>
        </head>
        <body>
                <h1>Level 1 header</h1>
                <h2>Subheading</h2>
                <p>Normal text here</p>
        </body>
</html>
파일을 저장하고 닫습니다.
루트 권한이 없으면 기본 웹 포트 80에서 이 파일을 제공할 수 없습니다.일반 사용자는 8888 포트를 선택할 수 있습니다.
이 페이지의 표시 방식을 확인하기 위해 한 번만 서비스를 제공하려면 다음 명령을 실행할 수 있습니다.
  1. printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888
이제 브라우저에서 다음을 액세스할 수 있습니다.
http://server_IP:8888

이것은 페이지에 서비스를 제공하고 넷캣 연결이 닫힙니다.페이지를 새로 고치려고 하면 다음과 같이 사라집니다.
netcat page gone
마지막 명령을 무한 순환에 포장함으로써 넷캣은 다음과 같이 웹 페이지에 무제한으로 서비스를 제공할 수 있습니다.
  1. while true; do printf 'HTTP/1.1 200 OK\n\n%s' "$(cat index.html)" | netcat -l 8888; done
첫 번째 연결이 닫힌 후에도 연결을 계속 받을 수 있도록 합니다.
서버에 CTRL-C 를 입력하여 순환을 중지할 수 있습니다.
이것은 브라우저에서 페이지를 보여주는 방식을 볼 수 있지만, 더 많은 기능을 제공하지 않습니다.당신은 그것을 실제 사이트 서비스에 사용해서는 안 됩니다.안전성이 없고, 링크와 같은 간단한 물건은 심지어 정상적으로 작동할 수 없다.

결론


당신은 지금 넷캣의 용도에 대해 잘 알고 있을 것입니다.이 도구는 TCP/UDP 연결에서 기본 수준의 기능이 제대로 작동하는지 여부를 진단하고 검증하는 다기능 도구입니다.
넷캣을 사용하면 서로 다른 컴퓨터 간에 쉽게 통신하여 빠른 상호작용을 실현할 수 있습니다.Netcat은 연결의 복잡성을 없애고 컴퓨터 간의 네트워크 상호작용을 투명하게 하려고 한다.