나는 데이터를 TCP 포트 밖으로 스트리밍하는 도구를 가지고 있으며 스크립트에서 표준 도구를 사용하여 스트림을 사용할 수 있는지 확인하고 싶습니다.스트리밍 서버의 트래픽을 테스트하는 스크립트는 무엇입니까?
수동으로 데이터 스트림을 사용할 수없는 경우 즉시 종료하는 ncat
을 사용합니다.
은 여기 내 초기 bash는 스크립트입니다 :
#!/bin/bash
ncat somehost 1234 >/dev/null &
pid=$!
sleep 1
if [ -d /proc/$pid/ ]; then
kill -KILL $pid
echo "It's alive, ALIVE\!"
# Launch clients
else
echo "He's dead, Jim."
# Perform resurrection
fi
그것은 작동하지만, 심지어 ncat 작업 제어 또는 procfs의 나에 의존하지 않는이 작업을 수행 할 수있는 간단한 또는 더 나은 방법이 있는지 궁금 하군요. 타임 아웃이 끝나기 전에 얼마나 많은 데이터가 전송되었는지 알고 싶습니다.
그리고 bash ncat host port
은 cat </dev/tcp/host/port
으로 바꿀 수 있지만 bash-isms를 피하고 싶습니다. (따라서 busybox에서 작동 할 수 있습니다).
또 다른 접근법은 행/문자 출력을 ncat
으로 계산하기 위해 wc
을 사용하는 것입니다. 이는 한 줄만 출력하고 연결이 불가능할 경우 종료되기 때문입니다. 하지만 스트림이 끝났다면 영원히 종료를 기다릴 수 없으므로 명령 출력에 액세스 할 때 자체적 인 복잡성이있는 timeout
과 같은 것을 사용해야 할 것입니다.
최소한의 종속성으로 작동하는 "일반"접근 방식이 있습니까?
대신 간단한 도구를 써야합니까? 호스트/포트에 연결되면 읽을 바이트 수를 반환하고, 그렇지 않으면 음수 errno를 반환하고 대기 시간 및 프로토콜 사양 (tcp/udp)을 지원합니다. 반환 값 0은 연결이 이루어 졌음을 의미하지만 대기 시간이 만료되기 전에 데이터가 도착하지 않았습니다 (알 수있는 좋은 점).
또는 ncat
패치를 적용 하시겠습니까?
'timeout' 대신에'ncat' 출력을'head -n 3 '으로 재 지정하는 것이 가능합니다. 이것은 3 라인 (활성 스트림을 가리킴) 이후에 파이프 오류를 일으킬 것입니다. 불행히도'ncat '은'SIGPIPE'에 잘 반응하지 않으며'bash'에서 신호 오류를 처리하는 것은 PITA입니다. – BobC