(原) 用Croc跨平台、跨内外网实现文件上传服务器

原创文章,请后转载,并注明出处。

croc是golang开发的跨平台文件传送工具。不仅如此,还实现了跨内外网的文件/文本传输。
之前的文章就提到可以将此实现:跨平台的文件上传服务器。这里的服务器还可以是内网服务器。

服务器脚本server.sh

#!/bin/bash
while true; do
      croc_pass=$(cat ./croc_pass.txt)
      #echo $croc_pass
      croc --overwrite --yes $croc_pass
      sleep 5s
done

这里是将croc_pass.txt中的内容作为croc的传输密码。若客户端上传修改内容的croc_pass.txt文件,即实现了由客户端来动态修改。

服务器在接收到一个文件后,即等待下一次发送。若没有需要传输的文件,会显示超时。

而客户端就是常规的使用:croc send –code 123123 文件名

对比其它上传方案,如FTP、SCP,最大的特点在于可以对内网服务器进行传输。存在的问题是不支持命令。

或许通过croc的文本传送功能,也能实现类似命令效果。


进一步发现

在发送文本的指令中:
发送端:croc send –code 123123 –text “这是什么what”
接收端:croc –yes –overwrite 123123 | awk ‘{print $0}’
意即可以将接收端获取的文本信息赋值给变量

croc两种传送内容:文件、文本。当传送文件时,变量不能获取到内容。
这里利用此特点来判断是否为传送的文本。当传送为文本时,当作指令来执行。
下面代码仅是执行了指令,并没有返回给客户端。这需要客户端也开个服务器来接收发过来的反馈信息。
这样,一个交互就完成了。

修改服务端代码

#!/bin/bash
while true; do
      croc_pass=$(cat ./croc_pass.txt)
      echo $croc_pass
      info=`croc --overwrite --yes $croc_pass`
      if [ "$info" != "" ]; then
         echo "指令:" $info
         ret=`$info`
         echo $ret
      fi
      sleep 5s
done

croc是否可以仅在内网使用,毕竟有些网络环境完全禁止了外网。而利用croc比较无感知:一人发,一人收,不管是谁,不管IP在哪里。虽然有docker版的中继服务器,但太黑箱了,也不知道是否不需要外网通信。

测试:

  1. 建立中继: croc relay (可以就这么简单,1.80就是它的IP)
  2. 发送: croc –relay “192.168.1.80:9009” send file.txt
  3. 接收:croc –relay “192.168.1.80:9009”

测试结果:内网可用,无需外网参与。

相关文章