-
Notifications
You must be signed in to change notification settings - Fork 0
/
telnet_copy.sh
122 lines (110 loc) · 2.47 KB
/
telnet_copy.sh
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/usr/bin/expect
#
# Expect ftp wrapper
#
# ftp to/from system as user ftp
set timeout 10
set verbose 0
proc usage {} {
puts "Transfer files using ftp"
puts "usage: eftp [-v] get <system> <remote file> <local file>"
puts " eftp [-v] put <system> <local file> <remote file>"
exit 1
}
if {[lindex $argv 0] == "-h" || [lindex $argv 0] == "-?"} {
usage
}
if {[lindex $argv 0] == "-v"} {
set verbose 1
}
set num_arg [expr [llength $argv] - $verbose]
if {$num_arg != 4} {
usage
}
set cmd [lindex $argv [expr $verbose + 0]]
set target [lindex $argv [expr $verbose + 1]]
set file1 [lindex $argv [expr $verbose + 2]]
set file2 [lindex $argv [expr $verbose + 3]]
if {$cmd != "get" && $cmd != "put"} {
puts "Invalid command"
usage
}
if {$cmd == "put" && ![file exists $file1]} {
puts "Source file $file1 doesn't exist"
exit 1
}
exp_log_user 0
if {$cmd == "get"} {
if {$verbose} {puts "Copying file from $target:$file1 to $file2"}
} else {
if {$cmd == "put"} {
if {$verbose} {puts "Copying file from $file1 to $target:$file2"}
} else {
puts "Invalid command"
if {$verbose} { usage }
exit 1
}
}
set ftp_result 0
spawn ftp $target
set timeout 2
expect {
"Name ($target:admin):" {
}
timeout {
puts "Error connecting to $target"
exit 1
}
}
send -- "ftp\r"
expect "Password:"
send -- "ftp\r" # change to your password
expect "ftp> "
send -- "binary\r"
expect "ftp> "
send -- "prompt\r"
expect "ftp> "
set timeout 40
send "$cmd $file1 $file2 \r"
expect {
"227 Entering Passive Mode" {
if {$verbose} { puts "Start transfer" }
}
"local: $file1: No such file or directory" {
puts "Local file $file1 is missing"
set ftp_result 1
}
timeout {
puts "timeout on start"
set ftp_result 1
}
}
expect {
"150 Opening BINARY mode data connection" {
}
-re {(\d+\s)(.*\n)} {
puts "ftp error occurred: '$expect_out(1,string) [string trim $expect_out(2,string)]'"
set ftp_result 1
}
timeout {
#puts "timeout2"
set ftp_result 1
}
}
if {0 == $ftp_result} {
expect {
"226 Transfer complete." {
if {$verbose} { puts "Transfer complete" }
}
timeout {
#puts "timeout2"
set ftp_result 1
}
}
}
expect "ftp> "
send "quit\r"
expect "Goodbye."
exp_wait
if {$verbose} { puts "Result $ftp_result" }
exit $ftp_result