OSSIM-agent源代码分析(十二)

2021SC@SDUSC

PacketUtils.py
OSSIM-agent源代码分析(十二)

简述

OSSIM Agent的主要职责是收集网络上存在的各种设备发送的所有数据,然后按照一种标准方式(standardized way)有序的发送给OSSIM Server,Agent收集到数据后在发送给Server之前要对这些数据进行标准化处理,这样Server就可以依一种统一的方式来处理这些信息,并且也简化了Server的处理过程。

PacketUtils是包处理函数,在对大量数据收集后,处理数据和检索包能力非常重要的一项工作。

OSSIM作为检测工具,基本的处理和检索功能的完备就是非常重要的一环

相关代码

初始导报:

from binascii import hexlify
import socket, struct, sys
import time
from Logger import Logger
from Utils import dumphexdata
logger = Logger.logger

UDPPacket类

初始化方法,初始化数据,将payload和其他关键数据存入对象中

def __init__(self, data):
        self._data = data
        (self.sport, self.dport, self.length, self.checksum) = struct.unpack(">HHHH", data[0:8])
        self._payload = data[8:]

payload get函数

def getpayload(self):
        return self._payload

转存函数,打印相关信息,调用dumpexdata函数

 def dump(self):
        print "UDP Header"
        print "SPORT:%u DPORT:%u LENGTH:%04x CHECKSUM:%04x" % (self.sport, self.dport, self.length, self.checksum)
        print "Payload"
        dumphexdata(self._payload)

str函数,通过正则表达式,匹配对应的字符串

   def __str__(self):
        st = """ udp_sport="%u" udp_dport="%u" udp_len="%u" udp_csum="%u" udp_payload="%s" """
        st = st % (self.sport, self.dport, self.length, self.checksum, hexlify(self._payload))

        return st

TCP包类
TCP格式

            0                   1                   2                   3   
            0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |          Source Port          |       Destination Port        |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |                        Sequence Number                        |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |                    Acknowledgment Number                      |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |  Data |           |U|A|P|R|S|F|                               |
           | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
           |       |           |G|K|H|T|N|N|                               |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |           Checksum            |         Urgent Pointer        |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |                    Options                    |    Padding    |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
           |                             data                              |
           +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

初始化函数: 数据中的TCP头可能是假的,必通过正则及匹配判断所有字段都是正确的或没有解码选项

def __init__(self,data):
     
        self._data = data
        (self.sport,self.dport, \
        self.seq,self.ack,self.b1,self.b2, \
        self.window,self.checksum,
        self.urgent)=struct.unpack(">HHIIBBHHH",data[0:20])

        
        self.offset = (self.b1 & 0xf0)>>4
        self.res = (self.b1&0xf)|(self.b2&0xc0)<<4

        self.__flags = {
   1:"C", 2:"E", 4:"U", 8:"A", 16:"P", 32:"R", 64:"S", 128:"F"}
        self.__flags_keys = self.__flags.keys().sort()
        self.flags = (self.b2 & 0x3f)
       
        self.opt =[]
        strlog ="""
            tcp packet
            sport = %s
            dport = %s
            seq = %s
            ack = %s
            b1 = 0x%02x
            b2 = 0x%02x
            offset = %d
        """ % (self.sport,self.dport,self.seq,self.ack,self.b1,self.b2,self.offset)
  
        if self.offset <= 5:
            self.payload = data[20:]

        else:
            optionsize = self.offset*4-20
            

            self.options = data[
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值