基于ubuntu nc指令实现远程传输文件到嵌入式设备中
2023-12-13 03:58:44
背景:
最近在使用nc进行远程文件传输的时候发现在文件传输完成时,没有正确的反馈,而是界面一直停留在传输阶段,加上使用nc传输需要设置一些诸如-l、 -p等参数,于是想将这些参数包裹在sh脚本中,一键执行脚本,方便快捷,具体如下:
一、本地端:
#!/bin/bash
# 初始化ip地址变量为空
ip_address=""
file_name=""
# 使用getopts处理-p和-f选项
while getopts p:f: option
do
case "${option}"
in
p) ip_address=${OPTARG};;
f) file_name=${OPTARG};;
esac
done
{ cat "$file_name"; printf '\nEOF\n'; } | nc "$ip_address" 12345
二、远程端:
file_name=" "
# 使用getopts处理-p和-f选项
while getopts f: option
do
case "${option}"
in
f) file_name=${OPTARG};;
esac
done
nc -l -p 12345 | while IFS= read -r line
do
if [[ "$line" == *EOF* ]]; then
pkill nc
else
echo "$line" >> $file_name
fi
done
echo "file pass successfully!"
三、执行
1. 先远程端:sh receive.sh -f {文件名称}
2. 后本地端:sh server_send.sh -p {远程ip} -f {文件名称}
四、更新
上述的脚本在传输二进制文件的时候,由于cat指令会造成二进制文件的修改,因此在传输二进制文件的时候可能会出现文件传输不完整的情况,因此将脚本文件修改如下:
一、本地端:
```powershell
#!/bin/bash
# 初始化ip地址变量为空
ip_address=""
file_name=""
# 使用getopts处理-p和-f选项
while getopts p:f: option
do
case "${option}"
in
p) ip_address=${OPTARG};;
f) file_name=${OPTARG};;
esac
done
# 使用nc命令传输文件
cat "$file_name" | nc -q 1 "$ip_address" 12345
二、远程端:
file_name=" "
# 使用getopts处理-p和-f选项
while getopts f: option
do
case "${option}"
in
f) file_name=${OPTARG};;
esac
done
nc -l -p 12345 > $file_name
echo "file pass successfully!"
剩余的按照第三步执行脚本就可以了,祝好
文章来源:https://blog.csdn.net/weilaicxy22/article/details/134829230
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!