无法使用 Python ftplib 连接到服务器,但 PuTTY Plink 可以工作
Cannot connect to server with Python ftplib, but PuTTY Plink works
抱歉,如果这听起来太基础,或者如果我在搜索过程中没有找到重复项:
例如,这些没有帮助:
- Python ftplib WinError 10060
- Python FTP cannot connect, but using client like FileZilla with same credentials works
并且 ftplib
或其他教程中的示例对我不起作用,文档与其说是有用,不如说是令人困惑。
我一定是做错了什么基本错误,或者我的网络配置有特殊设置可能会阻止 ftplib
正常工作?我的配置。 PythonWin10 上的 3.6.3。
我的问题:下面的代码有什么问题?
import ftplib
host = '0.0.0.0'
user = 'user'
passwd = 'XXXX'
with ftplib.FTP(host=host, user=user, passwd=passwd) as ftp:
print(ftp.dir())
一段时间后,我收到错误消息:
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
使用 plink
的不同方法:
但是,以下使用 plink
在命令行中对我来说效果很好。
因此,主机、用户或密码或连接似乎没有任何问题。
plink -ssh -batch user@0.0.0.0 -pw XXXX "cd SubDir/SubSubDir/; ls"
但我认为 ftplib
与其乱用 plink
和 subprocess
,不如说更方便。谢谢指点。
也许可以尝试不同的方法,首先确保您通过 ping 连接到目标 IP,然后尝试使用 ftplib 登录。这是一个例子,让我知道这是否是你的方向:
import ftplib
from ftplib import FTP , error_perm
import subprocess
import time
def ping_to_target (ip):
print(f"Ping ---> {ip}")
process = subprocess.Popen("ping " + ip + " -n 10 " , shell=True , stdout=subprocess.PIPE)
time.sleep(0.5)
for line in process.stdout:
if b"Destination" in line or b"Request timed out" in line or b"failure" in line:
return False
print(f"ping ---> {ip} done")
return True
def some_func(host , username , password):
if not ping_to_target(host):
return False
# CONNECT TO TARGET
ftp = FTP (host)
ftp.login(username , password)
ftp.getwelcome()
我希望这就是你问题的意思
Plink 是一个 SSH 客户端。 SSH 与 FTP 无关。您可能想使用 SFTP 连接,这是一个运行在 SSH 之上的完全不同的协议。
对于 Python 中的 SFTP,请使用 Paramiko 或 pysftp。
抱歉,如果这听起来太基础,或者如果我在搜索过程中没有找到重复项:
例如,这些没有帮助:
- Python ftplib WinError 10060
- Python FTP cannot connect, but using client like FileZilla with same credentials works
并且 ftplib
或其他教程中的示例对我不起作用,文档与其说是有用,不如说是令人困惑。
我一定是做错了什么基本错误,或者我的网络配置有特殊设置可能会阻止 ftplib
正常工作?我的配置。 PythonWin10 上的 3.6.3。
我的问题:下面的代码有什么问题?
import ftplib
host = '0.0.0.0'
user = 'user'
passwd = 'XXXX'
with ftplib.FTP(host=host, user=user, passwd=passwd) as ftp:
print(ftp.dir())
一段时间后,我收到错误消息:
TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
使用 plink
的不同方法:
但是,以下使用 plink
在命令行中对我来说效果很好。
因此,主机、用户或密码或连接似乎没有任何问题。
plink -ssh -batch user@0.0.0.0 -pw XXXX "cd SubDir/SubSubDir/; ls"
但我认为 ftplib
与其乱用 plink
和 subprocess
,不如说更方便。谢谢指点。
也许可以尝试不同的方法,首先确保您通过 ping 连接到目标 IP,然后尝试使用 ftplib 登录。这是一个例子,让我知道这是否是你的方向:
import ftplib
from ftplib import FTP , error_perm
import subprocess
import time
def ping_to_target (ip):
print(f"Ping ---> {ip}")
process = subprocess.Popen("ping " + ip + " -n 10 " , shell=True , stdout=subprocess.PIPE)
time.sleep(0.5)
for line in process.stdout:
if b"Destination" in line or b"Request timed out" in line or b"failure" in line:
return False
print(f"ping ---> {ip} done")
return True
def some_func(host , username , password):
if not ping_to_target(host):
return False
# CONNECT TO TARGET
ftp = FTP (host)
ftp.login(username , password)
ftp.getwelcome()
我希望这就是你问题的意思
Plink 是一个 SSH 客户端。 SSH 与 FTP 无关。您可能想使用 SFTP 连接,这是一个运行在 SSH 之上的完全不同的协议。
对于 Python 中的 SFTP,请使用 Paramiko 或 pysftp。