SFTP 连接 DNS 问题 - System.Net.Sockets.SocketException:请求的名称有效,但找不到请求类型的数据

问题描述 投票:0回答:5

我正在尝试通过 SharpSSH 连接到 ftp,如下所示:

Sftp Connection = new Sftp(ftpAddress, FTPLogin, FTPPasword);
Connection.Connect();

这会导致 JSchException:

System.Net.Sockets.SocketException: The requested name is valid, but no data of the requested type was found
at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
at System.Net.Dns.GetHostByName(String hostName)
at Tamir.SharpSsh.java.net.Socket..ctor(String host, Int32 port)
at Tamir.SharpSsh.jsch.Util.createSocket(String host, Int32 port, Int32 timeout)

经过一番搜索,我尝试了这段代码:

IPHostEntry ip = Dns.GetHostEntry(ftpAddress);

我得到了 SocketException: {No such host isknown}

现在一些背景知识 - 我可以通过主机名和 IP 地址(外部和内部)将 Filezilla 连接到 ftpAdress。 当我 >ping ftp.mydomain.com
我得到 >10.5.165.15
但是>ping -a 10.5.165.15
我得到>ftpnew.mydomain.com

如果我是对的,我会因为 DNS <> revDNS 问题而被拒绝。

我的问题是 - 我该怎么做才能真正让我的 sftp 连接正常工作。

c# dns sftp sharpssh reverse-dns
5个回答
4
投票

通过检查每种可能性找到了解决方案,这就是我设法建立连接的方式: 首先,我的 ftpAddress 设置为外部/内部 IP。

IPHostEntry ip = Dns.GetHostByName(ftpAddress);
Sftp Connection = new Sftp(ip.ToString(),FTPLogin,FTPPassword);
Connection.Connect()

看来我的错误与 DNS<>revDNS 无关,而是由于我尝试调用的主机地址中存在额外的“\”符号。


3
投票

仅输入主机的 IP 地址。 例如

错误:“sftp://10.11.12.13”这将导致错误 正确:“10.11.12.13”这样就可以了


2
投票

我面临着同样的问题,现在我找到了解决方案。 使用以下类型 ftpAddress(URL):

sftp.abcdefg.com
具有 22 个端口号。休息会是一样的。 请勿在 URL 末尾或开头使用任何类型的正斜杠“/”和反斜杠“\”。 我遇到了同样的问题,这个 URL =
sftp.abcdefg.com/


1
投票

当我稍微重新排列名称和地址时,我的就可以了。删除主机名开头的 sftp://。并在参数中添加回22端口。

 using X = Renci.SshNet;

     ConnectionInfo = new X.ConnectionInfo(_host, 22, _usr, 
        new X.AuthenticationMethod[] {
        new X.PasswordAuthenticationMethod (_usr, _pwd)
     }); //_host = yourfavoritesite.whatever.com -- take out sftp://

     SftpClient = new X.SftpClient(ConnectionInfo);
     SftpClient.Connect();

0
投票

此错误的另一个来源是服务器名称开头是否有空格,例如:

    <add key="SftpHost" value=" sftp.whatever.com" />
© www.soinside.com 2019 - 2024. All rights reserved.