我正在尝试用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());