gpt4 book ai didi

c++ - boost asio 原始套接字

转载 作者:太空狗 更新时间:2023-10-29 20:30:06 27 4
gpt4 key购买 nike

我正在尝试使用 asio 编写一个简单的数据包制作工具。我需要通过不同的协议(protocol)发送原始数据。

我正在尝试更改 asio 文档中的 ping 示例。在这个例子中,icpm-packet 是通过 socket_.send_to 方法发送的。该方法将icmp-packet封装为ip-packet。

但我需要发送 ip header ,然后是 icmp header ,然后是没有任何封装的包体!我正在尝试使用 socket.send 方法来做到这一点。但它会引发异常。

这是代码。在我的类里面,我有:

boost::asio::basic_raw_socket<raw> socket_;

当“raw”是原始数据协议(protocol)类时。此类类似于来自 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());

最佳答案

使用 setsockopt 将值 IPPROTO_IP IP_HDRINCL 设置为 0。它应该有帮助

关于c++ - boost asio 原始套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8022452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com