Bash 스크립트에서 TCP 소켓을 전달할 수 없습니다.

Bash 스크립트에서 TCP 소켓을 전달할 수 없습니다.

장치에 4개의 TCP 소켓이 연결되어 있습니다.

이것들은 다음을 사용하여 만들어졌습니다.

exec 3<>/dev/tcp/IP/PORT
exec 4<>/dev/tcp/IP/PORT
exec 5<>/dev/tcp/IP/PORT
exec 6<>/dev/tcp/IP/PORT

서브셸에서 파일 설명자에서 읽었습니다.

cat <&4 | while read LINE; do
    echo -n "FD4 $LINE" | xxd -ps | sed 's/../&\ /g' > somefile.txt
done &

나중에 사용할 수 있도록 파일로 전달하세요.

하지만 특정 유형의 메시지에 문제가 있습니다.

간단한 사용

cat <&6 | xxd -ps

다음(일부 매개변수)이 표시됩니다.

006ec94430020000c090006800c903470000000000040000209f00000000
000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000

하지만 그것을 사용하기 위해 파일이나 변수로 전달할 수는 없습니다.

다양한 방법을 시도했지만 해결책을 찾을 수 없습니다.

누군가 이런 뉴스를 처리하는 방법을 알고 있기를 바랍니다.

답변1

코드에 몇 가지 문제가 있습니다.

  • 읽는 각 줄에서 somefile.txt이전 줄에 넣은 내용을 지우고 다시 만듭니다. 대신 사용 하거나 키워드 뒤로 >> somefile.txt이동 해야 합니다 .> somefile.txtdone
  • 덤프 에 따라 바이너리 데이터를 수신하는 것으로 보이지만 xxd새 줄로 구분된 텍스트 데이터인 것처럼 처리하고 있습니다. 이진 데이터에서는 올바르게 작동 read하지 않습니다.echo

단순히 파일 설명자의 내용을 파일에 전달 xxd하고 결과를 파일에 저장하면 어떨까요? 즉, 그냥 이렇습니다:

xxd -ps <&4 | sed 's/../&\ /g' > somefile.txt &

관련 정보