trisulrp 1.2.7 → 1.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.7
1
+ 1.2.8
@@ -14,3 +14,4 @@ require 'trisulrp/trp.pb'
14
14
  require 'trisulrp/guids.rb'
15
15
  require 'trisulrp/keys.rb'
16
16
  require 'trisulrp/protocol.rb'
17
+ require 'trisulrp/utils.rb'
@@ -197,72 +197,111 @@ class ASNumber
197
197
  end
198
198
  end
199
199
 
200
- # convert a trisul key format into a human readable key
201
- # [keyform] the key form
202
- #
203
- # ==== Typical use
204
- #
205
- # Used to convert an IP / Port or any other trisul key into a readable form
206
- #
207
- # <code>
208
- #
209
- # make_readable("C0.A8.0C.A0") => "192.168.12.160"
210
- #
211
- # make_readable("p-0016") => "Port-22"
212
- #
213
- # </code>
214
- #
215
- #
216
- #
217
- # Also see TrisulRP::Protocol::get_labels_for_keys to obtain a text name for the key
218
- #
219
- # Also see the inverse of this method make_key which convert a readable string into a key
220
- # suitable for use in TRP request messages.
221
- #
222
- # If key type cannot be accurately guessed it returns the input
223
- #
224
- def make_readable(keyform)
225
- [ TrisulRP::Keys::Port,
226
- TrisulRP::Keys::Host,
227
- TrisulRP::Keys::HostInterface,
228
- TrisulRP::Keys::Subnet,
229
- TrisulRP::Keys::ASNumber
230
- ].each do |kls|
231
- return kls.xform(keyform) if kls.is_key_form?(keyform)
200
+ # convert a trisul key format into a human readable key
201
+ # [keyform] the key form
202
+ #
203
+ # ==== Typical use
204
+ #
205
+ # Used to convert an IP / Port or any other trisul key into a readable form
206
+ #
207
+ # <code>
208
+ #
209
+ # make_readable("C0.A8.0C.A0") => "192.168.12.160"
210
+ #
211
+ # make_readable("p-0016") => "Port-22"
212
+ #
213
+ # </code>
214
+ #
215
+ #
216
+ #
217
+ # Also see TrisulRP::Protocol::get_labels_for_keys to obtain a text name for the key
218
+ #
219
+ # Also see the inverse of this method make_key which convert a readable string into a key
220
+ # suitable for use in TRP request messages.
221
+ #
222
+ # If key type cannot be accurately guessed it returns the input
223
+ #
224
+ def make_readable(keyform)
225
+ [ TrisulRP::Keys::Port,
226
+ TrisulRP::Keys::Host,
227
+ TrisulRP::Keys::HostInterface,
228
+ TrisulRP::Keys::Subnet,
229
+ TrisulRP::Keys::ASNumber
230
+ ].each do |kls|
231
+ return kls.xform(keyform) if kls.is_key_form?(keyform)
232
+ end
233
+ return keyform
232
234
  end
233
- return keyform
234
- end
235
235
 
236
236
 
237
- # convert a key in human form into trisul key format
238
- #
239
- # [humanform] the human form of the key
240
- #
241
- # ==== Typical use
242
- #
243
- # Used to convert a human form key into a Trisul Key format suitable for use with TRP requests
244
- #
245
- #
246
- # <code>
247
- #
248
- # make_key("192.168.1.1") => "C0.A8.01.01"
249
- #
250
- # </code>
251
- #
252
- #
253
- # Also see the inverse of this method make_readable
254
- #
255
- #
256
- def make_key(readable)
257
- [ TrisulRP::Keys::Port,
258
- TrisulRP::Keys::Host,
259
- TrisulRP::Keys::HostInterface,
260
- TrisulRP::Keys::Subnet,
261
- TrisulRP::Keys::ASNumber
262
- ].each do |kls|
263
- return kls.invert_xform(readable) if kls.is_human_form?(readable)
237
+ # convert a key in human form into trisul key format
238
+ #
239
+ # [humanform] the human form of the key
240
+ #
241
+ # ==== Typical use
242
+ #
243
+ # Used to convert a human form key into a Trisul Key format suitable for use with TRP requests
244
+ #
245
+ #
246
+ # <code>
247
+ #
248
+ # make_key("192.168.1.1") => "C0.A8.01.01"
249
+ #
250
+ # </code>
251
+ #
252
+ #
253
+ # Also see the inverse of this method make_readable
254
+ #
255
+ #
256
+ def make_key(readable)
257
+ [ TrisulRP::Keys::Port,
258
+ TrisulRP::Keys::Host,
259
+ TrisulRP::Keys::HostInterface,
260
+ TrisulRP::Keys::Subnet,
261
+ TrisulRP::Keys::ASNumber
262
+ ].each do |kls|
263
+ return kls.invert_xform(readable) if kls.is_human_form?(readable)
264
+ end
265
+ return readable
264
266
  end
