Linux의 Bash에서 소켓에서 데이터를 읽는 방법

0
408

광케이블을 통해 흐르는 바이너리 코드.
XYZ/Shutterstock.com

Linux 명령줄을 사용하면 소켓에서 수신 대기하거나 소켓에 연결하여 데이터를 검색할 수 있습니다. 데이터는 텍스트 파일로 캡처할 수 있습니다. 우리는 방법을 보여줍니다.

소켓 클라이언트 및 서버

소켓을 사용하면 네트워크로 연결된 소프트웨어가 통신할 수 있습니다. 그들은 1983년 버클리 캘리포니아 대학교에서 만든 4.2BSD Unix 운영 체제에서 처음 구현되었습니다. System V Unix와 Microsoft Windows에 빠르게 채택되었습니다.

Linux에서 "모든 것이 파일입니다"는 무엇을 의미합니까?

관련된Linux에서 “모든 것이 파일입니다”는 무엇을 의미합니까?

소켓은 파일 핸들로 처리될 수 있도록 추상화된 소프트웨어 네트워크 연결의 끝점입니다. 이는 “모든 것이 파일이다”라는 일반적인 Unix 및 Linux 설계 원칙에 부합한다는 의미입니다. 네트워크 케이블을 꽂는 벽면의 물리적 소켓을 의미하지 않습니다.

프로그램이 다른 소프트웨어의 소켓에 연결되면 고객 다른 소프트웨어의. 다른 소프트웨어가 연결을 요청할 수 있도록 하는 소프트웨어를 섬기는 사람. 이 용어는 IT 세계에서 클라이언트 및 서버의 다른 용도와 독립적으로 사용됩니다. 혼동을 피하기 위해 때때로 호출됩니다. 소켓 클라이언트 그리고 소켓 서버 모호성을 제거하기 위해. 우리는 그들을 클라이언트와 서버라고 부를 것입니다.

소켓은 API(응용 프로그래밍 인터페이스)로 구현되어 소프트웨어 개발자가 코드 내에서 소켓 기능을 호출할 수 있도록 합니다. 프로그래머라면 괜찮지만 그렇지 않다면 어떻게 될까요? 아니면 그럴 수도 있지만 사용 사례가 애플리케이션 작성을 보증하지 않습니까? Linux는 필요에 따라 기본 소켓 서버 및 소켓 클라이언트를 사용하여 다른 소켓 지원 프로세스에서 데이터를 검색하거나 수신할 수 있도록 하는 명령줄 도구를 제공합니다.

관련된: API란 무엇이며 개발자는 API를 어떻게 사용합니까?

관계는 결코 쉽지 않다

우리가 사용할 프로그램은 nc 그리고 ncat. 이 두 유틸리티는 이상한 관계를 가지고 있습니다. 그만큼 nc 프로그램은 의 재작성입니다 ncat보다 훨씬 오래된 nc . 하지만 ncat 다시 작성되었으며 이제 몇 가지 작업을 수행할 수 있습니다. nc 캔트. 그리고 많은 구현이 있습니다 ncat그 자체는 이라는 도구의 파생물입니다. netcat. 게다가 대부분의 배포판에서 nc 에 대한 심볼릭 링크입니다. ncat 별도의 프로그램이 아닙니다.

최근 Arch, Manjaro, Fedora 및 Ubuntu 배포판을 확인했습니다. 도구를 설치해야 하는 유일한 도구는 Manjaro였습니다. Manjaro에서는 다음을 설치해야 합니다. netcat 얻을 패키지 nc그러나 당신은 얻지 못한다 ncat당신은 netcat. 그리고 만자로에서는 nc 에 대한 심볼릭 링크입니다. netcat.

sudo pacman -S netcat

Manjaro에 netcat 패키지 설치하기

결론은 Manjaro 사용에서 netcat 당신이 볼 때 ncat 이 기사의 예에서.

소켓에서 듣기

소프트웨어가 들어오는 소켓 연결을 수신 대기하는 경우 서버 역할을 합니다. 소켓 연결을 통해 오는 모든 데이터는 받았다 서버에 의해. 다음을 사용하여 이 동작을 매우 쉽게 복제할 수 있습니다. nc. 수신된 모든 데이터는 터미널 창에 표시됩니다.

우리는 말할 필요가있다 nc 연결을 수신하려면 다음을 사용하여 -l (listen) 옵션을 사용하고 연결을 수신할 포트를 지정해야 합니다. 이 인스턴스에 연결을 시도하는 모든 클라이언트 프로그램 또는 프로세스 nc 같은 포트를 사용해야 합니다. 우리는 말한다 nc 사용하여 수신 대기할 포트 -p (포트) 옵션.

이 명령이 시작됩니다 nc 소켓 서버로 포트 6566에서 연결 수신:

nc -l -p 6566

소켓 서버로 nc 시작

들어오는 연결을 기다리는 동안 nc 출력을 생성하지 않습니다. 연결되면 검색된 모든 정보가 터미널 창에 표시됩니다. 여기에서 자신을 “클라이언트 1″로 식별하는 클라이언트 프로그램에 의해 연결이 설정되었습니다.

nc 클라이언트로부터 데이터 수신

