1

初心者として、C++ で libpcap を扱うときにほとんど問題がありません。「パケット」の内容を同じサイズのメモリ内の別の場所にコピーすることを目指しているので、邪魔されずに作業できます。

これが私のコードです:

 string content;
 packet = pcap_next(descr, &header);
 char *packet_copy = malloc(header.len);
 memcpy(packet_copy, packet, header.len);
 for (int i=0; i < (int) header.len; i++) {
        if (isprint(packet[i])) content += packet_copy[i];
 }

もちろん、これはうまくいきません。何か助けはありますか?ありがとうございました!

4

1 に答える 1

2

これは私にとってはうまくいきます:

#include <string>
#include <algorithm>
#include <iterator>
#include <pcap/pcap.h>

static pcap_t* descr = nullptr;
static pcap_pkthdr header;

int main()
{
    std::string content;
    auto packet = pcap_next(descr, &header);

    // append raw data
    content.append(packet, packet + header.len);

    // append printables only
    std::copy_if(packet, packet+header.len, std::back_inserter(content), 
            [](u_char ch) { return std::isprint(ch); });

    // for C++0x challenged compilers:
    for (u_char const* it=packet; it != packet + header.len; ++it)
    {
        if (isprint(*it)) content += *it;
    }
}
于 2013-03-19T12:20:53.330 に答える