nc를 사용하여 TCP 포트를 무기한 수신하는 방법은 무엇입니까?

nc를 사용하여 TCP 포트를 무기한 수신하는 방법은 무엇입니까?

특정 TCP 포트에 도착하는 데이터를 무기한 읽고 파일에 덤프하고 싶습니다. 나는 다양한 변형을 시도했지만 nc나에게 적합하지 않습니다. 대부분의 경우 콘솔에서는 오류가 발생하지 않습니다. 다음은 내가 시도한 것입니다.

nc -lv 12345 >> ../myfile
nc -v 12345 >> ../myfile
nc -v -p 12345 >> ../myfile
nc -v localhost -p 12345 >> ../myfile

당신의 도움을 주셔서 감사합니다..

답변1

특정 TCP 포트에 도착하는 데이터를 무기한으로 읽고 싶습니다.

이것은 실제로 말이 되지 않습니다. 모든 데이터가 UDP 포트에 도착했다면 괜찮습니다. 그러나 TCP는 연결 기반 프로토콜입니다. 클라이언트가 연결되고 나면 accept()두 개의 소켓이 생깁니다. 하나는 수신 대기하고 다른 하나는 클라이언트에 연결됩니다. nc원래 수신 소켓을 닫고 클라이언트와 일대일로 처리합니다.


여러 클라이언트 연결을 수신하려면 다음을 사용해 보세요 socat.

socat TCP-LISTEN:12345,fork FD:1 >> ../myfile

그러면 청취 소켓이 설정되고 연결 시 새 프로세스가 포크되어 청취 소켓이 청취 상태를 유지합니다. 수신된 모든 데이터는 stdout(파일 설명자)에 기록되며 추가를 위해 1리디렉션됩니다 ../myfile.

메모: 데이터는 프레임 없이 보장된 순서 없이 클라이언트 수에 관계없이 수신됩니다. 즉, 한 번에 둘 이상의 클라이언트가 있으면 데이터가 뒤죽박죽이 될 것입니다.


파일을 처리 하려면 또는 socat중 하나를 사용할 수 있습니다 (참조:CREATEOPEN매뉴얼 페이지):

socat TCP-LISTEN:12345,fork OPEN:../myfile,append

"에 만족한다면한 번에 한 명의 클라이언트" 접근한 다음 nc루프에 넣습니다.

while :; do nc -l 12345; done >> ../myfile

다음을 사용하여 이것을 테스트하십시오 nc.

nc localhost 12345

답변2

왼쪽 화면

nc -l 1234 서버를 시작합니다.

오른쪽 화면이 nc 127.0.0.1 1234연결됩니다.

명령을 잘못 내린 것 같습니다.

당신이 gnu를 사용하는지 아니면 bsd를 사용하는지 아는 것도 가치가 있습니다. 저는 bsd를 사용합니다. man nc는 "NC(1) BSD 일반 명령 매뉴얼"을 보여줍니다. gnu에서 서버를 시작하려면 -l과 -p가 필요할 수 있습니다. 어떤 포트에서든 클라이언트를 서버에 연결하려면 -p를 사용하지 않습니다.

여기에 이미지 설명을 입력하세요

-v도 사용할 수 있습니다

여기에 이미지 설명을 입력하세요

즉각적인 문제는 전혀 실행되지 않는다는 것입니다.

귀하의 질문은 그것이 무기한이라는 것을 묻고 있으며 클라이언트 측에서 ctrl-c를 수행하면 연결이 끊어지는 것 외에도 서버가 중지된다는 점에 유의하고 싶습니다. 해당 서버가 루프를 수신하도록 할 수 있습니다. 작동합니다. 그러면 서버는 계속 수신 대기하며 클라이언트에서 Ctrl-C를 누른 후 다시 연결을 시도하면 여전히 존재합니다.

여기에 이미지 설명을 입력하세요

관련 정보