import cgi,os,sys,time import types from snakeserver.snakelet import Snakelet from snakeserver.webform import FormUploadedFile, FormFileUploadError class Snoop(Snakelet): """request snooper""" # no special init method... sessionType=Snakelet.SESSION_DONTCREATE def serve(self, request, response): # don't set this, just take the default...: request.encoding="UTF-8" try: request.maxPOSTsize=self.WebApp.configItems["maxPOSTsize"] form = request.getForm() except FormFileUploadError,x: response.sendError(413,"upload too large") return out = response.getOutput() print >>out, '' print >>out, 'Request Sniffer' print >>out, '' print >>out, '' print >>out, '

Request Sniffer

' print >>out, '

Form params|' print >>out, 'Request info|' print >>out, 'HTTP headers' self.print_form(form,out) print >>out, '

Request parameters

' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' print >>out, '' session=request.session if session: print >>out,"" print >>out,"" else: print >>out,"" print >>out, '
ItemValue
Method', self.escape(request.getMethod()),'
Full request URL',self.escape(request.getRequestURL()),'
Plain request URL',request.getRequestURLplain(),'
Full URL of the page',self.fullurl,'
Full Query args', self.escape(request.getFullQueryArgs()),'
Arg', self.escape(request.arg),'
PathInfo', self.escape(request.PATH_INFO),'
Query', self.escape(request.QUERY_STRING),'
url',self.url,'
Remote host', self.escape(request.getRemoteHost()),'
Remote addr', self.escape(request.getRemoteAddr()),'
Real Remote addr', self.escape(request.getRealRemoteAddr()),'
Auth', self.escape(request.getAuth()),'
Vhost', self.WebApp.virtualHost,'
Server base URL', request.getBaseURL(),'
Session ID",session.ID+"
Session New?",session.isnew,"
Sessionnot present
' print >>out, '

All HTTP request headers

' print >>out, '' print >>out, '' k=request.getAllHeaders().keys() k.sort() for h in k: hv=request.getHeader(h) print >>out,"" print >>out, "
HeaderValue
",h,"",self.escape(hv),"
" print >>out,'\n' def print_form(self, form,outs): """Dump the contents of a form as HTML.""" keys = form.keys() keys.sort() print >>outs, '

Form Contents (form-POST or GET params)

' if not keys: print >>outs, "

No form fields are present." else: print >>outs, '' print >>outs, '' for key in keys: print >>outs, "" print >>outs, "
Form fieldTypeValue
" + self.escape(key) + "", value = form[key] if type(value) in types.StringTypes: print >>outs,"str",self.escape(value) elif type(value)==type([]): print >>outs,"list",' | '.join( [ self.escape(v) for v in value] ) elif isinstance(value, FormUploadedFile): print >>outs,"uploaded file" print >>outs, "" print >>outs, "" print >>outs, "" print >>outs, "" print >>outs, "" print >>outs, "" contents=value.file.read(2000) print >>outs,"" if truncated: print >>outs, "" else: print >>outs,"not shown (binary data)" print >>outs,"
filename",value.filename,"
mimeType",value.mimeType,"
typeOptions",value.typeOptions,"
disposition",value.disposition,"
disposition_options",value.dispositionOptions,"
content size",len(contents) if value.file.read(1): truncated=True print >>outs,"(truncated to 2000!!)" else: truncated=False print >>outs, "
partial content", else: print >>outs, "
content", if value.mimeType.startswith("text/"): print >>outs,"
"+self.escape(contents)
                        if truncated:
                            print >>outs," …"
                        print >>outs,"
" print >>outs,"
"