您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ AppLayerParserThreadCtxFree函数代码示例

51自学网 2021-06-01 19:47:13
  C++
这篇教程C++ AppLayerParserThreadCtxFree函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中AppLayerParserThreadCtxFree函数的典型用法代码示例。如果您正苦于以下问题:C++ AppLayerParserThreadCtxFree函数的具体用法?C++ AppLayerParserThreadCtxFree怎么用?C++ AppLayerParserThreadCtxFree使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了AppLayerParserThreadCtxFree函数的27个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: DetectTlsSniTest02

/** * /test Test matching on a simple google.com SNI with pcre */static int DetectTlsSniTest02(void){    /* client hello */    uint8_t buf[] = { 0x16, 0x03, 0x03, 0x00, 0x82, 0x01, 0x00, 0x00, 0x7E,                      0x03, 0x03, 0x57, 0x04, 0x9F, 0x5D, 0xC9, 0x5C, 0x87,                      0xAE, 0xF2, 0xA7, 0x4A, 0xFC, 0x59, 0x78, 0x23, 0x31,                      0x61, 0x2D, 0x29, 0x92, 0xB6, 0x70, 0xA5, 0xA1, 0xFC,                      0x0E, 0x79, 0xFE, 0xC3, 0x97, 0x37, 0xC0, 0x00, 0x00,                      0x44, 0x00, 0x04, 0x00, 0x05, 0x00, 0x0A, 0x00, 0x0D,                      0x00, 0x10, 0x00, 0x13, 0x00, 0x16, 0x00, 0x2F, 0x00,                      0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35,                      0x00, 0x36, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00,                      0x3C, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x3F, 0x00, 0x40,                      0x00, 0x41, 0x00, 0x44, 0x00, 0x45, 0x00, 0x66, 0x00,                      0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B,                      0x00, 0x84, 0x00, 0x87, 0x00, 0xFF, 0x01, 0x00, 0x00,                      0x13, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x0D, 0x00, 0x00,                      0x0A, 0x67, 0x6F, 0x6F, 0x67, 0x6C, 0x65, 0x2E, 0x63,                      0x6F, 0x6D, };    Flow f;    SSLState *ssl_state = NULL;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars tv;    DetectEngineThreadCtx *det_ctx = NULL;    TcpSession ssn;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&tv, 0, sizeof(ThreadVars));    memset(&f, 0, sizeof(Flow));    memset(&ssn, 0, sizeof(TcpSession));    p = UTHBuildPacketReal(buf, sizeof(buf), IPPROTO_TCP,                           "192.168.1.5", "192.168.1.1",                           41424, 443);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.flags |= FLOW_IPV4;    f.proto = IPPROTO_TCP;    f.protomap = FlowGetProtoMapping(f.proto);    p->flow = &f;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    p->flowflags |= FLOW_PKT_TOSERVER|FLOW_PKT_ESTABLISHED;    f.alproto = ALPROTO_TLS;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->mpm_matcher = DEFAULT_MPM;    de_ctx->flags |= DE_QUIET;    s = DetectEngineAppendSig(de_ctx, "alert tls any any -> any any "                              "(msg:/"Test tls_sni option/"; "                              "tls_sni; content:/"google/"; nocase; "                              "pcre:/"/google//.com$/i/"; sid:1;)");    FAIL_IF_NULL(s);    s = DetectEngineAppendSig(de_ctx, "alert tls any any -> any any "                              "(msg:/"Test tls_sni option/"; "                              "tls_sni; content:/"google/"; nocase; "                              "pcre:/"/^//.[a-z]{2,3}$/iR/"; sid:2;)");    FAIL_IF_NULL(s);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS,                                STREAM_TOSERVER, buf, sizeof(buf));    FLOWLOCK_UNLOCK(&f);    FAIL_IF(r != 0);    ssl_state = f.alstate;    FAIL_IF_NULL(ssl_state);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p);    FAIL_IF_NOT(PacketAlertCheck(p, 1));    FAIL_IF_NOT(PacketAlertCheck(p, 2));    AppLayerParserThreadCtxFree(alp_tctx);    DetectEngineThreadCtxDeinit(&tv, det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePacket(p);    PASS;}
开发者ID:P1sec,项目名称:suricata,代码行数:99,


示例2: DetectHttpStatMsgSigTest03

//.........这里部分代码省略.........    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOCLIENT;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_HTTP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert http any any -> any any (msg:"                                   "/"HTTP status message/"; content:/"ok/"; "                                   "nocase; http_stat_msg; sid:1;)");    if (s == NULL) {        goto end;    }    s->next = SigInit(de_ctx,"alert http any any -> any any (msg:/"HTTP "                        "Status message nocase/"; content:!/"Not/"; "                        "http_stat_msg; sid:2;)");    if (s->next == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_HTTP,                                STREAM_TOSERVER, httpbuf1, httplen1);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_HTTP,                            STREAM_TOCLIENT, httpbuf2, httplen2);    if (r != 0) {        printf("toclient chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    FLOWLOCK_UNLOCK(&f);    http_state = f.alstate;    if (http_state == NULL) {        printf("no http state: ");        result = 0;        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (! PacketAlertCheck(p, 1)) {        printf("sid 1 didn't matched but should have: ");        goto end;    }    if (! PacketAlertCheck(p, 2)) {        printf("sid 2 didn't matched but should have: ");        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL) {        DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    }    if (de_ctx != NULL) {        SigGroupCleanup(de_ctx);        DetectEngineCtxFree(de_ctx);    }    StreamTcpFreeConfig(TRUE);    UTHFreePackets(&p, 1);    return result;}
开发者ID:norg,项目名称:suricata,代码行数:101,


示例3: DetectSshVersionTestDetect01

/** /test Send a get request in three chunks + more data. */static int DetectSshVersionTestDetect01(void){    Flow f;    uint8_t sshbuf1[] = "SSH-1.";    uint32_t sshlen1 = sizeof(sshbuf1) - 1;    uint8_t sshbuf2[] = "10-PuTTY_2.123" ;    uint32_t sshlen2 = sizeof(sshbuf2) - 1;    uint8_t sshbuf3[] = "/n";    uint32_t sshlen3 = sizeof(sshbuf3) - 1;    uint8_t sshbuf4[] = "whatever...";    uint32_t sshlen4 = sizeof(sshbuf4) - 1;    TcpSession ssn;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars th_v;    DetectEngineThreadCtx *det_ctx = NULL;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FAIL_IF_NULL(p);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_SSH;    f.proto = IPPROTO_TCP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL (de_ctx);    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert ssh any any -> any any (msg:/"SSH/"; ssh.protoversion:1.10; sid:1;)");    FAIL_IF_NULL(s);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCLogDebug("==> 1");    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH,                                STREAM_TOSERVER, sshbuf1, sshlen1);    FAIL_IF(r != 0);    SCLogDebug("==> 2");    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,                            sshbuf2, sshlen2);    FAIL_IF(r != 0);    SCLogDebug("==> 3");    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,                            sshbuf3, sshlen3);    FAIL_IF(r != 0);    SCLogDebug("==> 4");    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,                            sshbuf4, sshlen4);    FAIL_IF(r != 0);    SshState *ssh_state = f.alstate;    FAIL_IF_NULL(ssh_state);    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(!(PacketAlertCheck(p, 1)));    DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    AppLayerParserThreadCtxFree(alp_tctx);    PASS;}
开发者ID:micsoftvn,项目名称:suricata,代码行数:85,


示例4: DetectSslStateTest07

//.........这里部分代码省略.........    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS,                            STREAM_TOSERVER | STREAM_START, chello_buf,                            chello_buf_len);    FAIL_IF(r != 0);    FLOWLOCK_UNLOCK(&f);    ssl_state = f.alstate;    FAIL_IF(ssl_state == NULL);    /* do detect */    p->alerts.cnt = 0;    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(!PacketAlertCheck(p, 1));    FAIL_IF(PacketAlertCheck(p, 2));    FAIL_IF(PacketAlertCheck(p, 3));    FAIL_IF(PacketAlertCheck(p, 4));    FAIL_IF(PacketAlertCheck(p, 5));    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOCLIENT,                            shello_buf, shello_buf_len);    FAIL_IF(r != 0);    FLOWLOCK_UNLOCK(&f);    /* do detect */    p->alerts.cnt = 0;    p->flowflags = (FLOW_PKT_TOCLIENT | FLOW_PKT_ESTABLISHED);    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(PacketAlertCheck(p, 1));    FAIL_IF(!PacketAlertCheck(p, 2));    FAIL_IF(PacketAlertCheck(p, 3));    FAIL_IF(PacketAlertCheck(p, 4));    FAIL_IF(!PacketAlertCheck(p, 5));    PASS;    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER,                            client_change_cipher_spec_buf,                            client_change_cipher_spec_buf_len);    FAIL_IF(r != 0);    FLOWLOCK_UNLOCK(&f);    /* do detect */    p->alerts.cnt = 0;    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(PacketAlertCheck(p, 1));    FAIL_IF(PacketAlertCheck(p, 2));    FAIL_IF(!PacketAlertCheck(p, 3));    FAIL_IF(PacketAlertCheck(p, 4));    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOCLIENT,                            server_change_cipher_spec_buf,                            server_change_cipher_spec_buf_len);    FAIL_IF(r != 0);    FLOWLOCK_UNLOCK(&f);    /* do detect */    p->alerts.cnt = 0;    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(PacketAlertCheck(p, 1));    FAIL_IF(PacketAlertCheck(p, 2));    FAIL_IF(PacketAlertCheck(p, 3));    FAIL_IF(PacketAlertCheck(p, 4));    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER,                            toserver_app_data_buf, toserver_app_data_buf_len);    FAIL_IF(r != 0);    FLOWLOCK_UNLOCK(&f);    /* do detect */    p->alerts.cnt = 0;    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(PacketAlertCheck(p, 1));    FAIL_IF(PacketAlertCheck(p, 2));    FAIL_IF(PacketAlertCheck(p, 3));    FAIL_IF(PacketAlertCheck(p, 4));    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    SigGroupCleanup(de_ctx);    SigCleanSignatures(de_ctx);    DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    PASS;}
开发者ID:P1sec,项目名称:suricata,代码行数:101,


示例5: DetectTlsVersionTestDetect03

//.........这里部分代码省略.........    StreamMsg *stream_msg = StreamMsgGetFromPool();    if (stream_msg == NULL) {        printf("no stream_msg: ");        goto end;    }    memcpy(stream_msg->data, tlsbuf4, tlslen4);    stream_msg->data_len = tlslen4;    ssn.toserver_smsg_head = stream_msg;    ssn.toserver_smsg_tail = stream_msg;    de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert tcp any any -> any any (msg:/"TLS/"; tls.version:1.0; content:/"|01 00 00 AD|/"; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, tlsbuf1, tlslen1);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, tlsbuf2, tlslen2);    if (r != 0) {        printf("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, tlsbuf3, tlslen3);    if (r != 0) {        printf("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, tlsbuf4, tlslen4);    if (r != 0) {        printf("toserver chunk 4 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    SSLState *ssl_state = f.alstate;    if (ssl_state == NULL) {        printf("no tls state: ");        goto end;    }    if (ssl_state->client_connp.content_type != 0x16) {        printf("expected content_type %" PRIu8 ", got %" PRIu8 ": ",               0x16, ssl_state->client_connp.content_type);        goto end;    }    if (ssl_state->client_connp.version != TLS_VERSION_10) {        printf("expected version %04" PRIu16 ", got %04" PRIu16 ": ",               TLS_VERSION_10, ssl_state->client_connp.version);        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        printf("signature 1 didn't match while it should have: ");        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (de_ctx != NULL) {        SigGroupCleanup(de_ctx);        SigCleanSignatures(de_ctx);        DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);        DetectEngineCtxFree(de_ctx);    }    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    return result;}
开发者ID:HedgeMage,项目名称:suricata,代码行数:101,


示例6: DetectHttpMethodSigTest04

/** /test Check a signature with an request method and negation of the same */static int DetectHttpMethodSigTest04(void){    int result = 0;    Flow f;    uint8_t httpbuf1[] = "GET / HTTP/1.0/r/n"                         "Host: foo.bar.tld/r/n"                         "/r/n";    uint32_t httplen1 = sizeof(httpbuf1) - 1; /* minus the /0 */    TcpSession ssn;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars th_v;    DetectEngineThreadCtx *det_ctx = NULL;    HtpState *http_state = NULL;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_HTTP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,            "alert tcp any any -> any any (msg:/"Testing http_method/"; "            "content:/"GET/"; http_method; sid:1;)");    if (s == NULL) {        goto end;    }    s = s->next = SigInit(de_ctx,            "alert tcp any any -> any any (msg:/"Testing http_method/"; "            "content:!/"GET/"; http_method; sid:2;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_HTTP, STREAM_TOSERVER, httpbuf1, httplen1);    if (r != 0) {        SCLogDebug("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    http_state = f.alstate;    if (http_state == NULL) {        SCLogDebug("no http state: ");        goto end;    }    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        printf("sid 1 didn't match but should have: ");        goto end;    }    if (PacketAlertCheck(p, 2)) {        printf("sid 2 matched but shouldn't have: ");        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (de_ctx != NULL) {        SigGroupCleanup(de_ctx);        SigCleanSignatures(de_ctx);    }    if (det_ctx != NULL) {        DetectEngineThreadCtxDeinit(&th_v, (void *) det_ctx);    }    if (de_ctx != NULL) {        DetectEngineCtxFree(de_ctx);//.........这里部分代码省略.........
开发者ID:AmesianX,项目名称:suricata,代码行数:101,


示例7: DetectEngineSMTPFiledataTest03

static int DetectEngineSMTPFiledataTest03(void){    uint8_t mimemsg1[] = {0x65, 0x76,};    uint8_t mimemsg2[] = {0x69, 0x6C,};    uint32_t mimemsg1_len = sizeof(mimemsg1) - 1;    uint32_t mimemsg2_len = sizeof(mimemsg2) - 1;    TcpSession ssn;    Packet *p;    ThreadVars th_v;    DetectEngineCtx *de_ctx = NULL;    DetectEngineThreadCtx *det_ctx = NULL;    SMTPState *smtp_state = NULL;    Flow f;    int result = 1;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    f.alstate = SMTPStateAlloc();    MimeDecParseState *state = MimeDecInitParser(&f, NULL);    ((MimeDecEntity *)state->stack->top->data)->ctnt_flags = CTNT_IS_ATTACHMENT;    state->body_begin = 1;    if (SMTPProcessDataChunk((uint8_t *)mimemsg1, sizeof(mimemsg1), state) != 0)        goto end;    if (SMTPProcessDataChunk((uint8_t *)mimemsg2, sizeof(mimemsg2), state) != 0)        goto end;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_SMTP;    StreamTcpInitConfig(TRUE);    de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL)        goto end;    de_ctx->flags |= DE_QUIET;    de_ctx->sig_list = SigInit(de_ctx, "alert smtp any any -> any any "                               "(msg:/"file_data smtp test/"; "                               "file_data; content:/"evil/"; sid:1;)");    if (de_ctx->sig_list == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = 0;    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SMTP,                            STREAM_TOSERVER, mimemsg1, mimemsg1_len);    if (r != 0) {        printf("AppLayerParse for smtp failed. Returned %d", r);        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SMTP,                            STREAM_TOSERVER, mimemsg2, mimemsg2_len);    if (r != 0) {        printf("AppLayerParse for smtp failed. Returned %d", r);        FLOWLOCK_UNLOCK(&f);        goto end;    }    FLOWLOCK_UNLOCK(&f);    smtp_state = f.alstate;    if (smtp_state == NULL) {        printf("no smtp state: ");        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (PacketAlertCheck(p, 1)) {        printf("sid 1 matched but shouldn't have/n");        goto end;    }    result = 0;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);//.........这里部分代码省略.........
开发者ID:norg,项目名称:suricata,代码行数:101,


示例8: DetectHttpCookieSigTest08

//.........这里部分代码省略.........    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    f.alproto = ALPROTO_HTTP;    p1 = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    p1->flow = &f;    p1->flowflags |= FLOW_PKT_TOSERVER;    p1->flowflags |= FLOW_PKT_ESTABLISHED;    p1->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    p2 = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    p2->flow = &f;    p2->flowflags |= FLOW_PKT_TOCLIENT;    p2->flowflags |= FLOW_PKT_ESTABLISHED;    p2->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert http any any -> any any "                                   "(flow:to_client; content:/"response_user_agent/"; "                                   "http_cookie; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    /* request */    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_HTTP, STREAM_TOSERVER,                                httpbuf_request, httpbuf_request_len);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    http_state = f.alstate;    if (http_state == NULL) {        printf("no http state: ");        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p1);    if (PacketAlertCheck(p1, 1)) {        goto end;    }    /* response */    SCMutexLock(&f.m);    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_HTTP, STREAM_TOCLIENT,                            httpbuf_response, httpbuf_response_len);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p2);    if (!PacketAlertCheck(p2, 1)) {        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL) {        DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    }    if (de_ctx != NULL) {        SigGroupCleanup(de_ctx);        DetectEngineCtxFree(de_ctx);    }    StreamTcpFreeConfig(TRUE);    UTHFreePackets(&p1, 1);    UTHFreePackets(&p2, 1);    return result;}
开发者ID:AmesianX,项目名称:suricata,代码行数:101,


示例9: SMB2ParserTest01

static int SMB2ParserTest01(void){    int result = 1;    Flow f;    uint8_t smb2buf[] =        "/x00/x00/x00/x66" // NBSS        "/xfe/x53/x4d/x42/x40/x00/x00/x00/x00/x00/x00/x00/x00/x00" // SMB2        "/x3f/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00"        "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00"        "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00"        "/x24/x00/x01/x00x00/x00/x00/x00/x00/x00/x0/x00/x00/x00/x00/x00/x00/x00/x00"        "/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x00/x02/x02";    uint32_t smb2len = sizeof(smb2buf) - 1;    TcpSession ssn;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    f.protoctx = (void *)&ssn;    StreamTcpInitConfig(TRUE);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SMB2,                                STREAM_TOSERVER | STREAM_EOF, smb2buf,                                smb2len);    if (r != 0) {        printf("smb2 header check returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    FLOWLOCK_UNLOCK(&f);    SMB2State *smb2_state = f.alstate;    if (smb2_state == NULL) {        printf("no smb2 state: ");        result = 0;        goto end;    }    if (smb2_state->nbss.type != NBSS_SESSION_MESSAGE) {        printf("expected nbss type 0x%02x , got 0x%02x : ", NBSS_SESSION_MESSAGE, smb2_state->nbss.type);        result = 0;        goto end;    }    if (smb2_state->nbss.length != 102) {        printf("expected nbss length 0x%02x , got 0x%02x : ", 102, smb2_state->nbss.length);        result = 0;        goto end;    }    if (smb2_state->smb2.Command != SMB2_NEGOTIATE) {        printf("expected SMB2 command 0x%04x , got 0x%04x : ", SMB2_NEGOTIATE, smb2_state->smb2.Command);        result = 0;        goto end;    }end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    StreamTcpFreeConfig(TRUE);    return result;}
开发者ID:micsoftvn,项目名称:suricata,代码行数:66,


示例10: DetectHttpResponseLineTest02

/** */test Test that the http_response_line content matches against a http request *      which holds the content. */static int DetectHttpResponseLineTest02(void){    TcpSession ssn;    Packet *p = NULL;    ThreadVars th_v;    DetectEngineCtx *de_ctx = NULL;    DetectEngineThreadCtx *det_ctx = NULL;    HtpState *http_state = NULL;    Flow f;    uint8_t http_buf[] =        "GET /index.html HTTP/1.0/r/n"        "Host: www.openinfosecfoundation.org/r/n"        "User-Agent: This is dummy message body/r/n"        "Content-Type: text/html/r/n"        "/r/n";    uint32_t http_len = sizeof(http_buf) - 1;    uint8_t http_buf2[] =        "HTTP/1.0 200 OK/r/n"        "Content-Type: text/html/r/n"        "Content-Length: 7/r/n"        "/r/n"        "message";    uint32_t http_len2 = sizeof(http_buf2) - 1;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    FAIL_IF_NULL(alp_tctx);    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FAIL_IF_NULL(p);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flowflags |= (FLOW_PKT_TOSERVER|FLOW_PKT_ESTABLISHED);    p->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    f.alproto = ALPROTO_HTTP;    StreamTcpInitConfig(TRUE);    de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->flags |= DE_QUIET;    de_ctx->sig_list = SigInit(de_ctx,"alert http any any -> any any "                               "(http_response_line; content:/"HTTP/1.0 200 OK/"; "                               "sid:1;)");    FAIL_IF_NULL(de_ctx->sig_list);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    int r = AppLayerParserParse(&th_v, alp_tctx, &f, ALPROTO_HTTP, STREAM_TOSERVER, http_buf, http_len);    FAIL_IF(r != 0);    http_state = f.alstate;    FAIL_IF_NULL(http_state);    r = AppLayerParserParse(&th_v, alp_tctx, &f, ALPROTO_HTTP, STREAM_TOCLIENT, http_buf2, http_len2);    FAIL_IF(r != 0);    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(PacketAlertCheck(p, 1));    p->flowflags = (FLOW_PKT_TOCLIENT|FLOW_PKT_ESTABLISHED);    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF(!(PacketAlertCheck(p, 1)));    AppLayerParserThreadCtxFree(alp_tctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    PASS;}
开发者ID:thus,项目名称:suricata,代码行数:89,


示例11: DetectEngineSMTPFiledataTest01

//.........这里部分代码省略.........                0x73, 0x70, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F,                0x6E, 0x3A, 0x20, 0x61, 0x74, 0x74, 0x61, 0x63,                0x68, 0x6D, 0x65, 0x6E, 0x74, 0x3B, 0x20, 0x66,                0x69, 0x6C, 0x65, 0x6E, 0x61, 0x6D, 0x65, 0x3D,                0x22, 0x74, 0x65, 0x73, 0x74, 0x2E, 0x74, 0x78,                0x74, 0x22, 0x0D, 0x0A, 0x0D, 0x0A, 0x6d, 0x65,                0x73, 0x73, 0x61, 0x67, 0x65,};    uint32_t mimemsg_len = sizeof(mimemsg) - 1;    TcpSession ssn;    Packet *p;    ThreadVars th_v;    DetectEngineCtx *de_ctx = NULL;    DetectEngineThreadCtx *det_ctx = NULL;    SMTPState *smtp_state = NULL;    Flow f;    int result = 0;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    f.alstate = SMTPStateAlloc();    MimeDecParseState *state = MimeDecInitParser(&f, NULL);    ((MimeDecEntity *)state->stack->top->data)->ctnt_flags = CTNT_IS_ATTACHMENT;    state->body_begin = 1;    if (SMTPProcessDataChunk((uint8_t *)mimemsg, sizeof(mimemsg), state) != 0)        goto end;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST|PKT_STREAM_EOF;    f.alproto = ALPROTO_SMTP;    StreamTcpInitConfig(TRUE);    de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL)        goto end;    de_ctx->flags |= DE_QUIET;    de_ctx->sig_list = SigInit(de_ctx, "alert smtp any any -> any any "                               "(msg:/"file_data smtp test/"; "                               "file_data; content:/"message/"; sid:1;)");    if (de_ctx->sig_list == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_SMTP, STREAM_TOSERVER, mimemsg, mimemsg_len);    if (r != 0) {        printf("AppLayerParse for smtp failed. Returned %d", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    smtp_state = f.alstate;    if (smtp_state == NULL) {        printf("no smtp state: ");        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        printf("sid 1 didn't match but should have/n");        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        SigCleanSignatures(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    return result;}
开发者ID:togge,项目名称:suricata,代码行数:101,


示例12: DetectDnsQueryTest07

//.........这里部分代码省略.........    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_DNS, STREAM_TOSERVER, buf1, sizeof(buf1));    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    dns_state = f.alstate;    if (dns_state == NULL) {        printf("no dns state: ");        goto end;    }    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p1);    if (!(PacketAlertCheck(p1, 1))) {        printf("(p1) sig 1 didn't alert, but it should have: ");        goto end;    }    if (PacketAlertCheck(p1, 2)) {        printf("(p1) sig 2 did alert, but it should not have: ");        goto end;    }    SCMutexLock(&f.m);    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_DNS, STREAM_TOCLIENT, buf2, sizeof(buf2));    if (r != -1) {        printf("toserver client 1 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p2);    if (PacketAlertCheck(p2, 1)) {        printf("(p2) sig 1 alerted, but it should not have: ");        goto end;    }    if (PacketAlertCheck(p2, 2)) {        printf("(p2) sig 2 alerted, but it should not have: ");        goto end;    }    if (!(PacketAlertCheck(p2, 3))) {        printf("(p2) sig 3 didn't alert, but it should have: ");        goto end;    }    SCMutexLock(&f.m);    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_DNS, STREAM_TOSERVER, buf3, sizeof(buf3));    if (r != 0) {        printf("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p3);    if (PacketAlertCheck(p3, 1)) {        printf("(p3) sig 1 alerted, but it should not have: ");        goto end;    }    if (!(PacketAlertCheck(p3, 2))) {        printf("(p3) sig 2 didn't alert, but it should have: ");        goto end;    }    /** /todo should not alert, bug #839    if (PacketAlertCheck(p3, 3)) {        printf("(p3) sig 3 did alert, but it should not have: ");        goto end;    }    */    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    FLOW_DESTROY(&f);    UTHFreePacket(p1);    UTHFreePacket(p2);    UTHFreePacket(p3);    return result;}
开发者ID:dbrockus,项目名称:suricata,代码行数:101,


示例13: DetectDnsQueryTest03

/** /test simple google.com query matching (TCP) */static int DetectDnsQueryTest03(void){    /* google.com */    uint8_t buf[] = {   0x00, 28,                        0x10, 0x32, 0x01, 0x00, 0x00, 0x01,                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,                        0x06, 0x67, 0x6F, 0x6F, 0x67, 0x6C,                        0x65, 0x03, 0x63, 0x6F, 0x6D, 0x00,                        0x00, 0x10, 0x00, 0x01, };    int result = 0;    Flow f;    DNSState *dns_state = NULL;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars tv;    DetectEngineThreadCtx *det_ctx = NULL;    TcpSession ssn;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&tv, 0, sizeof(ThreadVars));    memset(&f, 0, sizeof(Flow));    memset(&ssn, 0, sizeof(TcpSession));    p = UTHBuildPacketReal(buf, sizeof(buf), IPPROTO_TCP,                           "192.168.1.5", "192.168.1.1",                           41424, 53);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.flags |= FLOW_IPV4;    f.proto = IPPROTO_TCP;    f.protomap = FlowGetProtoMapping(f.proto);    p->flow = &f;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    p->flowflags |= FLOW_PKT_TOSERVER|FLOW_PKT_ESTABLISHED;    f.alproto = ALPROTO_DNS;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->mpm_matcher = DEFAULT_MPM;    de_ctx->flags |= DE_QUIET;    s = DetectEngineAppendSig(de_ctx, "alert dns any any -> any any "                              "(msg:/"Test dns_query option/"; "                              "content:/"google/"; nocase; dns_query; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_DNS, STREAM_TOSERVER, buf, sizeof(buf));    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    dns_state = f.alstate;    if (dns_state == NULL) {        printf("no dns state: ");        goto end;    }    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        printf("sig 1 didn't alert, but it should have: ");        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePacket(p);    return result;}
开发者ID:dbrockus,项目名称:suricata,代码行数:98,


示例14: DetectSslVersionTestDetect01

//.........这里部分代码省略.........    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    f.alproto = ALPROTO_TLS;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert tls any any -> any any (msg:/"TLS/"; ssl_version:tls1.0; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, sslbuf1, ssllen1);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, sslbuf2, ssllen2);    if (r != 0) {        printf("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, sslbuf3, ssllen3);    if (r != 0) {        printf("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    r = AppLayerParserParse(alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER, sslbuf4, ssllen4);    if (r != 0) {        printf("toserver chunk 4 returned %" PRId32 ", expected 0: ", r);        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    SSLState *app_state = f.alstate;    if (app_state == NULL) {        printf("no ssl state: ");        goto end;    }    if (app_state->client_connp.content_type != 0x16) {        printf("expected content_type %" PRIu8 ", got %" PRIu8 ": ", 0x16, app_state->client_connp.content_type);        goto end;    }    if (app_state->client_connp.version != TLS_VERSION_10) {        printf("expected version %04" PRIu16 ", got %04" PRIu16 ": ", TLS_VERSION_10, app_state->client_connp.version);        goto end;    }    SCLogDebug("app_state is at %p, app_state->server_connp.version 0x%02X app_state->client_connp.version 0x%02X",        app_state, app_state->server_connp.version, app_state->client_connp.version);    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    SigGroupCleanup(de_ctx);    SigCleanSignatures(de_ctx);    DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    return result;}
开发者ID:HedgeMage,项目名称:suricata,代码行数:101,


示例15: DetectHttpRequestLineWrapper

static int DetectHttpRequestLineWrapper(const char *sig, const int expectation){    TcpSession ssn;    Packet *p = NULL;    ThreadVars th_v;    DetectEngineCtx *de_ctx = NULL;    DetectEngineThreadCtx *det_ctx = NULL;    HtpState *http_state = NULL;    Flow f;    uint8_t http_buf[] =        "GET /index.html HTTP/1.0/r/n"        "Host: www.openinfosecfoundation.org/r/n"        "User-Agent: This is dummy message body/r/n"        "Content-Type: text/html/r/n"        "/r/n";    uint32_t http_len = sizeof(http_buf) - 1;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    FAIL_IF_NULL(alp_tctx);    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FAIL_IF_NULL(p);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    f.alproto = ALPROTO_HTTP;    StreamTcpInitConfig(TRUE);    de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->flags |= DE_QUIET;    de_ctx->sig_list = SigInit(de_ctx, sig);    FAIL_IF_NULL(de_ctx->sig_list);    int sid = de_ctx->sig_list->id;    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    int r = AppLayerParserParse(&th_v, alp_tctx, &f, ALPROTO_HTTP, STREAM_TOSERVER, http_buf, http_len);    FAIL_IF(r != 0);    http_state = f.alstate;    FAIL_IF_NULL(http_state);    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    r = PacketAlertCheck(p, sid);    FAIL_IF_NOT(r == expectation);    AppLayerParserThreadCtxFree(alp_tctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    PASS;}
开发者ID:gozzy,项目名称:suricata,代码行数:72,


示例16: DetectHttpCookieSigTest07

/** /test Check the signature working to alert when http_cookie is not present */static int DetectHttpCookieSigTest07(void){    int result = 0;    Flow f;    uint8_t httpbuf1[] = "POST / HTTP/1.0/r/nUser-Agent: Mozilla/1.0/r/n"        "Cookie: dummy/r/n/r/n";    uint32_t httplen1 = sizeof(httpbuf1) - 1; /* minus the /0 */    TcpSession ssn;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars th_v;    DetectEngineThreadCtx *det_ctx = NULL;    HtpState *http_state = NULL;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_HTTP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert http any any -> any any (msg:"                                   "/"HTTP cookie/"; content:!/"dummy/"; "                                   "http_cookie; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_HTTP, STREAM_TOSERVER, httpbuf1, httplen1);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    http_state = f.alstate;    if (http_state == NULL) {        printf("no http state: ");        result = 0;        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (PacketAlertCheck(p, 1)) {        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL) {        DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    }    if (de_ctx != NULL) {        SigGroupCleanup(de_ctx);        DetectEngineCtxFree(de_ctx);    }    StreamTcpFreeConfig(TRUE);    UTHFreePackets(&p, 1);    return result;}
开发者ID:AmesianX,项目名称:suricata,代码行数:92,


示例17: DetectFtpbounceTestALMatch02

//.........这里部分代码省略.........    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_FTP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert tcp any any -> any any "                                   "(msg:/"Ftp Bounce/"; ftpbounce; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v,(void *)de_ctx,(void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP,                                STREAM_TOSERVER, ftpbuf1, ftplen1);    if (r != 0) {        SCLogDebug("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP, STREAM_TOSERVER,                            ftpbuf2, ftplen2);    if (r != 0) {        SCLogDebug("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP, STREAM_TOSERVER,                            ftpbuf3, ftplen3);    if (r != 0) {        SCLogDebug("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP, STREAM_TOSERVER,                            ftpbuf4, ftplen4);    if (r != 0) {        SCLogDebug("toserver chunk 4 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    FLOWLOCK_UNLOCK(&f);    FtpState *ftp_state = f.alstate;    if (ftp_state == NULL) {        SCLogDebug("no ftp state: ");        result = 0;        goto end;    }    if (ftp_state->command != FTP_COMMAND_PORT) {        SCLogDebug("expected command port not detected");        result = 0;        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    SigGroupCleanup(de_ctx);    SigCleanSignatures(de_ctx);    DetectEngineThreadCtxDeinit(&th_v,(void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    return result;}
开发者ID:micsoftvn,项目名称:suricata,代码行数:101,


示例18: DetectSslVersionTestDetect02

static int DetectSslVersionTestDetect02(void){    Flow f;    uint8_t sslbuf1[] = { 0x16 };    uint32_t ssllen1 = sizeof(sslbuf1);    uint8_t sslbuf2[] = { 0x03 };    uint32_t ssllen2 = sizeof(sslbuf2);    uint8_t sslbuf3[] = { 0x01 };    uint32_t ssllen3 = sizeof(sslbuf3);    uint8_t sslbuf4[] = { 0x01, 0x00, 0x00, 0xad, 0x03, 0x02 };    uint32_t ssllen4 = sizeof(sslbuf4);    TcpSession ssn;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars th_v;    DetectEngineThreadCtx *det_ctx = NULL;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    f.alproto = ALPROTO_TLS;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert tls any any -> any any (msg:/"TLS/"; ssl_version:tls1.0; sid:1;)");    FAIL_IF_NULL(s);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS,                                STREAM_TOSERVER, sslbuf1, ssllen1);    FAIL_IF(r != 0);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER,                            sslbuf2, ssllen2);    FAIL_IF(r != 0);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER,                            sslbuf3, ssllen3);    FAIL_IF(r != 0);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOSERVER,                            sslbuf4, ssllen4);    FAIL_IF(r != 0);    FLOWLOCK_UNLOCK(&f);    SSLState *app_state = f.alstate;    FAIL_IF_NULL(app_state);    FAIL_IF(app_state->client_connp.content_type != 0x16);    FAIL_IF(app_state->client_connp.version != TLS_VERSION_10);    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    FAIL_IF_NOT(PacketAlertCheck(p, 1));    AppLayerParserThreadCtxFree(alp_tctx);    DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    PASS;}
开发者ID:micsoftvn,项目名称:suricata,代码行数:85,


示例19: DetectFtpbounceTestALMatch03

//.........这里部分代码省略.........    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_FTP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert tcp any any -> any any "                                   "(msg:/"Ftp Bounce/"; ftpbounce; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v,(void *)de_ctx,(void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP,                                STREAM_TOSERVER, ftpbuf1, ftplen1);    if (r != 0) {        SCLogDebug("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP, STREAM_TOSERVER,                            ftpbuf2, ftplen2);    if (r != 0) {        SCLogDebug("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP, STREAM_TOSERVER,                            ftpbuf3, ftplen3);    if (r != 0) {        SCLogDebug("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_FTP, STREAM_TOSERVER,                            ftpbuf4, ftplen4);    if (r != 0) {        SCLogDebug("toserver chunk 4 returned %" PRId32 ", expected 0: ", r);        result = 0;        FLOWLOCK_UNLOCK(&f);        goto end;    }    FLOWLOCK_UNLOCK(&f);    FtpState *ftp_state = f.alstate;    if (ftp_state == NULL) {        SCLogDebug("no ftp state: ");        result = 0;        goto end;    }    if (ftp_state->command != FTP_COMMAND_PORT) {        SCLogDebug("expected command port not detected");        result = 0;        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    /* It should not match */    if (!(PacketAlertCheck(p, 1))) {        result = 1;    } else {        SCLogDebug("It should not match here!");    }end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    SigGroupCleanup(de_ctx);    SigCleanSignatures(de_ctx);    DetectEngineThreadCtxDeinit(&th_v,(void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    SCFree(p);    return result;}
开发者ID:micsoftvn,项目名称:suricata,代码行数:101,


示例20: DetectTlsIssuerTest02

//.........这里部分代码省略.........    p2 = UTHBuildPacketReal(server_hello, sizeof(server_hello), IPPROTO_TCP,                            "192.168.1.1", "192.168.1.5", 443, 51251);    p3 = UTHBuildPacketReal(certificate, sizeof(certificate), IPPROTO_TCP,                            "192.168.1.1", "192.168.1.5", 443, 51251);    FLOW_INITIALIZE(&f);    f.flags |= FLOW_IPV4;    f.proto = IPPROTO_TCP;    f.protomap = FlowGetProtoMapping(f.proto);    f.alproto = ALPROTO_TLS;    p1->flow = &f;    p1->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    p1->flowflags |= FLOW_PKT_TOSERVER;    p1->flowflags |= FLOW_PKT_ESTABLISHED;    p1->pcap_cnt = 1;    p2->flow = &f;    p2->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    p2->flowflags |= FLOW_PKT_TOCLIENT;    p2->flowflags |= FLOW_PKT_ESTABLISHED;    p2->pcap_cnt = 2;    p3->flow = &f;    p3->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    p3->flowflags |= FLOW_PKT_TOCLIENT;    p3->flowflags |= FLOW_PKT_ESTABLISHED;    p3->pcap_cnt = 3;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->mpm_matcher = DEFAULT_MPM;    de_ctx->flags |= DE_QUIET;    s = DetectEngineAppendSig(de_ctx, "alert tls any any -> any any "                              "(msg:/"Test tls_cert_issuer/"; "                              "tls_cert_issuer; content:/"google/"; nocase; "                              "sid:1;)");    FAIL_IF_NULL(s);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS,                                STREAM_TOSERVER, client_hello,                                sizeof(client_hello));    FLOWLOCK_UNLOCK(&f);    FAIL_IF(r != 0);    ssl_state = f.alstate;    FAIL_IF_NULL(ssl_state);    SigMatchSignatures(&tv, de_ctx, det_ctx, p1);    FAIL_IF(PacketAlertCheck(p1, 1));    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOCLIENT,                            server_hello, sizeof(server_hello));    FLOWLOCK_UNLOCK(&f);    FAIL_IF(r != 0);    SigMatchSignatures(&tv, de_ctx, det_ctx, p2);    FAIL_IF(PacketAlertCheck(p2, 1));    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_TLS, STREAM_TOCLIENT,                            certificate, sizeof(certificate));    FLOWLOCK_UNLOCK(&f);    FAIL_IF(r != 0);    SigMatchSignatures(&tv, de_ctx, det_ctx, p3);    FAIL_IF_NOT(PacketAlertCheck(p3, 1));    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePacket(p1);    UTHFreePacket(p2);    UTHFreePacket(p3);    PASS;}
开发者ID:P1sec,项目名称:suricata,代码行数:101,


示例21: DetectDnsQueryTest04

//.........这里部分代码省略.........    ThreadVars tv;    DetectEngineThreadCtx *det_ctx = NULL;    TcpSession ssn;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&tv, 0, sizeof(ThreadVars));    memset(&f, 0, sizeof(Flow));    memset(&ssn, 0, sizeof(TcpSession));    p1 = UTHBuildPacketReal(buf1, sizeof(buf1), IPPROTO_TCP,                           "192.168.1.5", "192.168.1.1",                           41424, 53);    p2 = UTHBuildPacketReal(buf2, sizeof(buf2), IPPROTO_TCP,                           "192.168.1.5", "192.168.1.1",                           41424, 53);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.flags |= FLOW_IPV4;    f.proto = IPPROTO_TCP;    f.protomap = FlowGetProtoMapping(f.proto);    f.alproto = ALPROTO_DNS;    p1->flow = &f;    p1->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    p1->flowflags |= FLOW_PKT_TOSERVER|FLOW_PKT_ESTABLISHED;    p2->flow = &f;    p2->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    p2->flowflags |= FLOW_PKT_TOSERVER|FLOW_PKT_ESTABLISHED;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->mpm_matcher = mpm_default_matcher;    de_ctx->flags |= DE_QUIET;    s = DetectEngineAppendSig(de_ctx, "alert dns any any -> any any "                              "(msg:/"Test dns_query option/"; "                              "dns_query; content:/"google/"; nocase; sid:1;)");    FAIL_IF_NULL(s);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_DNS,                                STREAM_TOSERVER, buf1, sizeof(buf1));    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        FAIL;    }    FLOWLOCK_UNLOCK(&f);    dns_state = f.alstate;    FAIL_IF_NULL(dns_state);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p1);    if (PacketAlertCheck(p1, 1)) {        printf("sig 1 alerted, but it should not have: ");        FAIL;    }    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_DNS, STREAM_TOSERVER,                            buf2, sizeof(buf2));    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0/n", r);        FLOWLOCK_UNLOCK(&f);        FAIL;    }    FLOWLOCK_UNLOCK(&f);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p2);    if (!(PacketAlertCheck(p2, 1))) {        printf("sig 1 didn't alert, but it should have: ");        FAIL;    }    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePacket(p1);    UTHFreePacket(p2);    PASS;}
开发者ID:gozzy,项目名称:suricata,代码行数:101,


示例22: AppLayerParserFromFile

int AppLayerParserFromFile(AppProto alproto, char *filename){    int result = 1;    Flow *f = NULL;    TcpSession ssn;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&ssn, 0, sizeof(ssn));    f = SCCalloc(1, sizeof(Flow));    if (f == NULL)        goto end;    FLOW_INITIALIZE(f);    f->flags |= FLOW_IPV4;    f->src.addr_data32[0] = 0x01020304;    f->dst.addr_data32[0] = 0x05060708;    f->sp = 10000;    f->dp = 80;    f->protoctx = &ssn;    f->proto = IPPROTO_TCP;    f->alproto = alproto;    uint8_t buffer[64];#ifdef AFLFUZZ_PERSISTANT_MODE    while (__AFL_LOOP(1000)) {        /* reset state */        memset(buffer, 0, sizeof(buffer));#endif /* AFLFUZZ_PERSISTANT_MODE */        FILE *fp = fopen(filename, "r");        BUG_ON(fp == NULL);        int start = 1;        int flip = 0;        while (1) {            int done = 0;            size_t result = fread(&buffer, 1, sizeof(buffer), fp);            if (result < sizeof(buffer))                done = 1;            //SCLogInfo("result %u done %d start %d", (uint)result, done, start);            uint8_t flags = 0;            if (flip) {                flags = STREAM_TOCLIENT;                flip = 0;            } else {                flags = STREAM_TOSERVER;                flip = 1;            }            if (start--) {                flags |= STREAM_START;            }            if (done) {                flags |= STREAM_EOF;            }            //PrintRawDataFp(stdout, buffer, result);            (void)AppLayerParserParse(NULL, alp_tctx, f, alproto, flags,                                      buffer, result);            if (done)                break;        }        fclose(fp);#ifdef AFLFUZZ_PERSISTANT_MODE    }#endif /* AFLFUZZ_PERSISTANT_MODE */    result = 0;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (f != NULL) {        FlowFree(f);    }    return result;}
开发者ID:jviiret,项目名称:suricata,代码行数:82,


示例23: DetectDnsQueryTest05

//.........这里部分代码省略.........    FLOWLOCK_UNLOCK(&f);    dns_state = f.alstate;    FAIL_IF_NULL(dns_state);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p1);    if (PacketAlertCheck(p1, 1)) {        printf("(p1) sig 1 alerted, but it should not have: ");        FAIL;    }    if (PacketAlertCheck(p1, 2)) {        printf("(p1) sig 2 did alert, but it should not have: ");        FAIL;    }    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_DNS, STREAM_TOSERVER,                            buf2, sizeof(buf2));    if (r != 0) {        printf("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        FAIL;    }    FLOWLOCK_UNLOCK(&f);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p2);    if (!(PacketAlertCheck(p2, 1))) {        printf("sig 1 didn't alert, but it should have: ");        FAIL;    }    if (PacketAlertCheck(p2, 2)) {        printf("(p2) sig 2 did alert, but it should not have: ");        FAIL;    }    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_DNS, STREAM_TOCLIENT,                            buf3, sizeof(buf3));    if (r != 0) {        printf("toclient chunk 1 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        FAIL;    }    FLOWLOCK_UNLOCK(&f);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p3);    if (PacketAlertCheck(p3, 1)) {        printf("sig 1 did alert, but it should not have: ");        FAIL;    }    if (PacketAlertCheck(p3, 2)) {        printf("(p3) sig 2 did alert, but it should not have: ");        FAIL;    }    FLOWLOCK_WRLOCK(&f);    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_DNS, STREAM_TOSERVER,                            buf4, sizeof(buf4));    if (r != 0) {        printf("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        FAIL;    }    FLOWLOCK_UNLOCK(&f);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p4);    if (PacketAlertCheck(p4, 1)) {        printf("(p4) sig 1 did alert, but it should not have: ");        FAIL;    }    if (!(PacketAlertCheck(p4, 2))) {        printf("sig 1 didn't alert, but it should have: ");        FAIL;    }    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePacket(p1);    UTHFreePacket(p2);    UTHFreePacket(p3);    UTHFreePacket(p4);    PASS;}
开发者ID:gozzy,项目名称:suricata,代码行数:101,


示例24: DetectSshVersionTestDetect03

//.........这里部分代码省略.........    ThreadVars th_v;    DetectEngineThreadCtx *det_ctx = NULL;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_SSH;    f.proto = IPPROTO_TCP;    StreamTcpInitConfig(TRUE);    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    de_ctx->flags |= DE_QUIET;    s = de_ctx->sig_list = SigInit(de_ctx,"alert ssh any any -> any any (msg:/"SSH/"; ssh.protoversion:2_compat; sid:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH,                                STREAM_TOSERVER, sshbuf1, sshlen1);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,                            sshbuf2, sshlen2);    if (r != 0) {        printf("toserver chunk 2 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,                            sshbuf3, sshlen3);    if (r != 0) {        printf("toserver chunk 3 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        goto end;    }    r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_SSH, STREAM_TOSERVER,                            sshbuf4, sshlen4);    if (r != 0) {        printf("toserver chunk 4 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        goto end;    }    FLOWLOCK_UNLOCK(&f);    SshState *ssh_state = f.alstate;    if (ssh_state == NULL) {        printf("no ssh state: ");        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (PacketAlertCheck(p, 1)) {        printf("Error, 1.7 version is not 2 compat, so the sig should not match: ");        goto end;    }    result = 1;end:    SigGroupCleanup(de_ctx);    SigCleanSignatures(de_ctx);    DetectEngineThreadCtxDeinit(&th_v, (void *)det_ctx);    DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    return result;}
开发者ID:micsoftvn,项目名称:suricata,代码行数:101,


示例25: DetectDnsQueryTest06

/** /test simple google.com query matching, pcre */static int DetectDnsQueryTest06(void){    /* google.com */    uint8_t buf[] = {   0x10, 0x32, 0x01, 0x00, 0x00, 0x01,                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00,                        0x06, 0x67, 0x6F, 0x6F, 0x67, 0x6C,                        0x65, 0x03, 0x63, 0x6F, 0x6D, 0x00,                        0x00, 0x10, 0x00, 0x01, };    Flow f;    RSDNSState *dns_state = NULL;    Packet *p = NULL;    Signature *s = NULL;    ThreadVars tv;    DetectEngineThreadCtx *det_ctx = NULL;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&tv, 0, sizeof(ThreadVars));    memset(&f, 0, sizeof(Flow));    p = UTHBuildPacketReal(buf, sizeof(buf), IPPROTO_UDP,                           "192.168.1.5", "192.168.1.1",                           41424, 53);    FLOW_INITIALIZE(&f);    f.flags |= FLOW_IPV4;    f.proto = IPPROTO_UDP;    f.protomap = FlowGetProtoMapping(f.proto);    p->flow = &f;    p->flags |= PKT_HAS_FLOW;    p->flowflags |= FLOW_PKT_TOSERVER;    f.alproto = ALPROTO_DNS;    DetectEngineCtx *de_ctx = DetectEngineCtxInit();    FAIL_IF_NULL(de_ctx);    de_ctx->mpm_matcher = mpm_default_matcher;    de_ctx->flags |= DE_QUIET;    s = DetectEngineAppendSig(de_ctx, "alert dns any any -> any any "                              "(msg:/"Test dns_query option/"; "                              "dns_query; content:/"google/"; nocase; "                              "pcre:/"/google//.com$/i/"; sid:1;)");    FAIL_IF_NULL(s);    s = DetectEngineAppendSig(de_ctx, "alert dns any any -> any any "                                      "(msg:/"Test dns_query option/"; "                                      "dns_query; content:/"google/"; nocase; "                                      "pcre:/"/^//.[a-z]{2,3}$/iR/"; sid:2;)");    FAIL_IF_NULL(s);    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    FLOWLOCK_WRLOCK(&f);    int r = AppLayerParserParse(NULL, alp_tctx, &f, ALPROTO_DNS,                                STREAM_TOSERVER, buf, sizeof(buf));    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        FLOWLOCK_UNLOCK(&f);        FAIL;    }    FLOWLOCK_UNLOCK(&f);    dns_state = f.alstate;    FAIL_IF_NULL(dns_state);    /* do detect */    SigMatchSignatures(&tv, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        printf("sig 1 didn't alert, but it should have: ");        FAIL;    }    if (!(PacketAlertCheck(p, 2))) {        printf("sig 2 didn't alert, but it should have: ");        FAIL;    }    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    FLOW_DESTROY(&f);    UTHFreePacket(p);    PASS;}
开发者ID:gozzy,项目名称:suricata,代码行数:91,


示例26: DetectHttpRawHeaderTest11

/** */test Test that the negated http_header content matches against a *      http request which doesn't hold the content. */static int DetectHttpRawHeaderTest11(void){    TcpSession ssn;    Packet *p = NULL;    ThreadVars th_v;    DetectEngineCtx *de_ctx = NULL;    DetectEngineThreadCtx *det_ctx = NULL;    HtpState *http_state = NULL;    Flow f;    uint8_t http_buf[] =        "GET /index.html HTTP/1.0/r/n"        "Host: www.openinfosecfoundation.org/r/n"        "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7/r/n"        "Content-Type: text/html/r/n"        "Content-Length: 26/r/n"        "/r/n"        "This is dummy message body/r/n";    uint32_t http_len = sizeof(http_buf) - 1;    int result = 0;    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    memset(&th_v, 0, sizeof(th_v));    memset(&f, 0, sizeof(f));    memset(&ssn, 0, sizeof(ssn));    p = UTHBuildPacket(NULL, 0, IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.protoctx = (void *)&ssn;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flowflags |= FLOW_PKT_TOSERVER;    p->flowflags |= FLOW_PKT_ESTABLISHED;    p->flags |= PKT_HAS_FLOW|PKT_STREAM_EST;    f.alproto = ALPROTO_HTTP;    StreamTcpInitConfig(TRUE);    de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL)        goto end;    de_ctx->flags |= DE_QUIET;    de_ctx->sig_list = SigInit(de_ctx,"alert http any any -> any any "                               "(msg:/"http header test/"; flow:to_server; "                               "content:!/"lalalalala/"; http_raw_header; "                               "sid:1;)");    if (de_ctx->sig_list == NULL)        goto end;    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&th_v, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    int r = AppLayerParserParse(alp_tctx, &f, ALPROTO_HTTP, STREAM_TOSERVER, http_buf, http_len);    if (r != 0) {        printf("toserver chunk 1 returned %" PRId32 ", expected 0: ", r);        result = 0;        SCMutexUnlock(&f.m);        goto end;    }    SCMutexUnlock(&f.m);    http_state = f.alstate;    if (http_state == NULL) {        printf("no http state: ");        result = 0;        goto end;    }    /* do detect */    SigMatchSignatures(&th_v, de_ctx, det_ctx, p);    if (!(PacketAlertCheck(p, 1))) {        printf("sid 1 didn't match but should have: ");        goto end;    }    result = 1;end:    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        SigCleanSignatures(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePackets(&p, 1);    return result;}
开发者ID:AmesianX,项目名称:suricata,代码行数:100,


示例27: DetectTemplateBufferTest

static int DetectTemplateBufferTest(void){    AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();    DetectEngineThreadCtx *det_ctx = NULL;    DetectEngineCtx *de_ctx = NULL;    Flow f;    Packet *p;    TcpSession tcp;    ThreadVars tv;    Signature *s;    int result = 0;    uint8_t request[] = "Hello World!";    /* Setup flow. */    memset(&f, 0, sizeof(Flow));    memset(&tcp, 0, sizeof(TcpSession));    memset(&tv, 0, sizeof(ThreadVars));    p = UTHBuildPacket(request, sizeof(request), IPPROTO_TCP);    FLOW_INITIALIZE(&f);    f.alproto = ALPROTO_TEMPLATE;    f.protoctx = (void *)&tcp;    f.proto = IPPROTO_TCP;    f.flags |= FLOW_IPV4;    p->flow = &f;    p->flags |= PKT_HAS_FLOW | PKT_STREAM_EST;    p->flowflags |= FLOW_PKT_TOSERVER | FLOW_PKT_ESTABLISHED;    StreamTcpInitConfig(TRUE);    de_ctx = DetectEngineCtxInit();    if (de_ctx == NULL) {        goto end;    }    /* This rule should match. */    s = DetectEngineAppendSig(de_ctx,        "alert tcp any any -> any any ("        "msg:/"TEMPLATE Test Rule/"; "        "template_buffer; content:/"World!/"; "        "sid:1; rev:1;)");    if (s == NULL) {        goto end;    }    /* This rule should not match. */    s = DetectEngineAppendSig(de_ctx,        "alert tcp any any -> any any ("        "msg:/"TEMPLATE Test Rule/"; "        "template_buffer; content:/"W0rld!/"; "        "sid:2; rev:1;)");    if (s == NULL) {        goto end;    }    SigGroupBuild(de_ctx);    DetectEngineThreadCtxInit(&tv, (void *)de_ctx, (void *)&det_ctx);    SCMutexLock(&f.m);    AppLayerParserParse(alp_tctx, &f, ALPROTO_TEMPLATE, STREAM_TOSERVER,        request, sizeof(request));    SCMutexUnlock(&f.m);    /* Check that we have app-layer state. */    if (f.alstate == NULL) {        goto end;    }    SigMatchSignatures(&tv, de_ctx, det_ctx, p);    if (!PacketAlertCheck(p, 1)) {        goto end;    }    if (PacketAlertCheck(p, 2)) {        goto end;    }    result = 1;end:    /* Cleanup. */    if (alp_tctx != NULL)        AppLayerParserThreadCtxFree(alp_tctx);    if (det_ctx != NULL)        DetectEngineThreadCtxDeinit(&tv, det_ctx);    if (de_ctx != NULL)        SigGroupCleanup(de_ctx);    if (de_ctx != NULL)        DetectEngineCtxFree(de_ctx);    StreamTcpFreeConfig(TRUE);    FLOW_DESTROY(&f);    UTHFreePacket(p);    return result;}
开发者ID:HedgeMage,项目名称:suricata,代码行数:93,



注:本文中的AppLayerParserThreadCtxFree函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ AppUi函数代码示例
C++ AppLayerParserThreadCtxAlloc函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。