我正在嘗試用asio編寫一個簡單的數據包crafter。我需要通過不同的協議發送原始數據。提升阿西歐原始插座
我試圖從asio文檔更改ping示例。在這個例子中,icpm-packet通過socket_.send_to方法發送。此方法將icmp-packet封裝到ip-packet。
但我需要發送IP頭,然後icmp頭,然後沒有任何封裝的數據包正文!我試圖用socket.send方法來做到這一點。但它引發了一個異常。
這是代碼。 在我的課,我有:
boost::asio::basic_raw_socket<raw> socket_;
當「生」是類原始數據的協議。這個類就像asio的'icmp'類,protocol_等於IPPROTO_RAW。
然後我發送數據:
IPV4header ip_header;
//fill ip_header
ICMPHeader echo_request;
//fill icmp-header
std::string body("---");
// Encode the request packet.
boost::asio::streambuf request_buffer;
std::ostream os(&request_buffer);
os << ip_header << echo_request << body;
socket_.send(request_buffer.data(), request_buffer.size());