265
- return readable
266
- end
267
+
268
+
269
+ # convert a set of keys into labels
270
+ #
271
+ # This method accepts an array of keys (which are references to counter items in Trisul) and sends
272
+ # a key lookup request to Trisul. Trisul responds with labels for those keys that had labels. Finally a
273
+ # ready to use map is constructed and returned to the caller.
274
+ #
275
+ # [conn] a TRP connection opened earlier via connect(..)
276
+ # [cgguid] a counter group id. See TrisulRP::Guids for a list of common guids
277
+ # [key_arr] an array of keys, possibly obtained as a result of an earlier command
278
+ #
279
+ # ==== Returns
280
+ # a hash of Key => Label. All keys in the incoming array will have a hash entry. If Trisul could not
281
+ # find a label for a key, it will store the key itself as the hash value.
282
+ #
283
+ # ==== Typical usage
284
+ #
285
+ # You use this method as a bulk resolving mechanism.
286
+ # <code>
287
+ #
288
+ # host_keys = ["0A.0A.18.E0", "B1.01.8F.01",...]
289
+ # host_names = TrisulRP::Protocol.get_labels_for_keys(conn,
290
+ # TrisulRP::Guids::CG_HOSTS, host_keys)
291
+ #
292
+ # host_names["0A.0A.18.E0"] = "demo.trisul.org" # ok
293
+ # host_names["B1.01.8F.01"] = "B1.01.8F.01" # no label for this key
294
+ #
295
+ # </code>
296
+ #
297
+ def get_labels_for_keys(conn, cgguid, key_arr)
298
+ req = mk_request(TRP::Message::Command::KEY_LOOKUP_REQUEST,
299
+ :counter_group => cgguid, :keys => key_arr.uniq )
300
+ h = key_arr.inject({}) { |m,i| m.store(i,make_readable(i)); m }
301
+ get_response(conn,req) do |resp|
302
+ resp.key_lookup_response.key_details.each { |d| h.store(d.key,d.label) }
303
+ end
304
+ return h
305
+ end
267
306
 
268
307
  end
@@ -1,4 +1,4 @@
1
- # = Trisul Remote Protocol helper functions
1
+ # = Trisul Remote Protocol functions
2
2
  #
3
3
  # dependency = ruby_protobuf
4
4
  #
@@ -110,45 +110,6 @@ module TrisulRP::Protocol
110
110
  end
111
111
  return [from_tm,to_tm]
112
112
  end
113
-
114
- # convert a set of keys into labels
115
- #
116
- # This method accepts an array of keys (which are references to counter items in Trisul) and sends
117
- # a key lookup request to Trisul. Trisul responds with labels for those keys that had labels. Finally a
118
- # ready to use map is constructed and returned to the caller.
119
- #
120
- # [conn] a TRP connection opened earlier via connect(..)
121
- # [cgguid] a counter group id. See TrisulRP::Guids for a list of common guids
122
- # [key_arr] an array of keys, possibly obtained as a result of an earlier command
123
- #
124
- # ==== Returns
125
- # a hash of Key => Label. All keys in the incoming array will have a hash entry. If Trisul could not
126
- # find a label for a key, it will store the key itself as the hash value.
127
- #
128
- # ==== Typical usage
129
- #
130
- # You use this method as a bulk resolving mechanism.
131
- # <code>
132
- #
133
- # host_keys = ["0A.0A.18.E0", "B1.01.8F.01",...]
134
- # host_names = TrisulRP::Protocol.get_labels_for_keys(conn,
135
- # TrisulRP::Guids::CG_HOSTS, host_keys)
136
- #
137
- # host_names["0A.0A.18.E0"] = "demo.trisul.org" # ok
138
- # host_names["B1.01.8F.01"] = "B1.01.8F.01" # no label for this key
139
- #
140
- # </code>
141
- #
142
- def get_labels_for_keys(conn, cgguid, key_arr)
143
- req = mk_request(TRP::Message::Command::KEY_LOOKUP_REQUEST,
144
- :counter_group => cgguid, :keys => key_arr.uniq )
145
- h = key_arr.inject({}) { |m,i| m.store(i,i); m }
146
- get_response(conn,req) do |resp|
147
- resp.key_lookup_response.key_details.each { |d| h.store(d.key,d.label) }
148
- end
149
- return h
150
- end
151
-
152
113
  # Helper to create a TRP TimeInterval object
153
114
  #
154
115
  # [tmarr] An array of two Time objects representing a window
@@ -198,7 +159,7 @@ module TrisulRP::Protocol
198
159
  # </code>
199
160
  #
200
161
  #
