diff --git a/ftpsClient.exe b/ftpsClient.exe index 8fcc361..052c08f 100644 Binary files a/ftpsClient.exe and b/ftpsClient.exe differ diff --git a/ftpsClient.go b/ftpsClient.go index dd0382a..7f71bba 100644 --- a/ftpsClient.go +++ b/ftpsClient.go @@ -24,6 +24,7 @@ var ( retry int = 0 intrv int = 0 ) +var ftp *goftp.FTP func init() { flag.StringVar(&host, "h", "203.93.100.58", "FTPS Server Address") @@ -47,46 +48,61 @@ func main() { os.Exit(1) } - var err error - var ftp *goftp.FTP - - ftp, err = goftp.Connect(fmt.Sprintf("%s:%s", host, port)) + err := _InitFTP() if err != nil { - log.Printf("[ERR] %s\r\n", err.Error()) - os.Exit(1) - } - defer ftp.Close() - - cfg := tls.Config{ - InsecureSkipVerify: true, - MinVersion: tls.VersionTLS10, - } - - err = ftp.AuthTLS(&cfg) - if err != nil { - log.Printf("[ERR] %s\r\n", err.Error()) - os.Exit(1) - } - - err = ftp.Login(user, pswd) - if err != nil { - log.Printf("[ERR] %s\r\n", err.Error()) os.Exit(1) } switch act { case "list": - _List(ftp, rmt) + _List(rmt) case "dnld": - _Download(ftp, loc, rmt) + _Download(loc, rmt) case "upld": - _Upload(ftp, loc, rmt) + _Upload(loc, rmt) default: - _List(ftp, loc) + _List(rmt) } } -func _List(ftp *goftp.FTP, path string) { +func _InitFTP() error { + var err error + for i := 0; i <= retry; i++ { + if i > 0 { + fmt.Println("[###] Retrying Connect ...") + } + ftp, err = goftp.Connect(fmt.Sprintf("%s:%s", host, port)) + if err != nil { + log.Printf("[ERR] %s\r\n", err.Error()) + continue + } + defer ftp.Close() + + cfg := tls.Config{ + InsecureSkipVerify: true, + MinVersion: tls.VersionTLS10, + } + + err = ftp.AuthTLS(&cfg) + if err != nil { + log.Printf("[ERR] %s\r\n", err.Error()) + continue + } + + err = ftp.Login(user, pswd) + if err != nil { + log.Printf("[ERR] %s\r\n", err.Error()) + continue + } + } + if err != nil { + log.Printf("[***] %s; %s\r\n", rmt, loc) + return err + } + return nil +} + +func _List(path string) { files, err := ftp.List(path) if err != nil { log.Printf("[ERR] %s\r\n", err.Error()) @@ -97,14 +113,14 @@ func _List(ftp *goftp.FTP, path string) { } } -func _Download(ftp *goftp.FTP, local, remote string) { +func _Download(local, remote string) { log.Printf("[MSG] Downloading: %s\r\n", remote) var err error base := filepath.Base(remote) for i := 0; i <= retry; i++ { if i > 0 { time.Sleep(time.Second * time.Duration(intrv)) - log.Printf("[***] Retrying Download %d/%d: %s\r\n", i, retry, remote) + log.Printf("[###] Retrying Download %d/%d: %s\r\n", i, retry, remote) } _, err = ftp.Retr(remote, func(rdr io.Reader) error { wtr, oserr := os.Create(local + base) @@ -123,20 +139,20 @@ func _Download(ftp *goftp.FTP, local, remote string) { } } if err != nil { - log.Printf("[***] %s\r\n", err.Error()) - log.Printf("[ERR] Download NG: %s\r\n", remote) + log.Printf("[***] %s; %s\r\n", remote, local) + log.Printf("[ERR] Download NG: %s; %s\r\n", remote, err.Error()) return } log.Printf("[MSG] Download OK: %s\r\n", remote) } -func _Upload(ftp *goftp.FTP, local, remote string) { +func _Upload(local, remote string) { log.Printf("[MSG] Uploading: %s\r\n", local) var err error for i := 0; i <= retry; i++ { if i > 0 { time.Sleep(time.Second * time.Duration(intrv)) - log.Printf("[***] Retrying Upload %d/%d: %s\r\n", i, retry, local) + log.Printf("[###] Retrying Upload %d/%d: %s\r\n", i, retry, local) } err = ftp.Cwd(remote) if err != nil { @@ -149,8 +165,8 @@ func _Upload(ftp *goftp.FTP, local, remote string) { break } if err != nil { - log.Printf("[***] %s\r\n", err.Error()) - log.Printf("[ERR] Upload NG: %s\r\n", local) + log.Printf("[***] %s; %s\r\n", remote, local) + log.Printf("[ERR] Upload NG: %s; %s\r\n", local, err.Error()) return } log.Printf("[MSG] Upload OK: %s\r\n", local) diff --git a/go.mod b/go.mod index 4c0ff6a..9b47b33 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ module ftpsClient -go 1.21.1 +go 1.20 require gopkg.in/dutchcoders/goftp.v1 v1.0.0-20170301105846-ed59a591ce14