suricata-輸出http-json body

默認(rèn)suricata的http body是單獨(dú)輸出的,現(xiàn)在我們想在eve.json輸出http請(qǐng)求的時(shí)候輸出請(qǐng)求和響應(yīng)體吆豹。

下載源碼

這兒下載的是5.0.3鱼的,好像最新源碼和這個(gè)版本的不太相同,這兒只是做個(gè)筆記痘煤。

輸出httpBody

  • 修改源碼
    打開(kāi) src目錄下 output-json-http.c 文件(以下源碼文件皆在src目錄下)凑阶。找到 JsonHttpLogJSON 方法。將此方法改為:
static void JsonHttpLogJSON(JsonHttpLogThread *aft, json_t *js, htp_tx_t *tx, uint64_t tx_id)
{
    LogHttpFileCtx *http_ctx = aft->httplog_ctx;
    json_t *hjs = json_object();
    if (hjs == NULL) {
        return;
    }

    JsonHttpLogJSONBasic(hjs, tx);
    /* log custom fields if configured */
    if (http_ctx->fields != 0)
        JsonHttpLogJSONCustom(http_ctx, hjs, tx);
    if (http_ctx->flags & LOG_HTTP_EXTENDED)
        JsonHttpLogJSONExtended(hjs, tx);
    if (http_ctx->flags & LOG_HTTP_REQ_HEADERS)
        JsonHttpLogJSONHeaders(hjs, LOG_HTTP_REQ_HEADERS, tx);
    if (http_ctx->flags & LOG_HTTP_RES_HEADERS)
        JsonHttpLogJSONHeaders(hjs, LOG_HTTP_RES_HEADERS, tx);
    //加入下面7行代碼
    if (tx) {
        HtpTxUserData *htud = (HtpTxUserData *)htp_tx_get_user_data(tx);
        if (htud != NULL) {
            BodyPrintableBuffer(hjs, &htud->request_body, "http_request_body");
            BodyPrintableBuffer(hjs, &htud->response_body, "http_response_body");
        }
    }

    json_object_set_new(js, "http", hjs);
}
  • 查看結(jié)果
    這塊我訪問(wèn)了下百度衷快,結(jié)果如下:
cat eve.json 
image.png

響應(yīng)體里面應(yīng)該是把漢語(yǔ)變成.................了

  • 解決中文無(wú)法顯示問(wèn)題

上述可知宙橱,輸出的結(jié)果中把中文變成...了。現(xiàn)在查看源碼文件 output-json-http.c
上述加入的函數(shù)為BodyPrintableBuffer()蘸拔,查看此函數(shù)定義:

image.png

可知該函數(shù)調(diào)用了PrintStringsToBuffer() 方法师郑。全局搜索下,發(fā)現(xiàn)在 util-print.c(util-print.h是對(duì)應(yīng)的頭文件)中找到該函數(shù)的定義调窍。


image.png

點(diǎn)入查看該函數(shù)宝冕,發(fā)現(xiàn)在此函數(shù)中對(duì)輸出進(jìn)行了判斷,如果字符串為可打印字符(isprint函數(shù))或者換行等字符則輸出邓萨,否則輸出'.'


image.png

漢字'中'的ASCII碼是4e2d地梨,驗(yàn)證下是否為可打印字符

image.png

可見(jiàn)中文為不可打印字符。替換上述代碼為:


void PrintStringsToBuffer(uint8_t *dst_buf, uint32_t *dst_buf_offset_ptr, uint32_t dst_buf_size,
                          const uint8_t *src_buf, const uint32_t src_buf_len)
{
    uint32_t ch = 0;
    for (ch = 0; ch < src_buf_len; ch++) {
//        PrintBufferData((char *)dst_buf, dst_buf_offset_ptr, dst_buf_size,
//                        "%c",
//                        (isprint((uint8_t)src_buf[ch]) ||
//                        src_buf[ch] == '\n' ||
//                        src_buf[ch] == '\r') ? (uint8_t)src_buf[ch] : '.');

        PrintBufferData((char *)dst_buf, dst_buf_offset_ptr, dst_buf_size,
                        "%c",
                        (uint8_t)src_buf[ch]);
    }
    dst_buf[dst_buf_size - 1] = 0;

    return;
}