201
- def mk_request(cmd_id,params)
162
+ def mk_request(cmd_id,params={})
202
163
  req = TRP::Message.new(:trp_command => cmd_id)
203
164
  case cmd_id
204
165
  when TRP::Message::Command::HELLO_REQUEST
@@ -212,7 +173,7 @@ module TrisulRP::Protocol
212
173
  when TRP::Message::Command::CONTROLLED_COUNTER_GROUP_REQUEST
213
174
  req.controlled_counter_group_request = TRP::ControlledCounterGroupRequest.new(params)
214
175
  when TRP::Message::Command::FILTERED_DATAGRAMS_REQUEST
215
- req.filtered_datagrams_request = TRP::FilteredDatagramsRequest.new(params)
176
+ req.filtered_datagram_request = TRP::FilteredDatagramRequest.new(params)
216
177
  when TRP::Message::Command::CONTROLLED_CONTEXT_REQUEST
217
178
  req.controlled_context_request = TRP::ControlledContextRequest.new(params)
218
179
  when TRP::Message::Command::SEARCH_KEYS_REQUEST
@@ -370,11 +370,48 @@ module TRP
370
370
  end
371
371
 
372
372
  class FilteredDatagramRequest < ::ProtocolBuffers::Message
373
+ # forward declarations
374
+ class ByFilterExpr < ::ProtocolBuffers::Message; end
375
+ class BySession < ::ProtocolBuffers::Message; end
376
+ class ByAlert < ::ProtocolBuffers::Message; end
377
+ class ByResource < ::ProtocolBuffers::Message; end
378
+
379
+ # nested messages
380
+ class ByFilterExpr < ::ProtocolBuffers::Message
381
+ required ::TRP::TimeInterval, :time_interval, 1
382
+ required :string, :filter_expression, 2
383
+
384
+ gen_methods! # new fields ignored after this point
385
+ end
386
+
387
+ class BySession < ::ProtocolBuffers::Message
388
+ optional :string, :session_group, 1, :default => "{99A78737-4B41-4387-8F31-8077DB917336}"
389
+ required ::TRP::SessionID, :session_id, 2
390
+
391
+ gen_methods! # new fields ignored after this point
392
+ end
393
+
394
+ class ByAlert < ::ProtocolBuffers::Message
395
+ optional :string, :alert_group, 1, :default => "{9AFD8C08-07EB-47E0-BF05-28B4A7AE8DC9}"
396
+ required ::TRP::AlertID, :alert_id, 2
397
+
398
+ gen_methods! # new fields ignored after this point
399
+ end
400
+
401
+ class ByResource < ::ProtocolBuffers::Message
402
+ required :string, :resource_group, 1
403
+ required ::TRP::ResourceID, :resource_id, 2
404
+
405
+ gen_methods! # new fields ignored after this point
406
+ end
407
+
373
408
  optional :int64, :max_packets, 1, :default => 0
374
409
  optional :int64, :max_bytes, 2, :default => 0
375
410
  optional ::TRP::CompressionType, :compress_type, 3, :default => ::TRP::CompressionType::UNCOMPRESSED
376
- required ::TRP::TimeInterval, :time_interval, 4
377
- required :string, :filter_expression, 5
411
+ optional ::TRP::FilteredDatagramRequest::ByFilterExpr, :filter_expression, 4
412
+ optional ::TRP::FilteredDatagramRequest::BySession, :session, 5
413
+ optional ::TRP::FilteredDatagramRequest::ByAlert, :alert, 6
414
+ optional ::TRP::FilteredDatagramRequest::ByResource, :resource, 7
378
415
 
379
416
  gen_methods! # new fields ignored after this point
380
417
  end
@@ -741,7 +778,7 @@ module TRP
741
778
  optional :int64, :context, 1, :default => 0
742
779
  optional :string, :session_group, 2, :default => "{99A78737-4B41-4387-8F31-8077DB917336}"
743
780
  required ::TRP::TimeInterval, :time_interval, 3
744
- optional :int64, :maxitems, 4, :default => 500
781
+ optional :int64, :maxitems, 4, :default => 50
745
782
  required :string, :pattern, 5
746
783
 
747
784
  gen_methods! # new fields ignored after this point
@@ -1,7 +1,7 @@
1
1
  // Trisul Remote Protocol (TRP) definition
2
2
  // Based on Google Protocol Buffers
3
- // (c) 2010-11, Unleash Networks
4
- // $Rev: 3442 $
3
+ // (c) 2010-11, Unleash Networks (http://www.unleashnetworks.com)
4
+ // $Rev: 3535 $
5
5
  package TRP;
6
6
 
