使用boost::asio
库创建IP,TCP或UDP套接字非常容易。但是,例如,对于以太网套接字,您需要实现boost/asio/basic_raw_socket.hpp
由于在互联网上没有这种事情的例子,并且我花了很长时间才找到答案,因此我将在此处进行变通。
我发现的最有用的资源是:AF_NETLINK (netlink) sockets using boost::asio
最佳答案
可以使用generic::raw_protocol来打开原始套接字:
std::string ifname("eth1");
typedef boost::asio::generic::raw_protocol raw_protocol_t;
typedef boost::asio::generic::basic_endpoint<raw_protocol_t> raw_endpoint_t;
sockaddr_ll sockaddr;
memset(&sockaddr, 0, sizeof(sockaddr));
sockaddr.sll_family = PF_PACKET;
sockaddr.sll_protocol = htons(ETH_P_ALL);
sockaddr.sll_ifindex = if_nametoindex(ifname.c_str());
sockaddr.sll_hatype = 1;
raw_protocol_t::socket socket(io_service, raw_protocol_t(PF_PACKET, SOCK_RAW))
socket.bind(raw_endpoint_t(&sockaddr, sizeof(sockaddr)));
关于c++ - 使用boost asio raw套接字创建第2层/以太网套接字(在C++中),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26212014/