2013-03-19 60 views
1

作爲初學者我在處理libpcap在c + +時遇到了一些麻煩。 我的目標是將'數據包'的內容複製到另一個相同大小的內存中,以便我可以不受干擾地使用它。memcpy和內存管理pcap

這裏是我的代碼:

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]; 
} 

Ofcourse,這是行不通的。任何幫助? 謝謝!

+0

究竟不起作用? – 2013-03-19 12:15:53

回答

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; 
    } 
} 
+0

謝謝。我的編譯器正在抱怨printables-only函數。 「名稱空間」std'「和」預期表達式「中沒有名爲'copy_if'的成員。 – mrkva 2013-03-19 12:32:28

+0

'copy_if'在C++ 03中可疑地丟失。 – 2013-03-19 12:33:42

+0

@mrkva您可能正在使用舊的編譯器。我已經添加了該片的「兼容性」版本 – sehe 2013-03-19 12:35:56