7
7
  message Timestamp {
@@ -274,8 +274,35 @@ message FilteredDatagramRequest{
274
274
  optional int64 max_packets=1[default=0];
275
275
  optional int64 max_bytes=2[default=0];
276
276
  optional CompressionType compress_type=3[default=UNCOMPRESSED];
277
- required TimeInterval time_interval=4;
278
- required string filter_expression=5;
277
+
278
+ // by trisul filter format expr
279
+ message ByFilterExpr {
280
+ required TimeInterval time_interval=1;
281
+ required string filter_expression=2;
282
+ }
283
+ optional ByFilterExpr filter_expression=4;
284
+
285
+ // by session
286
+ message BySession {
287
+ optional string session_group=1[default="{99A78737-4B41-4387-8F31-8077DB917336}"];
288
+ required SessionID session_id=2;
289
+ }
290
+ optional BySession session=5;
291
+
292
+
293
+ // by alert
294
+ message ByAlert {
295
+ optional string alert_group=1[default="{9AFD8C08-07EB-47E0-BF05-28B4A7AE8DC9}"];
296
+ required AlertID alert_id=2;
297
+ }
298
+ optional ByAlert alert=6;
299
+
300
+ // by resource
301
+ message ByResource {
302
+ required string resource_group=1;
303
+ required ResourceID resource_id=2;
304
+ }
305
+ optional ByResource resource=7;
279
306
  }
280
307
 
281
308
  /////////////////////////////////////
@@ -627,7 +654,7 @@ message GrepRequest {
627
654
  optional int64 context=1[default=0];
628
655
  optional string session_group=2[default="{99A78737-4B41-4387-8F31-8077DB917336}"];
629
656
  required TimeInterval time_interval=3;
630
- optional int64 maxitems=4 [default=500];
657
+ optional int64 maxitems=4 [default=50];
631
658
  required string pattern=5;
632
659
  }
633
660
 
@@ -0,0 +1,129 @@
1
+ # = TrisulRP utility methods
2
+ #
3
+ # == Contains utility to print objects like flows, alerts
4
+ # and to resolve keys etc
5
+ #
6
+
7
+ # ==== TrisulRP::Utils
8
+ #
9
+ # Utility methods to help with
10
+ # * retrieving and printing objects
11
+ # * prints sessions / alerts if given an array of IDs
12
+ # * helper to resolve a key
13
+ #
14
+ #
15
+ module TrisulRP::Utils
16
+
17
+ # Print session (flow) details
18
+ #
19
+ # [conn] active TRP connection opened earlier
20
+ # [sessions] an array of SessionIDs
21
+ #
22
+ # ==== Returns
23
+ # ==== Yields
24
+ # Nothing
25
+ #
26
+ # Prints details about the list of sessions (flows) passed
27
+ #
28
+ # ==== On error
29
+ def print_session_details(conn,sessions)
30
+ all_sids = sessions.collect{ |ai| TRP::SessionID.new(
31
+ :slice_id => ai.slice_id,
32
+ :session_id => ai.session_id ) }
33
+
34
+ follow_up = TrisulRP::Protocol.mk_request(TRP::Message::Command::SESSION_ITEM_REQUEST,
35
+ :session_ids => all_sids)
36
+
37
+ TrisulRP::Protocol.get_response(conn,follow_up) do |resp|
38
+ resp.session_item_response.items.each do |item|
39
+ print "#{item.session_id.slice_id},#{item.session_id.session_id} "
40
+ print "#{Time.at(item.time_interval.from.tv_sec)} "
41
+ print "#{item.time_interval.to.tv_sec-item.time_interval.from.tv_sec} ".rjust(8)
42
+ print "#{item.key1A.label}".ljust(28)
43
+ print "#{item.key2A.label}".ljust(11)
44
+ print "#{item.key1Z.label}".ljust(28)
45
+ print "#{item.key2Z.label}".ljust(11)
46
+ print "#{item.az_bytes}".rjust(10)
47
+ print "#{item.za_bytes}".rjust(10)
48
+ print "\n"
49
+ end
50
+ end
51
+ end
52
+
53
+ # Make key
54
+ #
55
+ # [conn] active TRP connection opened earlier
56
+ # [guid] counter group id (eg hosts, apps, countries)
57
+ # [str] eg a resolved name (eg a host like www.blue.net)
58
+ #
59
+ # ==== Returns
60
+ # A string containing the key in Trisul format corresponding to the
61
+ # label passed in via ''str''
62
+ #
63
+ # ==== Yields
64
+ # Nothing
65
+ #
66
+ # ==== On error
67
+ def mk_trisul_key(conn,guid,str)
68
+ req = TrisulRP::Protocol.mk_request(TRP::Message::Command::SEARCH_KEYS_REQUEST,
69
+ :pattern => str,
70
+ :counter_group => guid,
71
+ :maxitems => 1)
72
+
73
+ resp = TrisulRP::Protocol.get_response(conn,req)
74
+
75
+ if resp.search_keys_response.found_keys.size > 0
76
+ resp.search_keys_response.found_keys[0].key
77
+ else
78
+ str
79
+ end
80
+ end
81
+
82
+ # Print alert details
83
+ #
84
+ # [conn] active TRP connection opened earlier
85
+ # [alerts] an array of AlertIDs
86
+ #
87
+ # ==== Returns
88
+ # ==== Yields
89
+ # Nothing
90
+ #
91
+ # Prints details about the list of alerts passed
92
+ #
93
+ # ==== On error
94
+ def print_alert_details(conn, alerts)
95
+
96
+ p "No alerts found " and return if alerts.empty?
97
+
98
+ # retrieve details of alerts from server
99
+ follow_up = TrisulRP::Protocol.mk_request(TRP::Message::Command::ALERT_ITEM_REQUEST,
100
+ :alert_group => TrisulRP::Guids::AG_IDS,
101
+ :alert_ids => alerts.collect do |al|
102
+ TRP::AlertID.new(:slice_id => al.slice_id,
103
+ :alert_id => al.alert_id)
104
+ end
105
+ )
106
+
107
+
108
+
109
+ TrisulRP::Protocol.get_response(conn,follow_up) do | resp2 |
110
+ resp=resp2.alert_item_response
111
+ resolv_candidates = resp.items.collect { |item| [item.source_ip, item.source_port, item.destination_ip, item.destination_port,item.sigid] }
112
+ resolv_arr = resolv_candidates.transpose
113
+ sip_names = TrisulRP::Keys.get_labels_for_keys(conn,TrisulRP::Guids::CG_HOST, resolv_arr[0])
114
+ sport_names = TrisulRP::Keys.get_labels_for_keys(conn,TrisulRP::Guids::CG_APP, resolv_arr[1])
115
+ dip_names = TrisulRP::Keys.get_labels_for_keys(conn,TrisulRP::Guids::CG_HOST, resolv_arr[2])
116
+ dport_names = TrisulRP::Keys.get_labels_for_keys(conn,TrisulRP::Guids::CG_APP, resolv_arr[3])
117
+ sigid_names = TrisulRP::Keys.get_labels_for_keys(conn,TrisulRP::Guids::CG_ALERT_SIGNATURES, resolv_arr[4])
118
+ resp.items.each do |item|
119
+ print "#{Time.at(item.time.tv_sec)} "
120
+ print "#{sip_names[item.source_ip]}".ljust(28)
121
+ print "#{sport_names[item.source_port]}".ljust(11)
122
+ print "#{dip_names[item.destination_ip]}".ljust(28)
123
+ print "#{dport_names[item.destination_port]}".ljust(11)
124
+ print "#{sigid_names[item.sigid]}".rjust(10)
125
+ print "\n"
126
+ end
127
+ end
128
+ end
129
+ end
@@ -12,49 +12,11 @@ require 'shoulda'
12
12
 
13
13
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
14
  $LOAD_PATH.unshift(File.dirname(__FILE__))
15
+
15
16
  require 'trisulrp'
16
17
 
17
18
  class Test::Unit::TestCase
18
19
 
19
- # helper function to get session info and print in a table
20
- def print_session_details(conn,sessions)
21
- all_sids = sessions.collect{ |ai| TRP::SessionID.new(
22
- :slice_id => ai.slice_id,
23
- :session_id => ai.session_id ) }
24
-
25
- follow_up = TrisulRP::Protocol.mk_request(TRP::Message::Command::SESSION_ITEM_REQUEST,
26
- :session_ids => all_sids)
27
-
28
- TrisulRP::Protocol.get_response(conn,follow_up) do |resp|
29
- resp.session_item_response.items.each do |item|
30
- print "#{item.session_id.slice_id},#{item.session_id.session_id} "
31
- print "#{Time.at(item.time_interval.from.tv_sec)} "
32
- print "#{item.time_interval.to.tv_sec-item.time_interval.from.tv_sec} ".rjust(8)
33
- print "#{item.key1A.label}".ljust(28)
34
- print "#{item.key2A.label}".ljust(11)
35
- print "#{item.key1Z.label}".ljust(28)
36
- print "#{item.key2Z.label}".ljust(11)
37
- print "#{item.az_bytes}".rjust(10)
38
- print "#{item.za_bytes}".rjust(10)
39
- print "\n"
40
- end
41
- end
42
- end
43
-
44
- # convert a string to a key
45
- def mk_trisul_key(guid,str)
46
- req = TrisulRP::Protocol.mk_request(TRP::Message::Command::SEARCH_KEYS_REQUEST,
47
- :pattern => str,
48
- :counter_group => guid,
49
- :maxitems => 1)
50
-
51
- resp = TrisulRP::Protocol.get_response(@conn,req)
52
-
53
- if resp.search_keys_response.found_keys.size > 0
54
- resp.search_keys_response.found_keys[0].key
55
- else
56
- str
57
- end
58
- end
20
+ include TrisulRP::Utils
59
21
 
60
22
  end
@@ -5,43 +5,26 @@ require 'rubygems'
5
5
 
6
6
  require './helper'
7
7
  include TrisulRP::Protocol
8
- require guidmap
8
+ include TrisulRP::Keys
9
+
9
10
  class TestTrisulrp < Test::Unit::TestCase
10
11
 
11
12
  def test_query_alerts
12
13
 
13
- target_ip = "0A.02.C7.EB" # 10.2.199.235"
14
+ target_ip = "10.1.10.10" # 10.2.199.235"
15
+
14
16
  TrisulRP::Protocol.connect("127.0.0.1",12001,"Demo_Client.crt","Demo_Client.key") do |conn|
17
+
15
18
  tm_arr = TrisulRP::Protocol.get_available_time(conn)
16
- req =TrisulRP::Protocol.mk_request(:context => 0,:alert_group =>TrisulRP::Guids::AG_IDS, :source_ip => target_ip,
17
- :maxitems => 1000,
18
- :time_interval => TRPLib.mk_time_interval(tm_arr))
19
+
20
+ req =TrisulRP::Protocol.mk_request(TRP::Message::Command::ALERT_GROUP_REQUEST,
21
+ :alert_group =>TrisulRP::Guids::AG_IDS,
22
+ :source_ip => TrisulRP::Keys.make_key(target_ip),
23
+ :maxitems => 1000,
24
+ :time_interval => mk_time_interval(tm_arr))
19
25
 
20
26
  TrisulRP::Protocol.get_response(conn,req) do |resp|
21
- follow_up = TrisulRP::Protocol.mk_request(:alert_group => TrisulRP::Guids::AG_IDS)
22
- resp.alert_group_response.alerts.each do |al|
23
- follow_up.alert_item_request.alert_ids << TRP::AlertID.new(:slice_id => al.slice_id, :alert_id => al.alert_id)
24
- end
25
-
26
- TrisulRP::Protocol.getresponse(conn,follow_up) do | resp2 |
27
- resp=resp2.alert_item_response
28
- resolv_candidates = resp.items.collect { |item| [item.source_ip, item.source_port, item.destination_ip, item.destination_port,item.sigid] }
29
- resolv_arr = resolv_candidates.transpose
30
- sip_names = TrisulRP::Protocol.get_labels_for_keys(conn,TrisulRP::Guids::CG_HOSTS, resolv_arr[0])
31
- sport_names = TrisulRP::Protocol.get_labels_for_keys(conn,TrisulRP::Guids::CG_APPS, resolv_arr[1])
32
- dip_names = TrisulRP::Protocol.get_labels_for_keys(conn,TrisulRP::Guids::CG_HOSTS, resolv_arr[2])
33
- dport_names = TrisulRP::Protocol.get_labels_for_keys(conn,TrisulRP::Guids::CG_APPS, resolv_arr[3])
34
- sigid_names = TrisulRP::Protocol.get_labels_for_keys(conn,TrisulRP::Guids::CG_SIGDS, resolv_arr[4])
35
- resp.items.each do |item|
36
- print "#{Time.at(item.time.tv_sec)} "
37
- print "#{sip_names[item.source_ip]}".ljust(28)
38
- print "#{sport_names[item.source_port]}".ljust(11)
39
- print "#{dip_names[item.destination_ip]}".ljust(28)
40
- print "#{dport_names[item.destination_port]}".ljust(11)
41
- print "#{sigid_names[item.sigid]}".rjust(10)
42
- print "\n"
43
- end
44
- end
27
+ print_alert_details(conn,resp.alert_group_response.alerts)
45
28
  end
46
29
  end
47
30
  end
@@ -3,21 +3,82 @@
3
3
  # Testing change
4
4
  require 'rubygems'
5
5
  require './helper'
6
- include TrisulRP::Protocol
7
- require 'guidmap'
8
6
 
7
+ include TrisulRP::Protocol
9
8
 
10
9
  class TestCap < Test::Unit::TestCase
11
- def test_dpi
12
- target_sess = TRP::SessionID.new(:slice_id => 2, :session_id => 207)
13
- TrisulRP::Protocol.connect("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key") do |conn|
14
- req = TrisulRP::Protocol.mk_request(TRP::Message::Command::SESSION_ITEM_REQUEST,
15
- :session_ids => [target_sess])
16
- TrisulRP::Protocol.get_response(conn,req) do |resp|
17
- si = resp.session_item_response.items[0]
18
- follow_up = TrisulRP::Protocol.mk_request(:filter_expression => "#{GUIDMap::SG_TCP}=#{si.session_key}",
19
- :time_interval => si.time_interval )
20
- TrisulRP::Protocol.get_response(conn,follow_up) do |resp|
10
+
11
+
12
+ # get all DNS & SMTP packets in last 1 hour
13
+ # test setup is xff-test.pcap
14
+ def test_filter_expr
15
+
16
+ conn = TrisulRP::Protocol.connect("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key")
17
+
18
+ expr = "#{TrisulRP::Guids::CG_APP}=p-0019,p-0035"
19
+
20
+ tm_arr = get_available_time(conn)
21
+ tm_arr[0] = tm_arr[1] - 900
22
+
23
+ req = TrisulRP::Protocol.mk_request(TRP::Message::Command::FILTERED_DATAGRAMS_REQUEST,
24
+ :filter_expression => TRP::FilteredDatagramRequest::ByFilterExpr.new(
25
+ :time_interval => mk_time_interval(tm_arr),
26
+ :filter_expression => expr)
27
+ )
28
+
29
+ TrisulRP::Protocol.get_response(conn,req) do |resp|
30
+ fdr=resp.filtered_datagram_response
31
+ p "Number of bytes = #{fdr.num_bytes}\n"
32
+ p "Number of pkts = #{fdr.num_datagrams}\n"
33
+ p "Hash = #{fdr.sha1}\n"
34
+
35
+ File.open("t.pcap","wb") do |f|
36
+ f.write(fdr.contents)
37
+ end
38
+ end
39
+
40
+
41
+ end
42
+
43
+ def wtest_sess
44
+
45
+ target_sess = TRP::SessionID.new(:slice_id => 1, :session_id => 45542)
46
+
47
+ conn = TrisulRP::Protocol.connect("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key")
48
+
49
+
50
+ req = TrisulRP::Protocol.mk_request(TRP::Message::Command::FILTERED_DATAGRAMS_REQUEST,
51
+ :session => TRP::FilteredDatagramRequest::BySession.new(
52
+ :session_id => target_sess)
53
+ )
54
+
55
+ TrisulRP::Protocol.get_response(conn,req) do |resp|
56
+ fdr=resp.filtered_datagram_response
57
+ p "Number of bytes = #{fdr.num_bytes}\n"
58
+ p "Number of pkts = #{fdr.num_datagrams}\n"
59
+ p "Hash = #{fdr.sha1}\n"
60
+
61
+ File.open("t.pcap","wb") do |f|
62
+ f.write(fdr.contents)
63
+ end
64
+ end
65
+
66
+ end
67
+
68
+ # alert test
69
+ def test_alert
70
+
71
+ target_alert = TRP::AlertID.new(:slice_id => 2, :alert_id => 10133)
72
+
73
+ conn = TrisulRP::Protocol.connect("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key")
74
+
75
+
76
+ req = TrisulRP::Protocol.mk_request(TRP::Message::Command::FILTERED_DATAGRAMS_REQUEST,
77
+ :alert => TRP::FilteredDatagramRequest::ByAlert.new(
78
+ :alert_id => target_alert)
79
+ )
80
+
81
+ TrisulRP::Protocol.get_response(conn,req) do |resp|
21
82
  fdr=resp.filtered_datagram_response
22
83
  p "Number of bytes = #{fdr.num_bytes}\n"
23
84
  p "Number of pkts = #{fdr.num_datagrams}\n"
@@ -26,10 +87,38 @@ class TestCap < Test::Unit::TestCase
26
87
  File.open("t.pcap","wb") do |f|
27
88
  f.write(fdr.contents)
28
89
  end
29
- end
30
- end
31
90
  end
91
+
92
+ end
93
+ #
94
+ # resource test
95
+ def test_resource
96
+
97
+ target = TRP::ResourceID.new(:slice_id => 2, :resource_id => 308)
98
+
99
+ conn = TrisulRP::Protocol.connect("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key")
100
+
101
+
102
+ req = TrisulRP::Protocol.mk_request(TRP::Message::Command::FILTERED_DATAGRAMS_REQUEST,
103
+ :resource => TRP::FilteredDatagramRequest::ByResource.new(
104
+ :resource_group => TrisulRP::Guids::RG_DNS,
105
+ :resource_id => target)
106
+ )
107
+
108
+ TrisulRP::Protocol.get_response(conn,req) do |resp|
109
+ fdr=resp.filtered_datagram_response
110
+ p "Number of bytes = #{fdr.num_bytes}\n"
111
+ p "Number of pkts = #{fdr.num_datagrams}\n"
112
+ p "Hash = #{fdr.sha1}\n"
113
+
114
+ File.open("t.pcap","wb") do |f|
115
+ f.write(fdr.contents)
116
+ end
117
+ end
118
+
32
119
  end
33
120
  end
34
121
 
35
122
 
123
+
124
+
@@ -15,7 +15,7 @@ class TestTrisulrp < Test::Unit::TestCase
15
15
  def teardown
16
16
  end
17
17
 
18
- def atest_flows_for_host
18
+ def test_flows_for_host
19
19
 
20
20
  target_key = "0A.01.3C.BB"
21
21
 
@@ -36,7 +36,7 @@ class TestTrisulrp < Test::Unit::TestCase
36
36
  def test_flows_for_appname
37
37
 
38
38
  target = "ssh"
39
- target_key = mk_trisul_key(CG_APP,target)
39
+ target_key = mk_trisul_key(@conn,CG_APP,target)
40
40
 
41
41
  tmarr = TrisulRP::Protocol.get_available_time(@conn)
42
42
 
@@ -4,23 +4,23 @@
4
4
  require 'rubygems'
5
5
  require './helper'
6
6
  include TrisulRP::Protocol
7
- require guidmap
8
7
 
9
8
  class TestTrisulrp < Test::Unit::TestCase
10
9
 
11
10
 
12
- # demonstrates getting all HTTP requests getting a *DLL
11
+ # demonstrates getting all DNS resources for smtp (string contains smtp)
13
12
  def test_query_resources
14
13
 
15
14
  target_ip = "0A.02.C7.EB" # 10.2.199.235"
16
15
 
17
- TrisulRP::Protocol.connect_trp("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key") do |conn|
16
+ TrisulRP::Protocol.connect("127.0.0.1", 12001,"Demo_Client.crt","Demo_Client.key") do |conn|
18
17
 
19
18
  tm_arr = TrisulRP::Protocol. get_available_time(conn)
19
+
20
20
  req = TrisulRP::Protocol.mk_request(TRP::Message::Command::RESOURCE_GROUP_REQUEST,
21
21
  :context => 0,
22
- :resource_group => TrisulRP::Guids::RG_URL,
23
- :uri_pattern => "dll",:maxitems => 1000, :time_interval => mk_time_interval(tm_arr))
22
+ :resource_group => TrisulRP::Guids::RG_DNS,
23
+ :uri_pattern => "smtp",:maxitems => 1000, :time_interval => mk_time_interval(tm_arr))
24
24
 
