내가 this script을 발견 netcat을 함께 만든 차단 프록시 찾고 : 예상대로 잘 작동유닉스 (Cygwin에서) FIFO 버퍼링
#!/bin/sh -e
if [ $# != 3 ]
then
echo "usage: $0 <src-port> <dst-host> <dst-port>"
exit 0
fi
TMP=`mktemp -d`
BACK=$TMP/pipe.back
SENT=$TMP/pipe.sent
RCVD=$TMP/pipe.rcvd
trap 'rm -rf "$TMP"' EXIT
mkfifo -m 0600 "$BACK" "$SENT" "$RCVD"
sed 's/^/ => /' <"$SENT" &
sed 's/^/<= /' <"$RCVD" &
nc -l -p "$1" <"$BACK" | tee "$SENT" | nc "$2" "$3" | tee "$RCVD" >"$BACK"
합니다. 내가 사용하는 인코딩을 통과 따라서 실제 바이트에 밀접하게 볼 필요가 있기 때문에
, 나는 hexdump -vC
를 사용하는 일부 라인을 변경하려고 :
#!/bin/sh -e
if [ $# != 3 ]
then
echo "usage: $0 <src-port> <dst-host> <dst-port>"
exit 0
fi
TMP=`mktemp -d`
BACK=$TMP/pipe.back
SENT=$TMP/pipe.sent
RCVD=$TMP/pipe.rcvd
trap 'rm -rf "$TMP"' EXIT
mkfifo -m 0600 "$BACK" "$SENT" "$RCVD"
(hexdump -vC | sed 's/^/ => /') <"$SENT" &
(hexdump -vC | sed 's/^/<= /') <"$RCVD" &
nc -l -p "$1" <"$BACK" | tee "$SENT" | nc "$2" "$3" | tee "$RCVD" >"$BACK"
를 이제 더 이상 작동하지 않습니다. 사실, 이전 스크립트의 "실시간"기능을 잃어 버렸습니다. 전송 된 모든 바이트는 단일 일괄 처리로 덤프됩니다. 그리고 나서 다른 배치에서 수신 된 모든 바이트; 이 모든 것은 연결이 닫힌 후에 만 가능합니다. 나는 버퍼링의 일종을 의심하고있어
파이프 (|
)에서 발생,하지만 난 모르겠어요 방법 :
- 시험이 hypotesis;
- 실시간으로 다시 작동하도록 스크립트를 수정하십시오.
PS1. 나는 cygwin을 사용하고있다. PS2. sh --version
출력 :
GNU bash, version 4.1.10(4)-release (i686-pc-cygwin)
편집 : | sed ...
부분 Removind
파이프 라인 연산자를 통해 내 의심을 증가, 실시간 기능을 다시 (즉에만 hexdump -vC <"$SENT"
및 hexdump -vC <"$RCVD"
을두고있다). 그러나 보낸 바이트와받은 바이트가 섞여 있기 때문에 출력이 혼란 스럽습니다. (?)
'sed -u '를 사용하면 도움이됩니까? –
예, 버퍼링은 hexdump 파이프 라인의 각 파이프에서 발생합니다. 아마도 '실시간으로'다시 작동시키는 방법이 없을 것입니다. –
@EtanReisner 아니요, 그렇지 않았습니다. – rslemos