我正在写一份工作,通过我的SOCKS5代理连接到客户端的FTP / S服务器,我正在使用Apache Commons Net软件包。问题是我的SOCKS代理配置为不需要身份验证,但我仍然遇到以下异常:
java.net.SocketException: SOCKS : authentication failed
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:443)
at java.net.Socket.connect(Socket.java:519)
我已经尝试将java.net.socks.username和password属性设置为空字符串,但我仍然可以使用它。有没有办法告诉代码不使用身份验证?深入挖掘底层资源我几乎认为它正在查询代理服务器的身份验证要求,但我不确定。
答案 0 :(得分:3)
好吧,问题是我的SOCKS代理 设置为要求身份验证,但也接受未经过身份验证的连接。我们使用Dante,而像Filezilla这样的程序足够聪明,可以遍历所有可接受的身份验证方法,看起来java.net包只是提供了第一种方法。由于我在sockd.conf文件中的身份验证配置如下:
method: username none
user.notprivileged: nobody
java.net要求用户名和密码。我只是将方法翻转为“无用户名”,Filezilla和java.net都正确地通过代理。这是一个IT解决方案,但无论是什么让代码工作,对吧?