mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 14:48:21 +00:00
Move the SIP analyzer to uint64 sequences, and a number of other small SIP fixes.
This commit is contained in:
parent
f93f2af748
commit
214e6b3ea9
6 changed files with 102 additions and 49 deletions
|
@ -86,6 +86,7 @@ redef record connection += {
|
||||||
};
|
};
|
||||||
|
|
||||||
const ports = { 5060/udp };
|
const ports = { 5060/udp };
|
||||||
|
redef likely_server_ports += { ports };
|
||||||
|
|
||||||
event bro_init() &priority=5
|
event bro_init() &priority=5
|
||||||
{
|
{
|
||||||
|
@ -186,12 +187,12 @@ event sip_header(c: connection, is_request: bool, name: string, value: string) &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
event sip_message_done(c: connection, is_request: bool) &priority = 5
|
event sip_end_entity(c: connection, is_request: bool) &priority = 5
|
||||||
{
|
{
|
||||||
set_state(c, is_request);
|
set_state(c, is_request);
|
||||||
}
|
}
|
||||||
|
|
||||||
event sip_message_done(c: connection, is_request: bool) &priority = -5
|
event sip_end_entity(c: connection, is_request: bool) &priority = -5
|
||||||
{
|
{
|
||||||
# The reply body is done so we're ready to log.
|
# The reply body is done so we're ready to log.
|
||||||
if ( ! is_request )
|
if ( ! is_request )
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
using namespace analyzer::sip;
|
using namespace analyzer::sip;
|
||||||
|
|
||||||
SIP_Analyzer::SIP_Analyzer(Connection* c)
|
SIP_Analyzer::SIP_Analyzer(Connection* c)
|
||||||
: analyzer::Analyzer("SIP", c)
|
: Analyzer("SIP", c)
|
||||||
{
|
{
|
||||||
interp = new binpac::SIP::SIP_Conn(this);
|
interp = new binpac::SIP::SIP_Conn(this);
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ void SIP_Analyzer::Done()
|
||||||
Analyzer::Done();
|
Analyzer::Done();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SIP_Analyzer::DeliverPacket(int len, const u_char* data,
|
void SIP_Analyzer::DeliverPacket(int len, const u_char* data, bool orig,
|
||||||
bool orig, int seq, const IP_Hdr* ip, int caplen)
|
uint64 seq, const IP_Hdr* ip, int caplen)
|
||||||
{
|
{
|
||||||
bool real_orig = true;
|
bool real_orig = true;
|
||||||
if ( len > 6 && data[0] == 'S' && data[1] == 'I' && data[2] == 'P' && data[3] == '/' )
|
if ( len > 6 && data[0] == 'S' && data[1] == 'I' && data[2] == 'P' && data[3] == '/' )
|
||||||
|
|
|
@ -17,13 +17,14 @@ public:
|
||||||
|
|
||||||
virtual void Done();
|
virtual void Done();
|
||||||
virtual void DeliverPacket(int len, const u_char* data, bool orig,
|
virtual void DeliverPacket(int len, const u_char* data, bool orig,
|
||||||
int seq, const IP_Hdr* ip, int caplen);
|
uint64 seq, const IP_Hdr* ip, int caplen);
|
||||||
|
|
||||||
static analyzer::Analyzer* InstantiateAnalyzer(Connection* conn)
|
static analyzer::Analyzer* InstantiateAnalyzer(Connection* conn)
|
||||||
{ return new SIP_Analyzer(conn); }
|
{ return new SIP_Analyzer(conn); }
|
||||||
|
|
||||||
static bool Available()
|
static bool Available()
|
||||||
{ return sip_request; }
|
{ return sip_request || sip_reply || sip_header ||
|
||||||
|
sip_all_headers || sip_begin_entity || sip_end_entity; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
binpac::SIP::SIP_Conn* interp;
|
binpac::SIP::SIP_Conn* interp;
|
||||||
|
|
|
@ -12,13 +12,68 @@
|
||||||
## original_URI: The unprocessed URI as specified in the request.
|
## original_URI: The unprocessed URI as specified in the request.
|
||||||
##
|
##
|
||||||
## version: The version number specified in the request (e.g., ``2.0``).
|
## version: The version number specified in the request (e.g., ``2.0``).
|
||||||
##
|
|
||||||
event sip_request%(c: connection, method: string, original_URI: string, version: string%);
|
event sip_request%(c: connection, method: string, original_URI: string, version: string%);
|
||||||
|
|
||||||
|
## Generated for SIP replies, used in Voice over IP (VoIP).
|
||||||
|
##
|
||||||
|
## This event is generated as soon as a reply's initial line has been parsed.
|
||||||
|
##
|
||||||
|
## See `Wikipedia <http://en.wikipedia.org/wiki/Session_Initiation_Protocol>`__
|
||||||
|
## for more information about the SIP protocol.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## version: The SIP version in use.
|
||||||
|
##
|
||||||
|
## code: The response code.
|
||||||
|
##
|
||||||
|
## reason: Textual details for the response code.
|
||||||
event sip_reply%(c: connection, version: string, code: count, reason: string%);
|
event sip_reply%(c: connection, version: string, code: count, reason: string%);
|
||||||
|
|
||||||
|
## Generated for each SIP header.
|
||||||
|
##
|
||||||
|
## See `Wikipedia <http://en.wikipedia.org/wiki/Session_Initiation_Protocol>`__
|
||||||
|
## for more information about the SIP protocol.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## is_orig: Whether the header came from the originator.
|
||||||
|
##
|
||||||
|
## name: Header name.
|
||||||
|
##
|
||||||
|
## value: Header value.
|
||||||
event sip_header%(c: connection, is_orig: bool, name: string, value: string%);
|
event sip_header%(c: connection, is_orig: bool, name: string, value: string%);
|
||||||
|
|
||||||
|
## Generated once for all SIP headers from the originator or responder.
|
||||||
|
##
|
||||||
|
## See `Wikipedia <http://en.wikipedia.org/wiki/Session_Initiation_Protocol>`__
|
||||||
|
## for more information about the SIP protocol.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## is_orig: Whether the headers came from the originator.
|
||||||
|
##
|
||||||
|
## hlist: All the headers, and their values
|
||||||
event sip_all_headers%(c: connection, is_orig: bool, hlist: mime_header_list%);
|
event sip_all_headers%(c: connection, is_orig: bool, hlist: mime_header_list%);
|
||||||
|
|
||||||
|
## Generated at the beginning of a SIP message.
|
||||||
|
##
|
||||||
|
## This event is generated as soon as a message's initial line has been parsed.
|
||||||
|
##
|
||||||
|
## See `Wikipedia <http://en.wikipedia.org/wiki/Session_Initiation_Protocol>`__
|
||||||
|
## for more information about the SIP protocol.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## is_orig: Whether the message came from the originator.
|
||||||
event sip_begin_entity%(c: connection, is_orig: bool%);
|
event sip_begin_entity%(c: connection, is_orig: bool%);
|
||||||
|
|
||||||
|
## Generated at the end of a SIP message.
|
||||||
|
##
|
||||||
|
## See `Wikipedia <http://en.wikipedia.org/wiki/Session_Initiation_Protocol>`__
|
||||||
|
## for more information about the SIP protocol.
|
||||||
|
##
|
||||||
|
## c: The connection.
|
||||||
|
##
|
||||||
|
## is_orig: Whether the message came from the originator.
|
||||||
event sip_end_entity%(c: connection, is_orig: bool%);
|
event sip_end_entity%(c: connection, is_orig: bool%);
|
||||||
event sip_entity_data%(c: connection, is_orig: bool, length: count, data: string%);
|
|
||||||
event sip_message_done%(c: connection, is_orig: bool%);
|
|
||||||
|
|
|
@ -133,10 +133,6 @@ refine flow SIP_Flow += {
|
||||||
{
|
{
|
||||||
BifEvent::generate_sip_end_entity(connection()->bro_analyzer(), connection()->bro_analyzer()->Conn(), is_orig());
|
BifEvent::generate_sip_end_entity(connection()->bro_analyzer(), connection()->bro_analyzer()->Conn(), is_orig());
|
||||||
}
|
}
|
||||||
if ( sip_message_done )
|
|
||||||
{
|
|
||||||
BifEvent::generate_sip_message_done(connection()->bro_analyzer(), connection()->bro_analyzer()->Conn(), is_orig());
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
%}
|
%}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue