Hello,
I'm trying to write a POX module to identify http GET requests to specific
IP addresses and react based on the page requested, but I'm struggling with
the http part. There doesn't seem to be a POX http packet class, so I
assume I need to convert the raw bytes read from the wire into a string
representation of the http message. However the couple of approaches I
tried all failed miserably. Specifically, after retrieving the tcp packet
in my PacketIn handler like this:

tcp = event.parsed.find('tcp')
if tcp is not None and tcp.parsed:

any attempt to call tcp.payload() will result in a TypeError message
(cannot call str). Calling tcp.next.decode("utf-8") and trying to print
that through log.debug will throw a "TypeError: not all arguments converted
during string formatting" exception . And similarly I get an exception for

dlen = len(tcp.next)
(http) = struct.unpack('!'+str(dlen)+'s', tcp.next)
log.debug("Http payload: " + http)

I'm assuming the problem might be the CR+LF characters in the http message,
but I have no way of knowing the length of the message as it depends on the
page that's being requested. It could also be something else, as I'm new to
Python and possibly missing something very obvious. Any hints?

Thanks in advance!

Emanuele Di Pascale

Reply via email to