ncat 명령은 '-i' 옵션을 사용할 때 만료된 유휴 시간 제한을 제공합니다.

ncat 명령은 '-i' 옵션을 사용할 때 만료된 유휴 시간 제한을 제공합니다.

장치에 파일을 업로드하는 명령을 사용하고 있습니다 nc. 사용 방법은 다음과 같습니다.

nc -i1 "device ip" "port" < /path/to/file

이 명령은 Scientific Linux 6.4 32비트에서 제대로 작동하지만 CentOS 7.4 64비트로 업그레이드한 후 명령이 반환됩니다.

Ncat: Idle timeout expired (1000 ms)

RedHat 웹사이트에 bugzilla 프로젝트가 있다는 것을 깨달았습니다.여기nc, 교체 중이라고했는데 ncat작동하지 않았습니다. 나는 cat파일을 시도해보고 ncor 로 파이핑했지만 ncat작동하지 않았습니다. 이 문제 해결에 대한 제안 사항이 있습니까?

답변1

문제는 확실히 -i선택의 문제입니다. 적어도 nc세 가지 버전이 존재합니다.openbsd-netcat,gnu-netcat그리고nmap-ncat.

nc버퍼 간격을 나타내는 옵션 버전 중 하나에서 시간 초과를 나타내는 버전으로 전환 할 수 있습니다 . 따라서 해당 옵션을 제거하거나 .-inmap-i-i-d

-i아래에서는 언급된 옵션의 각 버전에 대한 수동 라인을 편집했습니다 nc. -dnmap버전 도 포함시켰습니다 .

오픈 BSD:

-i interval        Specifies a delay time interval between lines of text sent and received. Also causes a delay time between connections to multiple ports.

암소 비슷한 일종의 영양:

-i SECS
--interval SECS    sets the buffering output delay time. This affects all the current modes and makes the connection sock to buffer outgoing data. This means that in tunnel mode everything received from the listening socket is buffered for the connect socket.

국가 지도:

-i, --idle-timeout <time>  Idle read/write timeout

-d time, --delay time (Specify line delay)
       Set the delay interval for lines sent. This effectively limits
       the number of lines that Ncat will send in the specified period.
       This may be useful for low-bandwidth sites, or have other uses
       such as coping with annoying iptables --limit options.

답변2

ncat이는 RHEL7에서 사용되는 nmap 버전의 설계 결함입니다. 7.70 버전의 소스 코드를 보고 있습니다(RHEL7은 7.50, Fedora 28은 7.60, 코드의 이 측면은 7.70과 7.70 사이에서 크게 변경되지 않을 것이라고 생각합니다).

ncat_connect.c코드 에서 다음을 볼 수 있습니다.

  • stdin에서 EOF 후에 모드가 종료됩니다 --send-only.
  • 모드의 소켓에서 EOF 후에 종료합니다 --recv-only.

그러나 패턴 --send-only--recv-only패턴도 아닌 경우에는 다음과 같습니다.아무것도 없다ncat_connect.cstdin 및 소켓에 EOF가 표시되면 종료를 처리합니다.

nsock_core.cnsock_loop그럼 s 함수의 기본 코드를 살펴보겠습니다 . 이 루프는 설정된 경우 종료됩니다 ms->quit(위 --send-only코드를 통해 --recv-only).또는없다면 events_pending.

그러나 이것은 오류입니다.events_pending의 시간 초과 횟수. 그래서 nsock_loop"좋아요, stdin이 EOF되었고 소켓이 EOF되었다는 것을 알고 있지만 여전히 보류 중인 이벤트가 있기 때문에 종료하지 않을 것입니다."(시간 초과) 따라서 시간 초과가 트리거될 때까지 그대로 유지됩니다.NC 오류 종료, 실제로 모든 것이 잘 작동하더라도.

따라서 나는 우리가 배포판 대신 nmap에 직접 버그 보고서를 제출해야 한다고 생각합니다. 그들은 "이것은 우리가 평가할 자격이 없는 업스트림 동작입니다"라고 말할 수 있으며 업스트림 관리자는~ 할 것이다평가할 수 있음): 우리는 위의 디자인이 (1) 또는 (2) 무시된 오류 코드 없이 -i사용되지 않는 한 사실상 쓸모가 없다는 점을 지적합니다.--send-only--recv-onlync

그동안 다음 해결 방법 중 하나가 도움이 될 수 있습니다.

  • --send-only또는 --recv-only(사용 사례에 적합한 경우)을 사용하세요 .
  • 를 사용하는 대신 명령을 명령 nc으로 감싸십시오 .timeout-i
  • ncGNU Netcat 또는 원래 nc-1.10과 같은 다른 버전을 수동으로 설치합니다 . 하지만 RHEL7 또는 Fedora 28에서 이 작업을 수행하려면 다음이 필요합니다.~ 할 것이다패키지(현재)에서는 nmap-ncat.

답변3

centos7 컨테이너를 시작했으며 오류를 재현할 수 있습니다.

[root@34630a8f0b7c /]# nc 192.168.1.210 1234 < sarassa 
[root@34630a8f0b7c /]# nc -i 1 192.168.1.210 1234 < sarassa 
Ncat: Idle timeout expired (1000 ms).

-i 옵션은 파일 전송이 끝날 때만 시간 초과를 추가하므로 이를 통해 달성하려는 목표가 명확하지 않습니다.

관련 정보