लुइगी ड्रैगन की लिपि वास्तव में पुरानी है और हमेशा असफल लगती है।
HttpURLConnection NTLM के साथ काम कर सकते हैं अगर आप को जोड़ने के पुस्तकालय jcifs, इस उदाहरण नवीनतम के साथ jcifs-1.3.18 काम करता है:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.impl.auth.NTLMEngineException;
public class TestNTLMConnection {
public static void main(String[] args) throws UnknownHostException, IOException, NTLMEngineException {
// Method 1 : authentication in URL
jcifs.Config.registerSmbURLHandler();
URL urlRequest = new URL("http://domain%5Cuser:[email protected]/");
// or Method 2 : authentication via System.setProperty()
// System.setProperty("http.auth.ntlm.domain", "domain");
// System.setProperty("jcifs.smb.client.domain", "domain");
// System.setProperty("jcifs.smb.client.username", "user");
// System.setProperty("jcifs.smb.client.password", "pass");
// Not verified // System.setProperty("jcifs.netbios.hostname", "host");
// System.setProperty("java.protocol.handler.pkgs", "jcifs");
// URL urlRequest = new URL("http://127.0.0.1:8180/simulate_get.php");
HttpURLConnection conn = (HttpURLConnection) urlRequest.openConnection();
StringBuilder response = new StringBuilder();
try {
InputStream stream = conn.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
String str = "";
while ((str = in.readLine()) != null) {
response.append(str);
}
in.close();
System.out.println(response);
} catch(IOException err) {
System.out.println(err);
} finally {
Map<String, String> msgResponse = new HashMap<String, String>();
for (int i = 0;; i++) {
String headerName = conn.getHeaderFieldKey(i);
String headerValue = conn.getHeaderField(i);
if (headerName == null && headerValue == null) {
break;
}
msgResponse.put(headerName == null ? "Method" : headerName, headerValue);
}
System.out.println(msgResponse);
}
}
}
और अगर आप प्रत्येक हाथ मिलाना की सामग्री के बारे में उत्सुक हैं, तो आप jcifs और सॉकेट का उपयोग कर एक और उदाहरण मिल सकते हैं इस thread पर।
यह भी ध्यान रखें कि प्रमाणीकरण के लिए एनटीएलएम का उपयोग करने में, सक्रिय हमलावर वैध उपयोगकर्ता की वार्ता का उपयोग कर [अपने स्वयं के सत्र को प्रमाणित कर सकते हैं] (http://static.usenix.org/event/sec10/tech/slides/geer.pdf) सर्वर के साथ। – Michael