[Oisf-devel] Some questions about module development

Victor Julien victor at inliniac.net
Wed Feb 20 11:00:43 UTC 2013

On 02/01/2013 03:30 PM, Jörg Vehlow wrote:
> What I'm trying to do is to devide the stream into messages. A message
> is a continous part of the stream (stream means bidrectional stream
> here) in one direction.
> For an HTTP session with one request there will be two messages, the
> request and the response.
> If there is another request in the http session it will have four
> messages. (Request, response, request, response)
> The order in which the messages appear is important. Together with the
> payloadof a message, the time of the first frame and direction should be
> saved.
> Something like:
> struct Message {
>     char* data;
>     uint length;
>     int direction;
>     Message * next;
> }
> The benefit of this representation of the stream is that you can do
> statistical matches on the length of the individual messages or the time
> between two messsages. I hope to be able to detect some malware c'n'c
> traffic with this. Often you have limited message lengths or somewhat
> fixed intervals between messages.
> The rules to devide a bidirectional tcp stream into messages are as follows:
>  - begin of stream -> create new message
>  - change of transmission direction -> create new message
>  - timeout after last received packet (say if no packet receives within
> 2 seconds) -> create new message
> The only thing I need at the moment is the pakets of a tcp stream in the
> correct order. This essentially what the reassembler should to I think...

I think that if you're interested in HTTP only, the best way to achieve
this would be to hook into the app-layer-htp entry functions. You can
then use the parser's knowledge of when one request ends and the next
starts (in case of request pipelining).

Victor Julien
PGP: http://www.inliniac.net/victorjulien.asc

More information about the Oisf-devel mailing list