【问题标题】:Resolving DNS adress after proxy in SSH.NET在 SSH.NET 中代理后解析 DNS 地址
【发布时间】:2019-05-01 15:19:47
【问题描述】:

我在 C# 中使用 SSH.Net,在 SOCKS5 代理后面连接期间,我收到以下异常:

System.Net.Sockets.SocketException (0x80004005): No such host is known
   at System.Net.Dns.GetAddrInfo(String name)
   at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
   at System.Net.Dns.GetHostAddresses(String hostNameOrAddress)
   at Renci.SshNet.Session.ConnectSocks5()
   at Renci.SshNet.Session.Connect()
   at Renci.SshNet.BaseClient.Connect()

使用 WinScp 在站点设置中选择了Do DNS name lookup at proxy end 选项后,从同一代理后的同一台计算机到同一服务器的连接可以无缝运行:

有没有办法告诉 SSH.Net 做同样的事情?

【问题讨论】:

    标签: c# networking proxy dns ssh.net


    【解决方案1】:

    这似乎是不可能的。

    SSH.NET 总是doing DNS resolving locally:

    var ip = DnsAbstraction.GetHostAddresses(ConnectionInfo.Host)[0];
    
    //  Send address type and address
    if (ip.AddressFamily == AddressFamily.InterNetwork)
    {
        SocketWriteByte(0x01);
        var address = ip.GetAddressBytes();
        SocketAbstraction.Send(_socket, address);
    }
    else if (ip.AddressFamily == AddressFamily.InterNetworkV6)
    {
        SocketWriteByte(0x04);
        var address = ip.GetAddressBytes();
        SocketAbstraction.Send(_socket, address);
    }
    else
    {
        throw new ProxyException(string.Format("SOCKS5: IP address '{0}' is not supported.", ip));
    }
    

    如果您愿意修改 SSH.NET 代码,则需要将代码替换为类似(未经测试):

    // Send address type and address
    
    SocketWriteByte(0x03); // Resolve by proxy
    
    var host = SshData.Ascii.GetBytes(ConnectionInfo.Host);
    
    SocketWriteByte((byte)host.Length);
    
    SocketAbstraction.Send(_socket, host);
    

    应该相当于this PuTTY/WinSCP code:

    assert(type == ADDRTYPE_NAME);
    command[3] = 3;
    sk_getaddr(p->remote_addr, command+5, 256);
    command[4] = strlen(command+5);
    len = 7 + command[4];  /* 4 hdr, 1 len, N addr, 2 trailer */
    

    【讨论】:

    猜你喜欢
    • 2022-10-24
    • 2018-11-04
    • 2012-09-27
    • 1970-01-01
    • 2010-11-01
    • 2018-06-04
    • 2016-04-08
    • 2020-10-11
    • 2021-10-14
    相关资源
    最近更新 更多