使用 Python ftplib 获取远程 FTP 服务器中文件的 MD5 值

2024-05-14

使用 ftplib 将文件传输到服务器后,如何确定该文件与本地服务器中的文件的 MD5?

from ftplib import FTP
import hashlib

ftp = FTP('server')
ftp.login('username','password')
ftp.cwd('path_to_upload')

file_to_upload = open(file,'rb') 
filename = os.path.basename(file)
ftp.storbinary('STOR ' + filename, file_to_upload)

local_file_hash = hashlib.md5(open(file, 'rb').read()).hexdigest()
# not sure how to achieve this
server_file_hash = hashlib.md5(open(filename, 'rb').read()).hexdigest() 

if local_file_hash == server_file_hash:
     print("Successful transfer")
else:
     print("Failure transfer")

首先,确保您的远程服务器完全支持校验和计算。许多人没有。我相信甚至没有标准的 FTP 命令来计算远程文件的校验和。有很多提案,也有很多专有解决方案。

最新的提案是:
https://datatracker.ietf.org/doc/html/draft-bryan-ftpext-hash-02 https://datatracker.ietf.org/doc/html/draft-bryan-ftpext-hash-02

可用于计算校验和的一些命令是:XSHA1, XSHA256, XSHA512, XMD5, MD5, XCRC and HASH.

你可以测试一下WinSCP FTP 客户端 https://winscp.net/。 WinSCP 支持所有前面提到的命令。测试其校验和计算函数 https://winscp.net/eng/docs/ui_properties#checksum or the checksum脚本命令 https://winscp.net/eng/docs/scriptcommand_checksum。如果他们工作的话,启用日志记录 https://winscp.net/eng/docs/logging并检查 WinSCP 对您的服务器使用什么命令和语法。(我是WinSCP的作者)

一旦你发现你的服务器支持什么命令(如果有的话),你可以使用FTP.voidcmd method https://docs.python.org/3/library/ftplib.html#ftplib.FTP.voidcmd:

ftp.voidcmd("XSHA1 " + filename)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python ftplib 获取远程 FTP 服务器中文件的 MD5 值 的相关文章

随机推荐