netcat
내 서버의 에코 서비스에 텍스트를 보내고 응답을 받은 다음 종료하여 연결이 여전히 양호한지 확인하는 데 사용하고 싶습니다 . 내가 지금까지 시도한 것 :
echo 'test' | netcat server 7
이렇게 하면 netcat은 종료하는 대신 더 많은 입력을 기다립니다.
netcat
에코 서비스로부터 응답을 받은 후 종료하는 방법은 무엇입니까?
답변1
netcat-openbsd
방금 시도해 보았습니다. 와 netcat-traditional
(우분투 16.4) 사이의 동작이 약간 다릅니다. OpenBSD 변형은 여러분이 기대하는 대로 작동하는 반면, netcat-traditional의 경우 -q 1
더 많은 입력을 기다리지 않도록 추가해야 했습니다.
echo 'test' | netcat -q 1 server 7
답변2
나는 이것이 약간 오래되었다는 것을 알고 있지만 다른 답변 중 어느 것도 나에게 도움이 되지 않았습니다.
echo 'test' | netcat -N $server $port
참고 -N
:
EOF를 입력한 후 네트워크 소켓을 닫습니다. 일부 서버에서는 작업을 수행하기 위해 이 작업이 필요합니다.
Windows 및 Linux에서 작동합니다.
답변3
이것을 사용하십시오 :
cat <(echo command) - | nc host port
문제는 nc
stdin이 닫히자마자 연결이 닫히게 된다는 점인데, 이는 간단한 my_command
문자열의 경우 매우 빠르기 때문에 응답을 받을 기회가 전혀 없습니다. 매우 큰 파일을 파이프하면 파일 전송이 완료되기 전에 응답을 받을 수 있습니다.
두 번째 cat
인수 입력 -
: cat
첫 번째 인수의 내용을 보낸 후 더 많은 내용을 위해 표준 입력을 수신합니다. 첫 번째 매개변수는 echo
명령이 실행되도록 합니다 cat
. la 명령을 포함하는 파일일 수도 있습니다 cat < file - | ...
.
이것의 단점은 껍질을 치 ^C
거나 칠 때까지 열려 있다는 것입니다 . (OSX netcat) 또는 (nmap의 경우 ncat) 을 ^D
사용하여 시간 초과를 추가하면 1초 후에 연결이 닫히지만 특정 문자를 입력할 때까지 프로세스가 종료되지 않습니다.-w 1
-i 1
이 답변은 다음을 기반으로 합니다.이것은 동일한 슈퍼유저 질문에 대한 답변입니다..
답변4
귀하의 질문을 올바르게 이해하지 못했습니까?
기본 netcat 리스너는 입력을 받은 후 종료되어야 합니다(이 경우 에코는 이를 netcat에 전달한 다음 리스너에게 전달합니다).
수신 Netcat 서비스가 입력을 받은 후에도 계속 수신 대기하도록 하려면 다음을 수행하십시오.
nc -lk 12345
- 여기서 12345는 포트 번호입니다.
가장 중요한 것은 netcat의 매뉴얼 페이지를 확인하는 것입니다. 모든 명령에 매우 유용합니다...
man nc