Когда вы сделаете это:
URL url = new URL("http://vuln2014.picoctf.com:51818");
URLConnection con = url.openConnection();
Вы заключаете контракт, который говорит, что этот URL использует протокол http
. Когда вы вызываете openConnection
, он ожидает получить ответы http
, потому что вы использовали http://
в URL как протокол. 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
:
Добро пожаловать в Дедала Corp Spies RSA Service Generation Key. Публичный модуль, который вы должны использовать для отправки обновлений, приведен ниже. Не забывайте использовать показатель 65537. b4ab920c4772c5247e7d89ec7570af7295f92e3b584fc1a1a5624d19ca07cd72ab4ab9c8ec58a63c09f382aa319fa5a714a46ffafcb6529026bbc058fc49fb1c29ae9f414db4aa609a5cab6ff5c7b4c4cfc7c18844f048e3899934999510b2fe25fcf8c572514dd2e14c6e19c4668d9ad82fe647cf9e700dcf6dc23496be30bb
В этом случае я хотел бы использовать java.net.Socket
установить соединение, а затем прочитать строки. Это упрощенный подход, который предполагает, что есть 2 строки данных:
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();
}
А почему скручиваются и браузеры могут сделать это правильно? Они, вероятно, более снисходительны в отношении данных, которые они читают, и просто сбрасывают то, что считывается из порта, даже если оно не соответствует указанному протоколу (например, http
)
Что говорит stacktrace? –
Разве вы не задали этот же вопрос не 2 часа назад? –
@HovercraftFullOfEels: тот же вопрос был задан, за исключением того, что с ним не было никакого кода (изначально) –