2013-10-09 6 views
1

this Stack Overflow question으로 스핀 오프하기 때문에 몇 가지 조정을 제외하고는 같은 결과를 얻고 싶습니다.Netcat을 사용하는 소켓 서버에 바이너리 파일을 한 줄씩 전송하십시오.

호스트에 연결하여 한 줄씩 이진 파일을 보내고 각 줄 사이에 몇 초의 지연 시간을두고 싶습니다. 동일한 연결에 있어야합니다. 보내려는 문자열은 대부분 텍스트 기반이지만 줄에 인쇄 할 수없는 문자가 몇 개 있습니다.

<null>e<null><null>00326513,6598,no,8,,2z<null>

<null> 값이 HEX 값 0x00입니다 :

내가 (파일 당 수천 줄의)를 보낼 문자열/라인의 예입니다.

나는 첫 번째 항목에서 내 질문에 rewitten했지만 내 질문에 텍스트 만 다음이었다로 @mzet 내 원래의 질문에 내가 대답하지만 나중에 어떤 안에 내가 볼 수없는 내 문자열이 0x00 문자를 가지고 있다는 것을 발견 처음에. 그의 대답이 기초로 작용하기를 원한다. 거의 효과가 있다고 생각하지만, 이것이 내가 그의 공헌이 아니라 내 조정이 될 수 있도록 비틀기가 필요할 수도있다.

나는 3 개 라인을 가진 파일이있는 경우 : 다음 나는 @mzet에게 대답을 꼬집고 \x00 내 파일 내부의 <null> 값을 대체 할 수 있다고 생각하고 echo 명령에 -e을 설정

<null>e<null><null>00370513,6598,no,8,,2z<null> 
<null>f<null><null>00891548,6598,yes,8,,3z<null> 
<null>f<null><null>00129525,6598,yes,8,,2z<null> 

:

[[email protected]]# mkfifo /tmp/fifoIn; cat /tmp/fifoIn | nc localhost 2222 & 
[[email protected]]# cat myfile | while read line; do echo -ne $line; sleep 2; done > /tmp/fifoIn 

내가 그렇게 할 때, 나는 서버 측에 x00을 볼 수

[[email protected]]# nc -l 2222 
x00ex00x0000370513,6598,no,8,,2zx00 
x00fx0000891548,6598,yes,8,,3zx00 
x00fx00x0000129525,6598,yes,8,,2zx00 

원하는대로 이진 (텍스트?) 파일을 보낼 수 있습니까? 그리고 한 줄씩 파일을 보낼 수 없다면 한 번에 여러 번 문자열을 보낼 수 있습니까? 엄밀히 말하면 필자는 동일한 문자열을 반복하여 관리 할 수 ​​있기 때문에 고유하거나 파일에있을 필요가 없습니다.

편집 # 1

내 스크립트는 서버에 하나 개의 라인을 보내는 이유는 나중에 그냥 일시 정지된다 (?) 영원히 (I는 4 개 라인을 기대). 클라이언트 (나 서버)의 연결을 닫습니다하지만 오류가 제공되지 않습니다

rm -f /tmp/fifofile 
mkfifo /tmp/fifofile 
cat /tmp/fifofile | nc 192.168.20.6 5000 & 
sleep 1 

i="0" 

while [ $i -lt 4 ] 
do 
    echo "$i" 
    echo -ne "\x00e\x00\x00001212dsfdsfdsfsdfsdfsdfdsf\x00" | tee /tmp/fifofile 
    sleep 1 
    i=$[$i+1] 
done 

답변

2

및 내 머리카락을 당겨서 NCat이 명령을 실행할 수 있기 때문에 결국 Netcat 대신 NCat을 사용할 수 있다는 것을 알아 냈습니다.

포트 5000 내 소켓 서버에 NCat와의 연결을 시작하고 스크립트 ./sendlines.sh 실행

:

#!/bin/bash 
# 
# sendlines.sh, v1.00, initial release 
# 
i="0" 
while [ $i -lt 4 ] 
do 
    echo -ne "\x00e\x00\x0000370513,6598,no,8,,2z\x00" 
    sleep 2 
    i=$[$i+1] 
done 
:

ncat --exec "./sendlines.sh" 192.168.1.10 5000

./sendlines.sh 각 줄 사이에 2 초 지연 4 개 라인을 보낼 것이다

이진 파일을 한 줄씩 보내는 방법을 알지 못했지만 같은 문자열을 여러 번 보내는 것으로 관리 할 수 ​​있기 때문에 꼭 필요한 것은 아닙니다.

바이너리 파일을 한 줄씩 보내는 방법을 알고 있다면 나에게 가장 적합한 솔루션이므로 좋을 것입니다.

3

당신은 두 단계를 얻을 수 있습니다

1) 당신은 명명 된 파이프와 NC를 시작해야합니다 (fifo)를 입력으로 사용합니다.

mkfifo /tmp/fifoIn; cat /tmp/fifoIn | nc localhost 2222 & 

2) 파일 입력에서 데이터를 전송하십시오.TXT, 2 초 지연 라인으로 라인 :

나는이 "서버"(나는 오픈 BSD netcat을 구문을 사용하고 있습니다)로 테스트 한
cat input.txt | while read line; do echo $line; sleep 2; done > /tmp/fifoIn 

: 노력을 많이 한

nc -l localhost 2222 
+0

정상적으로 작동하는 것 같습니다. 며칠 이내에 문제가 해결되지 않으면 답변을 수락합니다. 또한 각 줄 이후에 줄 바꿈 문자를 보내는 것을 피할 수 있는지 알고 있습니까? – DHS

+1

while 루프에서'echo' 대신'echo -n'을 시도하십시오 – mzet

+0

제 편집을 참조하십시오 – DHS