Featured image of post Shell File Transfer —— 适用于Linux/macOS的局域网文件传输程序

Shell File Transfer —— 适用于Linux/macOS的局域网文件传输程序

大一Linux开发实践课程作品

功能介绍

利用TCP/IP协议的局域网文件传输工具,通过ip地址及自定义的端口号进行连接。

运行环境

通过测试的运行环境:macOS Mojave 10.14 & Fedora Linux Workstation 29

依赖的软件包:dialog(图形库,需自己安装)、netcat(nc,用于对TCP/UDP进行读写,这两个系统自带)、net-tools(ifconfig,用于配置和显示Linux内核中网络接口,这两个系统自带)

Dialog安装方法:

macOS:使用brew包管理器安装。必要时请提供superuser权限。

在终端中输入以下命令

  1. brew安装命令:(如果安装过请跳过这一步)

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  1. 使用brew包管理器安装命令:

brew install dialog

fedora: 使用yum包管理器安装。

在终端中输入以下命令

sudo yum install dialog

运行截图

源代码

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
#!/bin/bash
send()
{
dialog --inputbox "请将文件拖到这里,或者输入绝对路径" 20 50 2> temp
if [ $? != 0 ]
then
return 6
fi
fileAddr=`cat temp`
fileName=`echo ${fileAddr##*/}`
dialog --inputbox "请输入您想使用的端口号" 20 50 2> temp
if [ $? != 0 ]
then
return 6
fi
sendPort=`cat temp`
dialog --inputbox "请输入接收方的ip地址" 20 50 2> temp
if [ $? != 0 ]
then
return 6
fi
recvIP=`cat temp`
dialog --title 正在发送 --infobox "正在发送文件$fileName " 20 50
echo $fileName | nc $recvIP $sendPort
if [ $? != 0 ]
then
dialog --colors --msgbox "\Z1 发送错误!请检查端口号及IP地址!" 0 0
return 6
fi
sleep 1
nc $recvIP $sendPort < $fileAddr
if [ $? != 0 ]
then
dialog --colors --msgbox "\Z1 发送错误!" 0 0
return 6
fi
fileSize=`ls -lh $fileAddr | awk '{print $5}'`
dialog --msgbox "发送完成。\n文件名:$fileName \n大小:${fileSize}" 20 50
}
recv()
{
dialog --inputbox "请输入您想使用的端口号" 20 50 2> temp
if [ $? != 0 ]
then
return 6
fi
recvPort=`cat temp`
dialog --title "请选择接收路径" --fselect "${HOME}/" 8 50 2> temp
if [ $? != 0 ]
then
return 6
fi
recvAddr=`cat temp`
localIP=`ifconfig | grep "inet" | awk '{ print $2}' | grep -v "127.0.0.1" | grep -v ":"`
dialog --title 等待接受 --infobox "本机IP:$localIP \n端口号:$recvPort" 20 50
nc -l $recvPort > temp
if [ $? != 0 ]
then
dialog --colors --msgbox "\Z1 接收错误!" 0 0
return 6
fi
recvFile=`cat temp`
dialog --infobox "正在接收文件 $recvFile ……" 20 50
nc -l $recvPort > filetemp
if [ $? != 0 ]
then
dialog --colors --msgbox "\Z1 接收错误!" 0 0
return 6
fi
mv filetemp ${recvAddr}/${recvFile}
fileSize=`ls -lh ${recvAddr}/${recvFile} | awk '{print $5}'`
dialog --msgbox "接收完成。\n文件名:$recvFile \n大小:${fileSize}" 20 50
}
mainUI()
{
dialog --cancel-label 退出 --title Shell文件传输助手 --menu " \n " 20 50 8 1 "发送文件" 2 "接收文件" 3 "关于" 4 "退出" 2> temp
a1=`cat temp`
case $a1 in
1)
send
if [ $? = 6 ]
then 
mainUI
fi
;;
2)
recv
if [ $? = 6 ]
then 
mainUI
fi
;;
3)
dialog --colors --msgbox "Shell文件传输助手 \n\nBeta Version 2019.3.5\n\n\Z6开发人员:\n王衔飞  李思涵  胡嘉慧  丁玲" 20 50
mainUI
;;
4)
return
;;
esac
}
mainUI
clear
rm -f temp
rm -f filetemp
Licensed under CC BY-NC-SA 4.0