Signed-off-by: OHMURA Kei <ohmura....@lab.ntt.co.jp>
---
 ryu/lib/snort/alert.py |  125 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 125 insertions(+)
 create mode 100644 ryu/lib/snort/__init__.py
 create mode 100644 ryu/lib/snort/alert.py

diff --git a/ryu/lib/snort/__init__.py b/ryu/lib/snort/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/ryu/lib/snort/alert.py b/ryu/lib/snort/alert.py
new file mode 100644
index 0000000..a185046
--- /dev/null
+++ b/ryu/lib/snort/alert.py
@@ -0,0 +1,125 @@
+# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import struct
+from struct import calcsize
+
+
+class SfTimeval32(object):
+    _PACK_STR = '!II'
+    _SIZE = 8
+
+    def __init__(self, tv_sec, tv_usec):
+        self.tv_sec = tv_sec
+        self.tv_usec = tv_usec
+
+    @classmethod
+    def parser(cls, buf, offset):
+        (tv_sec, tv_usec) = struct.unpack_from(
+            cls._PACK_STR, buf, offset)
+
+        msg = cls(tv_sec, tv_usec)
+
+        return msg
+
+
+class Event(object):
+    _PACK_STR = '!IIIIIII'
+    _SIZE = 36
+
+    def __init__(self, sig_generator, sig_id, sig_rev, classification,
+                 priority, event_id, event_reference, ref_time):
+        self.sig_generator = sig_generator
+        self.sig_id = sig_id
+        self.sig_rev = sig_rev
+        self.classification = classification
+        self.priority = priority
+        self.event_id = event_id
+        self.event_reference = event_reference
+        self.ref_time = ref_time
+
+    @classmethod
+    def parser(cls, buf, offset):
+        (sig_generator, sig_id, sig_rev, classification, priority,
+         event_id, event_reference) = struct.unpack_from(
+             cls._PACK_STR, buf, offset)
+        offset += calcsize(cls._PACK_STR)
+
+        ref_time = SfTimeval32.parser(buf, offset)
+
+        msg = cls(sig_generator, sig_id, sig_rev, classification,
+                  priority, event_id, event_reference, ref_time)
+
+        return msg
+
+
+class PcapPktHdr32(object):
+    _PACK_STR = '!II'
+    _SIZE = 16
+
+    def __init__(self, ts, caplen, len_):
+        self.ts = ts
+        self.caplen = caplen
+        self.len = len_
+
+    @classmethod
+    def parser(cls, buf, offset):
+        ts = SfTimeval32.parser(buf, offset)
+        offset += SfTimeval32._SIZE
+
+        (caplen, len_) = struct.unpack_from(
+            cls._PACK_STR, buf, offset)
+
+        msg = cls(ts, caplen, len_)
+
+        return msg
+
+
+class AlertPkt(object):
+    _ALERTMSG_PACK_STR = '!256s'
+    _ALERTPKT_PART_PACK_STR = '!IIIII65535s'
+    _ALERTPKT_SIZE = 65863
+
+    def __init__(self, alertmsg, pkth, dlthdr, nethdr, transhdr, data,
+                 val, pkt, event):
+        self.alertmsg = alertmsg
+        self.pkth = pkth
+        self.dlthdr = dlthdr
+        self.nethdr = nethdr
+        self.transhdr = transhdr
+        self.data = data
+        self.val = val
+        self.pkt = pkt
+        self.event = event
+
+    @classmethod
+    def parser(cls, buf):
+        alertmsg = struct.unpack_from(cls._ALERTMSG_PACK_STR, buf)
+        offset = calcsize(cls._ALERTMSG_PACK_STR)
+
+        pkth = PcapPktHdr32.parser(buf, offset)
+        offset += PcapPktHdr32._SIZE
+
+        (dlthdr, nethdr, transhdr, data, val, pkt) = \
+            struct.unpack_from(cls._ALERTPKT_PART_PACK_STR, buf,
+                               offset)
+        offset += calcsize(cls._ALERTPKT_PART_PACK_STR)
+
+        event = Event.parser(buf, offset)
+
+        msg = cls(alertmsg, pkth, dlthdr, nethdr, transhdr, data, val,
+                  pkt, event)
+
+        return msg
-- 
1.7.9.5


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Ryu-devel mailing list
Ryu-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to