niX*_*man 0 linux bash networking
我正在尝试通过以下方式从某些服务下载文件:
BODY="$(netcat "127.0.0.1" 61222 <<< "download|file_dir|file_name")"
SIGNATURE="$(echo -n "$BODY" | head -c 128)"
echo -n "$BODY" | tail -c +129 | dd of="$FILE_PATH" >& /dev/null
Run Code Online (Sandbox Code Playgroud)
但是这种方法有两个缺点:
BODY。有没有一种有效的方法可以将套接字中的前 128 个字节读入 bash 变量,但将其余字节直接写入文件?
也许使用bash的原生 TCP 套接字支持?文件,例如/dev/tcp/HOST/PORT到给定主机的打开套接字。
粗略(由于缺少测试服务器而未经测试的代码):
#!/usr/bin/env bash
exec 3<>/dev/tcp/127.0.0.1/61222 # Open a socket on descriptor 3
printf "%s\n" "download|file_dir|file_name" >&3
read -r -N 128 -u 3 signature # Read 128 bytes from descriptor 3
cat <&3 >"$FILE_PATH"
exec 3<&- # Close the socket
Run Code Online (Sandbox Code Playgroud)