當你這樣做:
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