我有一个正在运行的考勤设备Linux OS
。我可以通过 telnet 会话连接此设备。设备中有一些文件我想下载并与新文件一起上传。我怎样才能做到这一点?我对Linux操作系统的了解非常少。请您帮忙!
答案1
这取决于客户端设备上安装了哪些工具/内核支持哪些工具。
文件传输的可能方法(无序):
- ssh/sftp
- 使用 base64/uuencode 将二进制文件编码为可显示的格式,然后从 telnet 终端窗口复制到其中。
- 通过简单的 tcp 连接
netcat
或socat
或 和bash
/dev/tcp wget
使用curl
网络服务器上传/下载- 带有命令行 ftp 客户端的 ftp 服务器
- samba 或 nfs 挂载
读简单的文件传输和当您只有串行控制台时,如何将文件获取到主机?以获得更多的可能性。
desktop.jpg
使用 netcat/nc 方法从设备复制到您的电脑:
在您的电脑上,暂时禁用(或重新配置,如果可能)任何防火墙并运行
netcat -l -p 10000 > desktop.jpg
并在设备上
busybox nc A.B.C.D -p 10000 < desktop.jpg
您需要将 ABCD 替换为您电脑的 IP 地址。一旦传输成功,您电脑上的 netcat 进程就会自动停止。如果没有,则可能出现问题,您可以使用Ctrl+来阻止它C(比较源和目标校验和以进行验证)。
对于另一个方向,只需交换两边的<
和即可。>
首先备份原始文件desktop.jpg
( cp desktop.jpg desktop_orig.jpg
)。
答案2
我的设备上没有 ssh 或 ftp(或等)。
所以,我接下来要做:
telnet a.b.c.d | tee telnet.log
- 登录并转到文件
cat file.txt
- 关闭会话(我关闭 tmux 窗格)
telnet.log
从垃圾中清除
编写通过 telnet 下载/上传文件的实用程序应该很容易
答案3
我刚刚通过串行端口将约 7 Kb 的固件文件上传到基于 BusyBox 的 Linux 嵌入式系统。
没有网络,没有文件传输实用程序;设备上没有 Base64 utils 或任何远程有用的东西。
在主机上,我将固件简单地编码为以下格式;一种由 shell 文字与printf
命令组合而成的十六进制转储:
printf "\xDE\xAD\xBE\xEF\x...\xF0"
printf "\xCA\xFE\x33\xE1\x...\xD3"
基本上是带有解释转义序列的shellprintf
命令。在我的设备上:\x
printf
device $ cat > firmware.sh
然后使用 的minicom
ASCII file send( Ctrl-AS) 将此文件发送到主机。我本来可以使用复制和粘贴,因为数据量很小。
然后,标记可执行文件并运行printf
脚本:
device $ chmod a+x firmware.sh
device $ ./firmware.sh > firmware.bin
使用 BusyBox 检查设备上的校验和md5sum
是否firmware.bin
与主机上的原始固件映像匹配。
PS shell 双引号语法\x
逐字传递,因为它不是可识别的转义序列;因此我们不必将反斜杠加倍。
答案4
在您的电脑上:
ncat -l -p 3000 > file.name
在远程设备上:
busybox nc -w 3 <your PC IP> 3000 < file.name