我正在尝试使用silvertunnel netlib连接到tor隐藏服务,但我一直得到同样的例外:
线程中的异常“org.silvertunnel.netlib.layer.tor.directory.DirectoryManagerThread”java.lang.NoSuchMethodError:org.bouncycastle.asn1.ASN1InputStream.readObject()Lorg / bouncycastle / asn1 / DERObject; 在org.bouncycastle.openssl.PEMReader.readRSAPublicKey(PEMReader.java:193) 在org.bouncycastle.openssl.PEMReader.readObject(PEMReader.java:110) at org.silvertunnel.netlib.layer.tor.util.Encryption.extractPublicRSAKey(Encryption.java:342) 在org.silvertunnel.netlib.layer.tor.directory.AuthorityKeyCertificate。(AuthorityKeyCertificate.java:104) at org.silvertunnel.netlib.layer.tor.directory.AuthorityKeyCertificates。(AuthorityKeyCertificates.java:100) 在org.silvertunnel.netlib.layer.tor.directory.AuthorityKeyCertificates。(AuthorityKeyCertificates.java:80) 在org.silvertunnel.netlib.layer.tor.directory.Directory.getAuthorityKeyCertificates(Directory.java:492) 在org.silvertunnel.netlib.layer.tor.directory.Directory.updateNetworkStatusNew(Directory.java:324) 在org.silvertunnel.netlib.layer.tor.directory.Directory.refreshListOfServers(Directory.java:287) at org.silvertunnel.netlib.layer.tor.directory.DirectoryManagerThread.updateDirectory(DirectoryManagerThread.java:60) 在org.silvertunnel.netlib.layer.tor.directory.DirectoryManagerThread.run(DirectoryManagerThread.java:76)
我尝试过不同版本的bouncycastle,但我无法让它发挥作用。有谁知道问题可能是什么?
这是我的代码:
String host = "some_site.onion";
int port = 7878;
TcpipNetAddress remoteAddress = new TcpipNetAddress(host, port);
NetLayer netLayer = NetFactory.getInstance().getNetLayerById(NetLayerIDs.TOR);
netLayer.waitUntilReady();
NetSocket netSocket = netLayer.createNetSocket(null, null, remoteAddress);
BufferedReader br = new BufferedReader(new InputStreamReader(netSocket.getInputStream()));
System.out.println(br.readLine());
br.close();
netSocket.close();
答案 0 :(得分:0)
您的java安装中可能有一个版本的bouncy castle,并且由于一个版本试图调用另一个版本而导致此错误。检查您的JAVA_HOME/jre/lib/ext/
和JAVA_HOME/lib
目录,查找名称以“bcprov”开头的文件。
好的,既然你评论说没有用,我仍然认为你的类路径上有多个版本的bouncycastle。具体来说,我认为您有bcprov
和bcpkix
罐子的不同版本。所以让我们编写一个简短的java程序来找到它们:
import java.net.URL;
import java.util.Enumeration;
public class FindBouncy {
static void printResources(String n) throws Exception {
Enumeration<URL> e = FindBouncy.class.getClassLoader().getResources(n);
if (!e.hasMoreElements()) {
System.out.println(n + " not found!");
} else {
System.out.println(n + " found as:");
while(e.hasMoreElements()) {
System.out.println(" " + e.nextElement());
}
}
}
public static void main(String argv[]) throws Exception {
printResources("org/bouncycastle/openssl/PEMReader.class");
printResources("org/bouncycastle/asn1/ASN1InputStream.class");
}
}
在eclipse中运行它并找到“PEMReader”类(旧版本的bcpkix jar中的旧类)和“ASN1InputStream”类(应该在旧版和新版bcprov jar中的类)所在的位置从。使用彼此匹配的那些罐子的版本。
答案 1 :(得分:0)
Silvertunnel已过时,您应该使用SilverTunnel-NG代替。 SilverTunnel-NG正在使用spongycastle,因此它也与Android兼容。
您也可以在github上找到SilverTunnel-NG。