에 의해 표시되는 모든 것 nc 클라이언트로부터 수신됩니다. 이 클라이언트는 이름과 시간 및 날짜가 포함된 번호가 매겨진 메시지를 보냅니다.

클라이언트가 연결을 끊을 때, nc 종료되고 터미널 프롬프트로 돌아갑니다.

nc는 클라이언트 측에서 연결이 끊긴 후 종료되었습니다.

파일로 데이터 보내기

클라이언트의 데이터를 파일로 캡처하기 위해 다음에서 출력을 보낼 수 있습니다. nc 리디렉션을 사용하여 파일로 이 명령어는 수신된 데이터를 “logfile.txt”라는 파일에 저장합니다.

nc -l -p 6566 > logfile.txt

nc에서 텍스트 파일로 출력 리디렉션

어떤 출력도 볼 수 없으며(파일로 들어가고 있음), 역설적이게도 연결이 발생했는지 알 수 없습니다. nc 종료합니다. 명령 프롬프트로 돌아가면 연결이 발생했고 클라이언트에 의해 종료되었음을 나타냅니다.

우리는 사용할 수 있습니다 less “logfile.txt” 파일의 내용을 검토합니다.

less logile.txt

less를 사용하여 텍스트 파일 검사하기

그런 다음 데이터를 스크롤하고 less의 내장 기능을 사용하여 검색할 수 있습니다.

nc에서 캡처한 출력 검토

관련된: Linux에서 less 명령을 사용하는 방법

파일 및 터미널 창으로 데이터 보내기

터미널 창에서 스크롤되는 데이터를 보고 동시에 파일로 보내려면 다음에서 출력을 파이프하십시오. nc ~ 안으로 tee .

nc -l -p 6566 | tee logfile.txt

nc에서 파일과 터미널 창으로 동시에 출력 보내기

다중 연결 수락

다 좋은데 한계가 있습니다. 하나의 연결만 수락할 수 있습니다. 우리는 단일 클라이언트로부터 데이터를 수신하는 것으로 제한됩니다. 또한 해당 클라이언트가 연결을 끊으면 소켓 서버가 nc 종료합니다.

여러 연결을 수락해야 하는 경우 다음을 사용해야 합니다. ncat. 우리는 말할 필요가 있습니다 ncat 우리가 했던 것처럼 특정 포트를 듣고 사용하기 위해 nc. 그러나 우리는 또한 사용할 것입니다 -k (살아남기) 옵션. 이것은 말한다 ncat 마지막 활성 연결이 끊어진 경우에도 계속 실행하고 클라이언트의 연결을 수락합니다.

이것은 의미 ncat “Ctrl-C”로 종료하도록 선택할 때까지 실행됩니다. 새로운 연결이 허용되는지 여부 ncat 현재 클라이언트에 연결되어 있는지 여부.

ncat -k -l -p 6566

ncat으로 다중 연결 수신 대기

출력에 나타나는 다양한 클라이언트의 데이터를 볼 수 있습니다. ncat 연결됩니다.

ncat에 연결하는 두 번째 및 세 번째 클라이언트

서버에 연결

우리는 또한 사용할 수 있습니다 nc 소켓 클라이언트로 연결을 수락하고 서버 역할을 하는 다른 프로그램에 연결합니다. 이 시나리오에서는 nc 소켓 클라이언트입니다. 이를 위해 우리는 말할 필요가 있습니다 nc 서버 소프트웨어가 네트워크에 있는 위치입니다.

이를 수행하는 한 가지 방법은 IP 주소와 포트 번호를 제공하는 것입니다. 서버가 우리가 실행 중인 동일한 PC에 있는 경우 nc on, 우리는 127.0.0.1의 루프백 IP 주소를 사용할 수 있습니다. 서버 주소와 포트 번호를 나타내는 데 사용되는 플래그가 없다는 것은 아닙니다. 적절한 값만 제공합니다.

동일한 PC의 서버에 연결하고 포트 6566을 사용하려면 루프백 IP 주소를 사용할 수 있습니다. 사용할 명령은 다음과 같습니다.

nc 127.0.0.1 6566

nc를 소켓 클라이언트로 사용하기

데이터 nc 터미널 창에서 스크롤하여 서버에서 검색합니다.

nc를 사용하여 소켓 서버에서 데이터 검색

서버 소프트웨어를 실행하는 컴퓨터의 네트워크 이름을 알고 있는 경우 IP 주소 대신 해당 이름을 사용할 수 있습니다.

nc sulaco 6566

nc를 사용하여 서버가 실행 중인 PC 이름을 사용하여 소켓 서버에 연결

“Ctrl+C”를 사용하여 연결을 끊습니다.

빠르고 쉬운

nc 그리고 ncat 사용자 정의 소켓 핸들러를 작성하고 싶지 않지만 소켓 지원 소스에서 데이터를 수집해야 할 때 청구서를 충족합니다. 출력을 파일로 리디렉션하면 다음을 사용하여 출력을 검토할 수 있습니다. less다음과 같은 유틸리티를 사용하여 파일을 구문 분석합니다. grep.

관련된: Linux에서 grep 명령을 사용하는 방법