if (htp_state != NULL) {
htp_tx_t *tx = list_get(htp_state->connp->conn->transactions, ff->txid);
if (tx != NULL && tx->request_uri_normalized != NULL) {
- PrintRawUriFp(fp, (uint8_t *)bstr_ptr(tx->request_uri_normalized),
+ PrintRawJsonFp(fp, (uint8_t *)bstr_ptr(tx->request_uri_normalized),
bstr_len(tx->request_uri_normalized));
return;
}
table_iterator_reset(headers);
while (table_iterator_next(headers, (void **)&h) != NULL) {
if (strcasecmp("Host", bstr_tocstr(h->name)) == 0) {
- PrintRawUriFp(fp, (uint8_t *)bstr_ptr(h->value),
+ PrintRawJsonFp(fp, (uint8_t *)bstr_ptr(h->value),
bstr_len(h->value));
return;
}
table_iterator_reset(headers);
while (table_iterator_next(headers, (void **)&h) != NULL) {
if (strcasecmp("Referer", bstr_tocstr(h->name)) == 0) {
- PrintRawUriFp(fp, (uint8_t *)bstr_ptr(h->value),
+ PrintRawJsonFp(fp, (uint8_t *)bstr_ptr(h->value),
bstr_len(h->value));
return;
}
CreateTimeString(&p->ts, timebuf, sizeof(timebuf));
fprintf(fp, "{ \"id\": %u, ", ff->file_id);
- fprintf(fp, "\"timestamp\": \"%s\", ", timebuf);
+ fprintf(fp, "\"timestamp\": \"");
+ PrintRawJsonFp(fp, (uint8_t *)timebuf, strlen(timebuf));
+ fprintf(fp, "\", ");
if (p->pcap_cnt > 0) {
fprintf(fp, "\"pcap_pkt_num\": %"PRIu64", ", p->pcap_cnt);
}
fprintf(fp, "\", ");
fprintf(fp, "\"filename\": \"");
- PrintRawUriFp(fp, ff->name, ff->name_len);
+ PrintRawJsonFp(fp, ff->name, ff->name_len);
fprintf(fp, "\", ");
fprintf(fp, "\"magic\": \"");
if (ff->magic) {
- PrintRawUriFp(fp, (uint8_t *)ff->magic, strlen(ff->magic));
+ PrintRawJsonFp(fp, (uint8_t *)ff->magic, strlen(ff->magic));
} else {
fprintf(fp, "unknown");
}
}
}
+void PrintRawJsonFp(FILE *fp, uint8_t *buf, uint32_t buflen)
+{
+ char nbuf[2048] = "";
+ char temp[5] = "";
+ uint32_t u = 0;
+
+ for (u = 0; u < buflen; u++) {
+ if (buf[u] == '\\' || buf[u] == '/' || buf[u] == '\"') {
+ snprintf(temp, sizeof(temp), "\\%c", buf[u]);
+ } else if (isprint(buf[u])) {
+ snprintf(temp, sizeof(temp), "%c", buf[u]);
+ } else {
+ snprintf(temp, sizeof(temp), "\\\\x%02X", buf[u]);
+ }
+ strlcat(nbuf, temp, sizeof(nbuf));
+ }
+ fprintf(fp, "%s", nbuf);
+}
+
void PrintRawUriFp(FILE *fp, uint8_t *buf, uint32_t buflen)
{
char nbuf[2048] = "";
void PrintRawLineHexFp(FILE *, uint8_t *, uint32_t);
void PrintRawUriFp(FILE *, uint8_t *, uint32_t);
+void PrintRawJsonFp(FILE *, uint8_t *, uint32_t);
void PrintRawDataFp(FILE *, uint8_t *, uint32_t);
void PrintRawLineHexBuf(char *, uint32_t, uint8_t *, uint32_t );
const char *PrintInet(int , const void *, char *, socklen_t);