...just one additional suggestion (I know, it is a very different
approach from yours) -- in the case *all* relevant messages appear in
sec input at some point of time, you could also address the problem
with following sec rules:

# This rule associates the Subject-line and the sender-line with the
same MID value,
# and generates a synthetic event that represents both events, for example:
#
# MID:52366 Domain:sec.com Subject:Hello World
#
# The rule assumes that Subject-line and sender-line for the same MID value can
# appear in any order and are separated by at most 60 seconds

type=EventGroup2
ptype=RegExp
pattern=email:Mid (\d+) sender:'\S+?@(\S+)'
count=fill MID_$1_DOMAIN $2
ptype2=RegExp
pattern2=email:Mid (\d+) Subject:'(.+)'
count2=fill MID_$1_SUBJECT $2
desc=Associate the subject with the sender domain based on mid $1
action=copy MID_$1_SUBJECT %subject; copy MID_$1_DOMAIN %domain; \
       event MID:$1 Domain:%domain Subject:%subject
init=create MID_$1_DOMAIN; create MID_$1_SUBJECT
end=delete MID_$1_DOMAIN; delete MID_$1_SUBJECT
window=60

# This rule counts synthetic events generated by counting operations
of the previous rule,
# and generates an alert if three messages are seen with the same
subject lines and
# the same sender domain within 1 hour (if the MID values have to be
unique for counted
# synthetic events, this rule can be easily elaborated into EventGroup
rule with this functionality)

type=SingleWithThreshold
ptype=RegExp
pattern=MID:\d+ Domain:(\S+) Subject:(.+)
desc=Three messages from the same domain $1 with the same subject $2
action=write - %s
window=3600
thresh=3


I am not sure if the above suggestion fits into your environment, and
if not, maybe it is useful for tackling some future event correlation
task :)

kind regards,
risto

