[Bro] Patterns and Word Boundaries

Lloyd Brown lloyd_brown at byu.edu
Thu Oct 22 10:08:50 PDT 2015


Well, okay.  From what I can tell experimentally, it doesn't have
working shortcuts like "\s" or "[:space:]" either, so I guess I'm left
to do it more like *this* attachment.

Unless I'm missing something obvious.  I'd be happy to be wrong on this one.

Lloyd Brown
Systems Administrator
Fulton Supercomputing Lab
Brigham Young University
http://marylou.byu.edu

On 10/22/2015 10:03 AM, Samuel Oehlert wrote:
> I know Bro's regex syntax is almost exactly the same as Flex (only
> differing in some very edge cases). I am not positive, but from a
> cursory google it seems Flex doesn't understand word boundaries.
> 
> -Sam
> 
> On Thu, Oct 22, 2015 at 8:05 AM, Lloyd Brown <lloyd_brown at byu.edu
> <mailto:lloyd_brown at byu.edu>> wrote:
> 
>     Hopefully this isn't too simplistic of a question, but I'm just getting
>     started with Bro.
> 
>     In the text pattern syntax for Bro [1], is there an easy way to define
>     word boundaries, similar to how some of the RegEx dialects use '\b',
>     '\<', '\>', etc.? [2]
> 
>     I'm trying to match for specific strings in a data stream.  For example,
>     the word "nmap".  I'm trying several approaches, based on past RegEx
>     knowledge, and I'm having trouble coming up with a single pattern that
>     would handle it all.  Example bro test script attached; hopefully it's
>     clear.
> 
>     Fundamentally, is there a syntax reference for pattern matching, or does
>     it conform to a commonly known dialect (eg. POSIX-style RegEx, or PCRE
>     RegEx)?
> 
> 
>     [1] https://www.bro.org/sphinx/scripting/index.html#pattern
>     [2] http://www.regular-expressions.info/wordboundaries.html
> 
>     --
>     Lloyd Brown
>     Systems Administrator
>     Fulton Supercomputing Lab
>     Brigham Young University
>     http://marylou.byu.edu
> 
>     _______________________________________________
>     Bro mailing list
>     bro at bro-ids.org <mailto:bro at bro-ids.org>
>     http://mailman.ICSI.Berkeley.EDU/mailman/listinfo/bro
> 
> 
-------------- next part --------------
event bro_init() {
	local testcases = set( 
		"nmap", 		#Should match something
		"test nmap", 		#Should match something
		"nmap test", 		#Should match something
		"test nmap test",	#should match something
		"unmapped_entries",	#Should NOT match any of the patterns
		"test\tnmap",		#Should match something
		"nmap\ttest",		#Should match something
		"test\tnmap\ttest"	#Should match something
		);
	local nmap_patterns = vector( 
		/^nmap$/, 
		/^nmap[ \f\n\r\t\v]/,	#This should be the definition of \s or [:space:]
		/[ \f\n\r\t\v]nmap$/,
		/[ \f\n\r\t\v]nmap[ \f\n\r\t\v]/
		);

	for (testcase in testcases) {
		print fmt("Testcase: \"%s\"", testcase);
		for (pi in nmap_patterns) {
			if ( nmap_patterns[pi] in testcase ) {
				print fmt("     Pattern: %s - Matched", nmap_patterns[pi]);
			} else {
				print fmt("     Pattern: %s - Did NOT match", nmap_patterns[pi]);
			}
		}
	}

}


More information about the Bro mailing list