For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

OTS02's avatar
OTS02
Icon for Cirrus rankCirrus
Aug 27, 2015

non-http stream match/catch

I have a standard VS on an LTM. tcp1521 TNS (to Oracle DB server). I am trying to match on a string that occurs often ('ORA-01403: no data found'). I know that the string is going through the VS, as I run simultaneous tcpdumps.

I have had success with http stream matching, but don't know how to go about a just plain TCP traffic flow. Below is the iRule that I have tried.

when CLIENT_ACCEPTED {

   Replace 'ORA-01403:' with 'ORA-01403:'
  STREAM::expression {@ORA-01403@ORA-01403@}
  STREAM::enable

}

when STREAM_MATCHED {

set hsl [HSL::open -proto UDP -pool HIGH_SPEED_LOGGING] HSL::send $hsl "DNA_STREAM,MATCH FOUND!"

}

From the wiresharks, it seems as though the text is simply ascii. Any suggestions?

2 Replies

  • The issue is that there's not enough data present in the CLIENT_ACCEPTED event, which is triggered at the end of a successful TCP 3-way handshake. If you want to see TCP payload you have to collect (ie. buffer) that payload:

    when CLIENT_ACCEPTED {
        TCP::collect
    }
    when CLIENT_DATA {
         Replace 'ORA-01403:' with 'ORA-01403:'
        STREAM::expression {@ORA-01403@ORA-01403@}
        STREAM::enable
    
        TCP::release
    }
    when STREAM_MATCHED {
        set hsl [HSL::open -proto UDP -pool HIGH_SPEED_LOGGING] HSL::send $hsl "DNA_STREAM,MATCH FOUND!"
    }
    
  • Yessssss!! that works - thanks. BTW, first time I tried it - did not work for me. Then I realized, that the strings that I am looking for are actually coming from the SERVER. So changed things around some :

    when SERVER_CONNECTED {

    TCP::collect
    

    }

    when SERVER_DATA {

     Replace 'ORA-01403:' with 'ORA-01403:'
    STREAM::expression {@ORA-01403@ORA-01403@}
    STREAM::enable
    
    TCP::release
    

    }

    when STREAM_MATCHED {

    set hsl [HSL::open -proto UDP -pool HIGH_SPEED_LOGGING] 
    HSL::send $hsl "hsl_BL_DNA_sandbox, DNA_STREAM,MATCH FOUND!"
    

    }