추가 읽기

추가 읽기

연결을 수락한 다음 모든 입력을 제거하는(테스트 도구에서 사용하기 위해) TCP 수신기를 구현하려고 합니다.

지금은 사용하고 있지만 socat - tcp-listen:2003,fork,reuseaddr입력이 stdout에 인쇄됩니다. 나는 그것을 원하지 않습니다.

/dev/null현재 위치에 있기 때문에 출력을 다음으로 리디렉션할 수 없습니다.알파인/소캣 도크 컨테이너이며 실제로 셸을 사용하지 않으므로 리디렉션이 작동하지 않습니다.

을 사용하려고 하면 socat /dev/null tcp-listen:2003,fork,reuseaddr모든 연결이 즉시 끊어집니다. 아마도 socat읽을 수 없기 때문일 것입니다 /dev/null.

모든 것을 바닥에 떨어뜨리는 TCP 수신기를 구현하는 가장 좋은 방법은 무엇입니까?

답변1

socat /dev/null,ignoreeof tcp-listen:2003,fork,reuseaddr

답변2

최적이라는 것은 까다로운 기준이지만 이를 위해서는 Microsoft Excel만큼 Docker가 필요하다는 것을 알 수 있습니다. ☺

우리는 이미 EOF까지 입력을 읽고 이를 효과적으로 삭제하는 Unix 프로그램을 알고 있습니다.

고양이 > /dev/null

이를 TCP 서버로 변환하는 것은 매우 간단한 연습입니다. 이것이 UCSPI-TCP의 전부입니다. 표준 I/O를 사용하는 프로그램을 가져와서 이를 중심으로 간단한 프레임워크를 래핑하여 TCP 서버로 만듭니다. 전송에 대한 걱정 없이 다른 것으로 대체 cat하고 서비스 계약을 변경할 수 있습니다. 마찬가지로 UCSPI-TCP 도구를 UCSPI-LOCAL 도구로 교체하고 cat.

여러 UCSPI-TCP 도구 세트가 있습니다. 다니엘 J. 번스타인(Daniel J. Bernstein)이 하나 썼습니다. Laurent Bercot가 하나 썼습니다. Gerrit Pape가 하나 썼습니다. Adam Sampson이 하나 썼습니다. 나는 하나를 썼다. 또한 여러 도구 세트의 도구를 혼합하고 일치시킬 수 있으며 의도적으로 쉽게 결합할 수 있습니다. 내 도구 fdredir나 Laurent Bercot의 도구를 사용 redirfd하거나 비대화형 도구를 생성할 수도 있습니다 sh. (처음 두 개는 본격적인 도구보다 오버헤드가 낮고 shnosh 도구 fdredir도 내장되어 있으므로 체인 연결에 따른 오버헤드를 더욱 피할 수 있습니다. 외부 명령.)

이를 수행하는 방법에는 여러 가지가 있습니다.

  1. Bernstein tcpserver(원본 또는 djbwares, IPv6를 지원하지 않음)
    1. tcpserver -R -H -l 0 0.0.0.0 2003 fdredir --write 1 /dev/null cat
    2. tcpserver -R -H -l 0 0.0.0.0 2003 redirfd -w 1 /dev/null cat
    3. tcpserver -R -H -l 0 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
  2. Hoffman tcpserver(IPv4 및 IPv6 지원, 원래 Bernstein 기본 DNS 및 INFO 조회 기능이 있으며 꺼야 함)
    1. tcpserver -R -H -l 0 ::0 2003 fdredir --write 1 /dev/null cat
    2. tcpserver -R -H -l 0 ::0 2003 redirfd -w 1 /dev/null cat
    3. tcpserver -R -H -l 0 ::0 2003 sh -c 'exec > /dev/null cat'
  3. tcpservershim(IPv4와 IPv6를 모두 지원하지만 각각에 대해 별도의 인스턴스를 실행해야 하며 더 현대적인 기본값이 있음)
    1. tcpserver ::0 2003 fdredir --write 1 /dev/null cat
    2. tcpserver ::0 2003 redirfd -w 1 /dev/null cat
    3. tcpserver ::0 2003 sh -c 'exec > /dev/null cat'
  4. 내 UCSPI-TCP 도구(Linux와 FreeBSD에서 하나로 IPv4와 IPv6 모두 지원)
    1. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept fdredir --write 1 /dev/null cat
    2. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept redirfd -w 1 /dev/null cat
    3. tcp-socket-listen --combine4and6 ::0 2003 tcp-socket-accept sh -c 'exec > /dev/null cat'
  5. Bercot s6-tcpserver6( s6-tcpserver4IPv4 대체)
    1. s6-tcpserver6 ::0 2003 fdredir --write 1 /dev/null cat
    2. s6-tcpserver6 ::0 2003 redirfd -w 1 /dev/null cat
    3. s6-tcpserver6 ::0 2003 sh -c 'exec > /dev/null cat'
  6. Bercot s6 - 네트워크 도구( s6-tcpserver4IPv4 대체)
    1. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d fdredir --write 1 /dev/null cat
    2. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d redirfd -w 1 /dev/null cat
    3. s6-tcpserver6-socketbinder -B ::0 2003 s6-tcpserver6d sh -c 'exec > /dev/null cat'
  7. Pappu tcpsvd(IPv6를 지원하지 않음)
    1. tcpsvd 0.0.0.0 2003 fdredir --write 1 /dev/null cat
    2. tcpsvd 0.0.0.0 2003 redirfd -w 1 /dev/null cat
    3. tcpsvd 0.0.0.0 2003 sh -c 'exec > /dev/null cat'
  8. Sampson onenetd(IPv4와 IPv6를 모두 지원하지만 각각에 대해 별도의 인스턴스를 실행해야 함)
    1. onenetd -6 ::0 2003 fdredir --write 1 /dev/null cat
    2. onenetd -6 ::0 2003 redirfd -w 1 /dev/null cat
    3. onenetd -6 ::0 2003 sh -c 'exec > /dev/null cat'

대안을 즐기다

16진수 덤프 -C 1>&2
또는 (없음 sh)

fdmove -c 1 2 16진수 덤프 -C
테스트 중인 클라이언트 프로그램이 수행하는 작업에 대한 로컬 로그를 얻기 위해 서버 프로그램에 사용됩니다. ☺

추가 읽기

관련 정보