protected void sendRequest(PrintWriter out, String[] msg) { for (int i = 0; i < msg.length; i++) { if (Debug.get(Debug.Communication)) { System.err.println(">>>" + msg[i]); } out.print(msg[i] + crlf); } if (Debug.get(Debug.Communication)) { System.err.println(">>>"); } out.print(crlf); out.flush(); }
public SSLResult fingerprint() throws IOException, FingerprintError { SSLConfigCollector scc; scc = new SSLConfigCollector(host, port, si); scc.setCertValidator(cv); startDate = new Date(); sslSupport = SSLResult.UNKNOWN; // If a delay is set, wait some time, except for // the first request if (!initial && (delay > 0)) { if (Debug.get(Debug.Delay)) { System.err.println("Delaying request."); } try { Thread.sleep(delay); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } initial = false; try { scc.probe(); sslSupport = SSLResult.SUPPORTED; sslSupportReason = null; } catch (NoSSLException e) { // This exception is thrown when the protocol support // for ssl is not available sslSupport = SSLResult.UNSUPPORTED; sslSupportReason = e.toString(); } catch (FingerprintException e) { sslSupport = SSLResult.UNSUPPORTED; sslSupportReason = e.toString(); } catch (IOException e) { sslSupport = SSLResult.UNKNOWN; sslSupportReason = e.toString(); } endDate = new Date(); protos = scc.getSupportedProtos(); ProbeResult pres = new ProbeResult( host, port, startDate, endDate, sslSupport, sslSupportReason, scc.getServerCertificates(), scc.serverCertificateVerifies(), scc.serverCertNameMatch()); pres.setProtosResult(protos); return pres; }
public void setCredentials(String uid, String pass) { authID = uid; authPW = pass; if (Debug.get(Debug.SockInit)) { System.err.println("HttpProxySocketInitialiser: " + " uid " + authID + " pw " + authPW); } }
protected void prepareAuthorisation(String authVal) throws FingerprintError { if (authVal == null) { throw new HttpProxyError("Authentication " + "challenge missing"); } int idx = authVal.indexOf(' '); String scheme = authVal.substring(0, idx).toLowerCase(); String param; if (authVal.length() > idx) { param = authVal.substring(idx + 1); } else { param = ""; } if (!scheme.equals("basic")) { throw new HttpProxyError("Auth scheme '" + scheme + "' not supported"); } if (Debug.get(Debug.SockInit)) { System.err.println("prepareAuthorisation: " + "using scheme " + scheme); } authenticator = "Basic " + Base64.encode(authID + ":" + authPW); if (Debug.get(Debug.SockInit)) { System.err.println("prepareAuthorisation: auth=" + authenticator); } }
public Socket createSocket(String host, int port) throws IOException, FingerprintException, FingerprintError { Socket s = new Socket(); s.connect(new InetSocketAddress(proxyHost, proxyPort), 1000 * timeout); PrintWriter out = new PrintWriter(s.getOutputStream()); InputStreamReader isr = new InputStreamReader(s.getInputStream()); BufferedReader in = new BufferedReader(isr); String[] connHdr = { "CONNECT " + host + ":" + port + " HTTP/1.1", "Host: " + host + ":" + port, "Proxy-Connection: close" }; String[] connReq = null; if (authRequired) { connReq = new String[connHdr.length + 1]; for (int i = 0; i < connHdr.length; i++) { connReq[i] = connHdr[i]; } connReq[connHdr.length] = "Proxy-Authorization: " + authenticator; } else { connReq = new String[connHdr.length]; for (int i = 0; i < connHdr.length; i++) { connReq[i] = connHdr[i]; } } sendRequest(out, connReq); HttpResponseHeader hdr = new HttpResponseHeader(in); int status = hdr.getStatusCode(); if (Debug.get(Debug.Communication)) { System.err.println("Got status " + status); } /* Now check the status code and act upon it */ if ((status / 100) == 2) { // Code is 2xx return s; } if (((status / 100) == 4) && (status != 407)) { throw new HttpProxyError("Proxy request failed"); } if ((status == 407) && authRequired) { /* We already sent authorisation info, * but the proxy did not accept it. * So we can only stop here, as * we do not have the right credentials * at hand. */ throw new HttpProxyError("Cannot authenticate " + "to proxy, wrong " + "credentials?"); } if (status == 407) { if (Debug.get(Debug.SockInit)) { System.err.println("Preparing proxy " + "authenticator for " + hdr.getProxyAuthInfo()); } prepareAuthorisation(hdr.getProxyAuthInfo()); authRequired = true; return createSocket(host, port); } return s; }