2016-10-04 15:11 GMT+03:00 Jaren Peich <burkol...@gmail.com>:
> Sorry i missed to add. The idea is to find the first 3 mids code with  the
> same subject and then compare domain email senders of 3 codes searched.
> If every domain from the sender is equal, print a message on the screen. In
> the case that 1 of them is different just not to show the message.
>
> I find mid numbers with the rules and keep in a context and in the perl
> code. Then extract mid numbers and find domain sender sender. Keep domain
> sender in an array to compare after the search.
>
> I erased this part just to test:
> if($arraymids[0] eq $arraymids[1] && $arraymids[0] eq $arraymids[2]){\
> print "\n=======>SAME DOMAIN\n";\
> }else{\
> print "\n=======>Different DOMAIN\n";\
> }\
>
> Regards Risto.
>
> 2016-10-04 13:55 GMT+02:00 Jaren Peich <burkol...@gmail.com>:
>>
>> Hi,
>>
>> In this case the rules are ordered but there are some cases, i´ve seen
>> that there are disordered data and in other files. I´ve seen today. I have
>> to do perl search.
>>
>> It can be as input also like this, its quite a pity:
>>
>> email:Mid 52365 sender:'ja...@sec.com'
>> email:Mid 52366 sender:'s...@sec.com'
>> email:Mid 52364 Subject:'Hello World'
>> email:Mid 52366 Subject:'Hello World'
>> email:Mid 52364 sender:'pe...@sec.com'
>> email:Mid 52365 Subject:'Hello World'
>>
>>
>> I´m trying to access the context data, i just only copy the action:
>>
>> action  = copy SM_$+{subject} %hashmids; lcall %o %hashmids -> ( sub{\
>> $i=0;\
>> my(@arraymids)=();\
>> %pmid=%{ $_[0] };\
>> @midcont = values %pmid;\
>> foreach my $lmid (@midcont) {\
>> print "\nlmid===>$lmid\n" if defined($mid);\
>> }\
>> @files = <C:\\files\\m*.log>;\
>> print "@files";\
>> if(@files){\
>> foreach $file (@files) {\
>> open   (FILE, "$file");\
>> while($line= <FILE> ){\
>> my ($mid, $email)= $line=~ m/email:Mid\s(\d+)\ssender\:\'([^\']*)\'/gi;\
>> print "\n====>Vuelta\n";\
>> print "$midcont[0]";\
>> foreach my $lmid (@midcont) {\
>> print "\nMid fichero===>$mid\tlmid===>$lmid\n" if defined($mid);\
>> if ($mid == $lmid){\
>> my ($username, $domain) = $email =~ /(.*)@(.*)/;\
>> print "\nDOMAIN FINDED===>$domain\n";\
>> unshift(@arraymids, $domain);\
>> }\
>> }\
>> }\
>> }\
>> }else{\
>> print "========>NO FILES TO SEARCH";\
>> }\
>> }\
>> );reset 0;
>>
>> Output is not as expected:
>>
>> Stdin connected to terminal, SIGINT can't be used for changing the logging
>> level
>> Creating SEC internal context 'SEC_INTERNAL_EVENT'
>> Creating SEC internal event 'SEC_STARTUP'
>> Deleting SEC internal context 'SEC_INTERNAL_EVENT'
>> Creating context 'SM_Hello World'
>> Adding event(s) '52364' to context 'SM_Hello World'
>> Adding event(s) '52365' to context 'SM_Hello World'
>> Adding event(s) '52366' to context 'SM_Hello World'
>> Copying context 'SM_Hello World' to variable '%hashmids'
>> Variable '%hashmids' set to '52364
>> 52365
>> 52366'
>> Calling code 'CODE(0x2927f34)' and setting variable '%o'
>> C:\log.log
>> ====>Vuelta
>> Use of uninitialized value $main::SEC::midcont[0] in string at (eval 4)
>> line 1, <FILE> line 1.
>>
>> ====>Vuelta
>> Use of uninitialized value $main::SEC::midcont[0] in string at (eval 4)
>> line 1, <FILE> line 2.
>>
>> ====>Vuelta
>> Use of uninitialized value $main::SEC::midcont[0] in string at (eval 4)
>> line 1, <FILE> line 3.
>> Variable '%o' set to ''
>> Terminating event correlation operation 'C:\prueba.conf | 1 | create
>> context by subject_Hello World'
>> Creating SEC internal context 'SEC_INTERNAL_EVENT'
>> Creating SEC internal event 'SEC_SHUTDOWN'
>> Deleting SEC internal context 'SEC_INTERNAL_EVENT'
>>
>> I don´t know why i can´t access to the %hashmids that I copied before and
>> added as a parameter. How can i reference it?
>>
>>
>> Thank you for your help Risto. Regards.
>>
>>
>> 2016-10-03 15:33 GMT+02:00 Risto Vaarandi <risto.vaara...@gmail.com>:
>>>
>>> hi Jaren,
>>> let me add few suggestions below:
>>>
>>> >
>>> > rem=create context and store first mid-count 2 and 3
>>> > type=EventGroup1
>>> > ptype=Cached
>>> > pattern=SubjectMID
>>> > context=SM_$+{subject}
>>> > thresh=2
>>> > window=60
>>> > count=add SM_$+{subject} $+{mid}
>>> > desc=create context by subject_$+{subject}
>>> > end=delete SM_$+{subject}
>>> > action  = copy SM_$+{subject} %hashmids; lcall %o %hashmids -> ( \
>>> > print "\nArrive!!!!!";\
>>>
>>> The Perl code that has been provided with 'lcall' action is not a
>>> valid function definition, and you need to enclose the code in sub { }
>>> construct. For example:
>>>
>>> lcall %o %hashmids -> ( sub { print "\nArrive!!!!!"; } )
>>>
>>> Also, the value of the %hashmids variable is not used in the function
>>> (in the perl function, $_[0] variable refers to the first input
>>> parameters.
>>>
>>> > Output:
>>> >
>>> > SEC (Simple Event Correlator) 2.6.2
>>> > Reading configuration from C:\prueba.conf
>>> >
>>> > Rule in C:\prueba.conf at line 10: Eval 'print "\nArrive!!!!!";' didn't
>>> > return a code reference: 1
>>> > Rule in C:\prueba.conf at line 10: Invalid action list ' copy
>>> > SM_$+{subject}
>>> > %hashmids; lcall %o %hashmids -> ( print "\nArrive!!!!!";);reset 0; '
>>>
>>> you are seeing this error message since 'lcall' does not have a
>>> correct function definition (see my previous remark).
>>>
>>> >
>>> > Is it possible to pass to the perl function a changing context name
>>> > depending on the $+{subject} variable and process this data as i told
>>> > you
>>> > before?
>>>
>>> you can do that, but then you would have to access SEC's internal
>>> context data structure, in order to process the context event store
>>> (the context name serves as a key into %main::context_list hash table,
>>> and in this hash table). In my opinion, that is not a very clean way,
>>> and passing a newline separated string of numerals into the function
>>> is both simpler and more readable. Also, you wouldn't have any
>>> dependencies on sec internals.
>>>
>>> Just out of curiosity -- is my understanding correct that the lines
>>> you want to process are all appearing in the same input file:
>>>
>>> email:Mid 52364 Subject:'Hello World'
>>> email:Mid 52365 Subject:'Hello World'
>>> email:Mid 52366 Subject:'Hello World'
>>> email:Mid 52366 sender:'s...@sec.com'
>>> email:Mid 52365 sender:'ja...@sec.com'
>>> email:Mid 52364 sender:'pe...@sec.com'
>>>
>>> If that is the case, it might be cheaper not to repeatedly search the
>>> input file with Perl code which is expensive, but rather implement the
>>> same logic with sec rules. What is your actual goal for extracting the
>>> e-mail addresses based on subject lines? There might be a much shorter
>>> and more elegant way for addressing this problem.
>>>
>>> kind regards,
>>> risto
>>>
>>>
>>> > One create a 'SM_Hello World', other email context can be 'SM_Hello
>>> > from
>>> > SEC', other one 'SM_Hallo Frank', 'SM_Julius notes', etc...
>>> >
>>> > Finally in the first email i just added the perl function that i
>>> > designed to
>>> > search into the files this data.
>>> >
>>> > This one(Not working, because i add notes text between ##########):
>>> >
>>> > eval %o ( \
>>> > $i=0;\
>>> > my(@arraymids)=();\
>>> > ####################################\
>>> > #Here i want to read again the context and extract the values. Add to
>>> > the
>>> > array for processing.\
>>> > @midcont=("52366","52365","52364");\
>>> > ###################################
>>> > @files = <C:\\files\\m*.log>;\
>>> > print "@files";\
>>> > if(@files){\
>>> > foreach $file (@files) {\
>>> > open   (FILE, "$file");\
>>> > while($line= <FILE> ){\
>>> > my ($mid, $email)= $line=~
>>> > m/email:Mid\s(\d+)\ssender\:\'([^\']*)\'/gi;\
>>> > print "\n====>Vuelta\n";\
>>> > foreach my $lmid (@midcont) {\
>>> > print "\nMid fichero===>$mid\tlmid===>$lmid\n" if defined($mid);\
>>> > if ($mid == $lmid){\
>>> > my ($username, $domain) = $email =~ /(.*)@(.*)/;\
>>> > print "\nDOMAIN FINDED===>$domain\n";\
>>> > unshift(@arraymids, $domain);\
>>> > }\
>>> > }\
>>> > }\
>>> > }\
>>> > if($arraymids[0] eq $arraymids[1] && $arraymids[0] eq $arraymids[2]){\
>>> > print "\n=======>SAME DOMAIN\n";\
>>> > }else{\
>>> > print "\n=======>Different DOMAIN\n";\
>>> > }\
>>> > }else{\
>>> > print "========>NO FILES TO SEARCH";\
>>> > }\
>>> > );reset 0;
>>> >
>>> >
>>> >
>>> > Thank you Risto again. Regards.
>>> >
>>> > 2016-10-01 12:50 GMT+02:00 Risto Vaarandi <risto.vaara...@gmail.com>:
>>> >>
>>> >> 2016-09-30 12:20 GMT+03:00 Jaren Peich <burkol...@gmail.com>:
>>> >> > Hi Risto,
>>> >> >
>>> >> > I have a little doubt that i haven´t seen in the documentation.
>>> >> > I want to detect and keep some data from the logs and then read the
>>> >> > context
>>> >> > again and extract this data to process this info throught a perl
>>> >> > function.
>>> >> >
>>> >>
>>> >> ...
>>> >>
>>> >> > action  = eval %o ( \
>>> >> > $i=0;\
>>> >> > my(@arraymids)=();\
>>> >> > ####################################\
>>> >> > #Here i want to read again the context and extract the values. Add
>>> >> > to
>>> >> > the
>>> >> > array for processing.\
>>> >> > @midcont=("52366","52365","52364");\
>>> >> > ###################################
>>> >>
>>> >> I am still not sure whether I have understood the problem correctly,
>>> >> but if you would like to access the event store of the SEC context
>>> >> from a Perl function/expression, I would recommend to use the 'copy'
>>> >> action before the Perl code is invoked. For example, if the event
>>> >> store of context TEST contains events "test1", "test2" and "test3",
>>> >> then the following action
>>> >>
>>> >> copy TEST %events
>>> >>
>>> >> will set the action list variable %events to the following string
>>> >> "test1<NEWLINE>test2<NEWLINE>test3".
>>> >> After the %events variable has been set, you can pass it as an input
>>> >> parameter to the Perl function invoked with 'lcall' action. If you are
>>> >> using 'eval', the %events variable can be directly accessed from the
>>> >> Perl code, since it is substituted before each compilation and
>>> >> execution. (Again, I would take the opportunity and recommend the use
>>> >> of 'lcall' instead of 'eval', since 'lcall' is much more efficient.)
>>> >>
>>> >> kind regards,
>>> >> risto
>>> >
>>> >
>>
>>
>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

Reply via email to