import socket
import hashlib
importstructimport os
import settingclass FtpClient(object):
features= ['get', 'put', 'ls', 'cd', 'mkdir', 'rm'] # 客户端提供的命令提供功能
def __init__(self, server_ip, port, user, pwd):''':param server_ip: 服务器ip
:param port: 服务器端口
:param user: 用户名
:param pwd: 密码''' self.server_ip =server_ip
self.port=port
self.user=user
self.pwd=pwd
self.sock=socket.socket() # 初始化时创建套接字try:
self.sock.connect((self.server_ip, self.port)) # 连接服务器
except ConnectionRefusedError:
print('501', setting.CODE['501'])returnself.pwd_hash() # 密码hashifnot self.auth():return# 验证失败
# self.run() # 登录成功继续操作
def pwd_hash(self): # 对用户输入密码进行hash
md5= hashlib.md5(setting.MD5_SALT.encode('utf-8'))
md5.update(self.pwd.encode('utf-8'))
self.pwd=md5.hexdigest()
def auth(self): # 上传用户密码进行验证
account= ','.join([self.user, self.pwd])
self.sock.send(account.encode('utf-8'))
auth_result= self.sock.recv(1024).decode() # 获取登录结果if auth_result == '8000':
print(auth_result, setting.CODE[auth_result])
self.run()else:
print(auth_result, setting.CODE[auth_result])
self.sock.close()r