데이터를 보낸 후 netcat 연결을 자동으로 닫는 방법은 무엇입니까?


22

스크립트에서 다음 명령을 실행하고 있습니다.

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat localhost 8001

그러나 netcat 클라이언트는 무기한으로 열려 있습니다. 이 데이터가 전송되면 어떻게 연결을 닫을 수 있습니까?

답변:


17

다른 답변 -c-q주어진 답변 모두 올바른 맥락에서 정확하지만 여러 답변이있는 이유를 요약하고보다 일반적인 해결책을 제공하는 데 도움이 될 수 있습니다.

이러한 다른 옵션은 동일한 작업을 수행하지만 netcat의 다른 구현입니다.

  • -c netcat의 GNU 구현
  • -q netcat의 OpenBSD 구현.
  • -w (기타?) netcat의 OpenBSD 구현.

일부 버전에서는 -q-w옵션을 종료하기 전에 대기 할 시간 (초)을 지정하기 위해 int가 필요합니다 . 이 int는 버전에 따라 > 0또는 이어야합니다 >= 0.

여러 시스템에서 무언가를 구현하고 동일한 netcat 구현을 사용하고 있는지 확실하지 않으면 timeout몇 초 후에 netcat을 종료하기 위해 프로그램으로 netcat 호출을 래핑하는 것을 고려할 수 있습니다 .

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

이 접근 방식은 데이터 전송 여부에 관계없이 netcat 실행에 상한선을두기 때문에 약간 어색하지만 약간의 데이터를 보내고 여분의 시간이 있으면 몇 초가 소요됩니다. netcat 구현으로.


5

-q매개 변수 를 사용할 수 있지만 netcat서버도 닫힙니다.

$ echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -q 5 localhost 8001    

3

필자의 경우 Homebrew (v 0.7.1)를 통해 설치된 Mac에서 사용했던 netcat 사본에는 -q 옵션이 없지만 -c 옵션을 사용하여 STDIN EOF를 닫고 루프에서 전체 명령 :

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done

1

Ubuntu 18.04 서버에서 다음을 사용해야했습니다. (Man 페이지에서 찾았습니다)

echo '{"hostUp": true}' | sudo /usr/local/bin/netcat -N localhost 8001

분명히 다른 배포판 -N과 유사 -q하거나 -c다른 배포판에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.