0

C を使用してパケット スニッフィングから HTTP コンテンツを構築しようとしています。現在、すべてのパケットをファイルに保存できますが、最初のパケットのヘッダーを削除したいと考えています。ヘッダーも TCP ペイロードの一部であるため、保存されています。ヘッダーの後の実際の本文は、二重の「CR、LF」の後または"\r\n\r\n"HTTP 応答で始まります。

"\r\n"それに続くバッファの部分だけを保存できるようにするにはどうすればよいですか? バッファは u_char 型です。コマンドがわかりません。私はGoogleや他の場所を見ましたが、ほとんどC#コマンドを見つけました.Cには何もありません.

私はこの機能を使用しています

void strtofcntnt(const u_char * Biffer, int size)
{
unsigned short iphdrlen;
struct iphdr *iph = (struct iphdr *)(Buffer + sizeof(struct ethhdr));
iphdrlen = iph->ihl*4;

struct tcphdr *tcph = (struct tcphdr*)(Buffer + iphdrlen + sizeof(struct ethhdr));

char data[] = *(Buffer);
char rdata[] = strstr(data, "\r\n\r\n");
unsigned int i;
for (i=0;i<=sizeof(data);i++)
{
fprintf(logfile,"%c",(unsigned int)data[i]);
}}

しかし、コンパイル中にchara data []およびchar rdata []行でエラーが発生します。エラーは、無効な初期化子を示しています。

4

1 に答える 1

6

u_char標準のデータ型ではありません。それを定義するヘッダーを調べる必要がありますが、確かにそれは単なるunsigned char.

データには null バイトが埋め込まれている可能性があるstrstrため、 は"\r\n\r\n". ある種の検索メソッドを記述する必要があります。

const char* memsearch(const char* haystack, size_t haystack_len,
                const char* needle, size_t needle_len)
{
    const char* p;

    for (p = haystack; p < (haystack + haystack_len - needle_len); p++) {
        if (memcmp(p, needle, needle_len) == 0)
            return p;
    }
    return NULL;
}
于 2013-06-25T04:19:43.063 に答える