echo command | netcat host port
이로 인해 명령이 원격 호스트로 전송되고 일부 데이터가 다시 읽 힙니다. 그러나 몇 초 후에 연결이 닫힙니다. -w 매개 변수는 아무것도 변경하지 않았습니다. SuSE 10.1에서 netcat v1.10을 사용하고 있습니다.
echo command | netcat host port
이로 인해 명령이 원격 호스트로 전송되고 일부 데이터가 다시 읽 힙니다. 그러나 몇 초 후에 연결이 닫힙니다. -w 매개 변수는 아무것도 변경하지 않았습니다. SuSE 10.1에서 netcat v1.10을 사용하고 있습니다.
답변:
이것은 nc
OS X 의 명령에서 작동합니다 (전송하려는 명령이 파일에 있다고 가정).
cat file - | nc host port
본질적으로 cat
으로 stdout에서 파일 내용을 덤프 한 다음 stdin에서 기다립니다.
확장 적으로 쉘 자체에서 명령을 보내려면 다음을 수행하십시오.
cat <(echo command) - | nc host port
{ echo command; cat;}
같은 일을하고 이해하기 쉬운 것으로 간주 될 수 있습니다.
netcat
명령은 입력이 끝날 때까지 소켓을 열어 둡니다. 이 모든 예들은 실제로 왜 그런지에 대해 많이 말하지 않고 이것을 보여줍니다 . 다음을 사용 하여 장시간 동안 서버를 사용하여 상호 작용하고 있습니다. SocketTest 는 모든 TCP 또는 UDP 포트에서 수신하거나 제공 할 수있는 편리한 도구입니다. SocketTest
netcat
cat - | nc localhost 8063
와 nc
우분투 :
nc -q -1 host port
로부터 우분투 nc
man 페이지 :
-q seconds
after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
사용 가능한 nc
옵션은 배포판마다 매우 다양하므로이 옵션이 작동하지 않을 수 있습니다 (OpenSUSE).
나는 당신이 netcat 또는 socat로 이것을 관리 할 것이라고 생각하지 않습니다. 나는 방금 두 가지 모두로 광범위한 땜질을 해왔고 socat은 가장 유망한 것처럼 보였다.
원격 TCP 포트에 연결하고 로컬 유닉스 도메인 소켓 (이론적으로 링크를 항상 유지할 수 있음)에서 청취하도록 socat을 설정했지만 로컬 프로세스가 유닉스 소켓에서 분리 된 즉시 (다른 소켓) 유닉스 소켓을 stdin / out에 연결) TCP socat 세션을 닫았습니다.
여기서 문제는 netcat / socat을 통한 각 연결이 서버에 새로운 TCP 스트림 연결을 만들고 로컬 끝이 연결 해제 될 때 해당 TCP 스트림 세션을 닫는 것입니다.
아마도 TCP 연결을 원격 끝으로 연 다음 소켓 / 파이프 / fifo 또는 로컬에서 청취 한 다음 기존 TCP 파이프로 데이터를 전송하는 사용자 지정 프록시 소프트웨어를 작성해야 할 것입니다. 결과를 반환합니다.
소켓의 다른 쪽 끝에서 연결이 닫 혔을 수 있습니까?
nc
( -k
옵션으로) 계속 들으라고 지시하지 않으면 기본적으로 완료 후 연결을 닫습니다 .
-k Forces nc to stay listening for another connection after its current
connection is completed. It is an error to use this option without the
-l option.
참조하십시오 man nc.1
.
다음과 같이 두 컴퓨터간에 데이터를 성공적으로 스트리밍하고 있습니다.
송신기:
while (true); do
echo -n "$RANDOM " | nc <host> <port>
done
리시버:
nc -kl <port>
socat
의 shut-none
옵션이 여기에 도움이됩니다.
Changes the (address dependent) method of shutting down the write part of a connection to not do anything.
을 사용하여 기본 시간 초과 기간을 재정의해야 할 수도 있습니다. -t <timeout>
그렇지 않으면 소켓이 0.5 초 후에 닫힙니다. 이 옵션은 다음과 같은 기본 동작을 재정의합니다.
When one of the streams effectively reaches EOF, the closing phase begins. Socat transfers the EOF condition to the other stream, i.e. tries to shutdown only its write stream, giving it a chance to terminate gracefully. For a defined time socat continues to transfer data in the other direction, but then closes all remaining channels and terminates.
따라서 다음과 같은 명령이 있습니다.
echo 'blah' | socat -t 10 stdio tcp:<addr>:<port>,shut-none
'blah'를 보낸 후 10 초 동안 소켓을 열어 둡니다.