25
25
  TrisulRP::Protocol.get_response(conn,req) do |resp|
26
26
 
@@ -30,7 +30,7 @@ class TestTrisulrp < Test::Unit::TestCase
30
30
  end
31
31
 
32
32
  follow_up = TrisulRP::Protocol.mk_request( TRP::Message::Command::RESOURCE_ITEM_REQUEST,
33
- :context => 0, :resource_group => TrisulRP::Guids::RG_URL,
33
+ :context => 0, :resource_group => TrisulRP::Guids::RG_DNS,
34
34
  :resource_ids => resource_ids)
35
35
 
36
36
  TrisulRP::Protocol.get_response(conn,follow_up) do | resp2 |
@@ -50,4 +50,4 @@ class TestTrisulrp < Test::Unit::TestCase
50
50
 
51
51
  end
52
52
 
53
- end
53
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{trisulrp}
8
- s.version = "1.2.7"
8
+ s.version = "1.2.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["vivek"]
12
- s.date = %q{2011-02-17}
12
+ s.date = %q{2011-02-22}
13
13
  s.description = %q{This gem deals about the trisul remote protocol}
14
14
  s.email = %q{vivek_rajagopal@yahoo.com}
15
15
  s.extra_rdoc_files = [
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "lib/trisulrp/protocol.rb",
31
31
  "lib/trisulrp/trp.pb.rb",
32
32
  "lib/trisulrp/trp.proto",
33
+ "lib/trisulrp/utils.rb",
33
34
  "test/Demo_Client.crt",
34
35
  "test/Demo_Client.key",
35
36
  "test/helper.rb",
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 2
8
- - 7
9
- version: 1.2.7
8
+ - 8
9
+ version: 1.2.8
10
10
  platform: ruby
11
11
  authors:
12
12
  - vivek
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-17 00:00:00 +05:30
17
+ date: 2011-02-22 00:00:00 +05:30
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -126,6 +126,7 @@ files:
126
126
  - lib/trisulrp/protocol.rb
127
127
  - lib/trisulrp/trp.pb.rb
128
128
  - lib/trisulrp/trp.proto
129
+ - lib/trisulrp/utils.rb
129
130
  - test/Demo_Client.crt
130
131
  - test/Demo_Client.key
131
132
  - test/helper.rb
@@ -151,7 +152,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
151
152
  requirements:
152
153
  - - ">="
153
154
  - !ruby/object:Gem::Version
154
- hash: -1049257823
155
+ hash: -371857393
155
156
  segments:
156
157
  - 0
157
158
  version: "0"