保存后重新編譯安裝先誉,查看效果如下:

image.png

修改請(qǐng)求頭及響應(yīng)頭格式

為了減少后期工作湿刽,想直接把源碼輸出的格式改成想要的 。修改output-json-http.c的JsonHttpLogJSONHeaders方法如下:

static void JsonHttpLogJSONHeaders(json_t *js, uint32_t direction, htp_tx_t *tx) {
    htp_table_t *headers = direction & LOG_HTTP_REQ_HEADERS ?
                           tx->request_headers : tx->response_headers;
    char name[MAX_SIZE_HEADER_NAME] = {0};
    char value[MAX_SIZE_HEADER_VALUE] = {0};
    char head[6];
    size_t n = htp_table_size(headers);
    if (direction & LOG_HTTP_REQ_HEADERS) {
        strcpy(head, "_ReqH");
    } else {
        strcpy(head, "_ResH");
    }

    for (size_t i = 0; i < n; i++) {
        htp_header_t *h = htp_table_get_index(headers, i, NULL);
        if (h == NULL) {
            continue;
        }
        size_t size_name = bstr_len(h->name) < MAX_SIZE_HEADER_NAME - 1 ?
                           bstr_len(h->name) : MAX_SIZE_HEADER_NAME - 1;
        memcpy(name, bstr_ptr(h->name), size_name);
        name[size_name] = '\0';
        size_t size_value = bstr_len(h->value) < MAX_SIZE_HEADER_VALUE - 1 ?
                            bstr_len(h->value) : MAX_SIZE_HEADER_VALUE - 1;
        memcpy(value, bstr_ptr(h->value), size_value);
        value[size_value] = '\0';
        strcat(name, head);
        json_object_set_new(js,name, SCJsonString(value));
    }
}

最后結(jié)果為:這兒就是把請(qǐng)求頭和響應(yīng)頭都單獨(dú)拿出來(lái)了褐耳,沒(méi)有用數(shù)組诈闺。請(qǐng)求頭都以_ReqH結(jié)尾。響應(yīng)頭皆以_ResH結(jié)尾


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末铃芦,一起剝皮案震驚了整個(gè)濱河市雅镊,隨后出現(xiàn)的幾起案子襟雷,更是在濱河造成了極大的恐慌,老刑警劉巖仁烹,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耸弄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡卓缰,警方通過(guò)查閱死者的電腦和手機(jī)计呈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)征唬,“玉大人捌显,你說(shuō)我怎么就攤上這事∽芎” “怎么了扶歪?”我有些...
    開(kāi)封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)摄闸。 經(jīng)常有香客問(wèn)我善镰,道長(zhǎng),這世上最難降的妖魔是什么年枕? 我笑而不...
    開(kāi)封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任炫欺,我火速辦了婚禮,結(jié)果婚禮上画切,老公的妹妹穿的比我還像新娘竣稽。我一直安慰自己,他們只是感情好霍弹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著娃弓,像睡著了一般典格。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上台丛,一...
    開(kāi)封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天耍缴,我揣著相機(jī)與錄音,去河邊找鬼挽霉。 笑死防嗡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的侠坎。 我是一名探鬼主播蚁趁,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼实胸!你這毒婦竟也來(lái)了他嫡?” 一聲冷哼從身側(cè)響起番官,我...
    開(kāi)封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎钢属,沒(méi)想到半個(gè)月后徘熔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淆党,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年酷师,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片染乌。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窒升,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慕匠,到底是詐尸還是另有隱情饱须,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布台谊,位于F島的核電站蓉媳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锅铅。R本人自食惡果不足惜酪呻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盐须。 院中可真熱鬧玩荠,春花似錦、人聲如沸贼邓。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)塑径。三九已至女坑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間统舀,已是汗流浹背匆骗。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留誉简,地道東北人碉就。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像闷串,于是被迫代替她去往敵國(guó)和親瓮钥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351