我想从连接受SSL保护的服务器读取数据,并尝试实施长轮询dos攻击。如何通过SSL套接字与服务器正确通信?这段代码没有从服务器接收任何东西(以VK为例)。
package socket;
import javax.net.ssl.SSLSocketFactory;
import java.io.IOException;
import java.util.Scanner;
public class Main
{
private final static String target = "vk.com";
public static void main(String[] args) throws IOException
{
System.setProperty("javax.net.ssl.keyStore", "/home/aoizora/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
try (var s = (SSLSocket) SSLSocketFactory.getDefault().createSocket(target, 443);
var in = new Scanner(s.getInputStream());
var out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s.getOutputStream()))))
{
s.startHandshake();
out.print("GET / HTTP/1.1\r\n");
out.write(String.format("Host: %s", target));
out.println();
while (in.hasNextLine())
{
System.out.println(in.nextLine());
}
}
}
}
我生成并连接了 SSL 证书,但没有帮助。
System.setProperty("javax.net.ssl.keyStore", "/home/aoizora/keystore.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "changeit");
您的代码中有两个问题 - header 之后没有空行,并且在输出到套接字完成后
Host您没有刷新缓冲区(又名)。out.flush()这是一个工作示例: