当你这样做:
URL url = new URL("http://vuln2014.picoctf.com:51818");
URLConnection con = url.openConnection();
你正在进入,表明此URL使用http
协议的合同。当您拨打openConnection
时,由于您在URL中使用http://
作为协议,因此预计会得到http
响应。该Java Documentation说:
如果URL的协议(如HTTP或JAR)存在属于以下包之一或其子之一的公共,专用URLConnection子:java.lang中,Java的。 io,java.util,java.net,返回的连接将是该子类的。 例如,对于HTTP,HttpURLConnection将返回,对于JAR,将返回JarURLConnection。
您连接到的服务器只返回一对数据。我用命令nc vuln2014.picoctf.com 51818
检索它们。没有http
响应代码像HTTP/1.1 200 OK
:
欢迎代达罗斯公司间谍RSA密钥生成服务。下面是您应该用来发送更新的公共模数。请记住,使用指数65537 b4ab920c4772c5247e7d89ec7570af7295f92e3b584fc1a1a5624d19ca07cd72ab4ab9c8ec58a63c09f382aa319fa5a714a46ffafcb6529026bbc058fc49fb1c29ae9f414db4aa609a5cab6ff5c7b4c4cfc7c18844f048e3899934999510b2fe25fcf8c572514dd2e14c6e19c4668d9ad82fe647cf9e700dcf6dc23496be30bb
在这种情况下,我会用java.net.Socket
建立连接,然后读线。这是一个简单的方法,假设有两行数据:
Socket theSocket;
try {
theSocket = new Socket("vuln2014.picoctf.com", 51818);
BufferedReader inFile = new BufferedReader(new InputStreamReader(theSocket.getInputStream()));
String strGreet = inFile.readLine();
String strData = inFile.readLine();
} catch (IOException e) {
e.printStackTrace();
}
至于为什么curl和浏览器可以正确渲染它?他们可能会对他们读取的数据更为宽松,并且只会转储从端口读取的内容,即使它不符合指定的协议(如http
)
stacktrace说什么? – 2014-11-02 02:46:26
2个小时前你不是只问这个问题吗? – 2014-11-02 02:47:00
@HovercraftFullOfEels:同样的问题被问到,除了没有代码(最初) – 2014-11-02 02:51:42