/* * 1.19 02/25/98 * * Copyright (c) 1995-1997 Sun Microsystems, Inc. All Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING * THIS SOFTWARE OR ITS DERIVATIVES. * * CopyrightVersion 1.0 */ import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import javax.security.cert.*; import sun.security.x509.*; /** * Snoop servlet. This servlet simply echos back the request line and * headers that were sent by the client, plus any HTTPS information * which is accessible. * * @version 1.19 98/02/25 * @author David Connelly */ public class SnoopServlet extends HttpServlet { public void doPost (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { //value chosen to limit denial of service if (req.getContentLength() > 8*1024) { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("Too big"); out.println("

Error - content length >8k not "); out.println("

"); } else { doGet(req, res); } } public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(""); out.println("Snoop Servlet"); out.println(""); out.println("

Requested URL:

"); out.println("
");
	out.println (HttpUtils.getRequestURL (req).toString ());
	out.println("
"); Enumeration enum = getServletConfig().getInitParameterNames(); if (enum != null) { boolean first = true; while (enum.hasMoreElements()) { if (first) { out.println("

Init Parameters

"); out.println("
");
		    first = false;
                }
		String param = (String) enum.nextElement();
                out.println(" "+param+": "+getInitParameter(param));
	    }
	    out.println("
"); } out.println("

Request information:

"); out.println("
");
	print(out, "Request method", req.getMethod());
	print(out, "Request URI", req.getRequestURI());
	print(out, "Request protocol", req.getProtocol());
	print(out, "Servlet path", req.getServletPath());
	print(out, "Path info", req.getPathInfo());
	print(out, "Path translated", req.getPathTranslated());
	print(out, "Query string", req.getQueryString());
	print(out, "Content length", req.getContentLength());
	print(out, "Content type", req.getContentType());
	print(out, "Server name", req.getServerName());
	print(out, "Server port", req.getServerPort());
	print(out, "Remote user", req.getRemoteUser());
	print(out, "Remote address", req.getRemoteAddr());
	print(out, "Remote host", req.getRemoteHost());
	print(out, "Authorization scheme", req.getAuthType());
	out.println("
"); Enumeration e = req.getHeaderNames(); if (e.hasMoreElements()) { out.println("

Request headers:

"); out.println("
");
	    while (e.hasMoreElements()) {
		String name = (String)e.nextElement();
		out.println(" " + name + ": " + req.getHeader(name));
	    }
	    out.println("
"); } e = req.getParameterNames(); if (e.hasMoreElements()) { out.println("

Servlet parameters (Single Value style):

"); out.println("
");
	    while (e.hasMoreElements()) {
		String name = (String)e.nextElement();
		out.println(" " + name + " = " + req.getParameter(name));
	    }
	    out.println("
"); } e = req.getParameterNames(); if (e.hasMoreElements()) { out.println("

Servlet parameters (Multiple Value style):

"); out.println("
");
	    while (e.hasMoreElements()) {
		String name = (String)e.nextElement();
		String vals[] = (String []) req.getParameterValues(name);
		if (vals != null) {
		    out.print(" " + name + " = "); 
		    out.println(vals[0]);
		    for (int i = 1; i");
	    }
	    out.println("
"); } String charset = res.getCharacterEncoding (); out.println ("

Response Information:

"); out.println ("
");
	out.println ("MIME character encoding: " + charset);
	out.println ("
"); String cipherSuite = (String) req.getAttribute ("javax.net.ssl.cipher_suite"); if (cipherSuite != null) { X509Certificate certChain [] = (X509Certificate []) req.getAttribute ("javax.net.ssl.peer_certificates"); out.println ("

HTTPS Information:

"); out.println("
");

	    out.println ("Cipher Suite:  " + cipherSuite);

	    if (certChain != null) {
		for (int i = 0; i < certChain.length; i++) {
		    out.println ("client cert chain [" + i + "] = "
			+ certChain [i].toString ());
		}
	    }

	    // javax.net.ssl.session --> ssl.Session object
	    // ... has above data plus creation and last used dates

	    out.println("
"); } out.println(""); } private void print(PrintWriter out, String name, String value) throws IOException { out.print(" " + name + ": "); out.println(value == null ? "<none>" : value); } private void print(PrintWriter out, String name, int value) throws IOException { out.print(" " + name + ": "); if (value == -1) { out.println("<none>"); } else { out.println(value); } } public String getServletInfo() { return "A servlet that shows the request headers sent by the client"; } }