HTTP ストリームから画像を抽出しようとしています。libpcap
パケットをキャプチャする場合を除き、C++ を使用する必要があり、他のライブラリは使用しません。これが私がやっていることです:
if ((tcp->th_flags & TH_ACK) != 0) {
i = tcp->th_ack;
const char *payload = (const char *) (packet + SIZE_ETHERNET + size_ip + size_tcp);
size_payload = ntohs(ip->ip_len) - (size_ip + size_tcp);
std::string temp(payload);
dict.insert(std::pair<u_int,std::string>(tcp->th_ack,temp));
}
そして、同じ ACK 番号を持つすべてのパケットを連結します。
std::string ss;
for(itt=dict.begin(); itt!= dict.end(); ++itt) {
std::string temp((*itt).second);
ss.append(temp);
}
std::ofstream file;
file.open("image.jpg", std::ios::out | std::ios::binary)
file << ss;
file.close();
ファイルに書き込むss
と、ファイルのサイズは送信された画像よりもはるかに小さくなります。これはバイナリ ファイルを書き込む正しい方法ですか?
私はC ++でこれをやろうとしています