【发布时间】:2016-05-02 22:11:52
【问题描述】:
是否可以在以下情况下提取目标和源 IP 地址?我能够从in_buffer 中提取以太网源地址和目标地址。如果可以的话,有什么建议吗?
sockaddr_ll sockaddr = sockaddr_ll();
sockaddr.sll_family = PF_PACKET;
sockaddr.sll_protocol = htons(ETH_P_ALL);
// is the interface index of the interface
sockaddr.sll_ifindex = if_nametoindex(argv[1]);
sockaddr.sll_hatype = 1;
boost::asio::io_service io_service;
raw_protocol_t::socket socket(io_service, raw_protocol_t(PF_PACKET, SOCK_RAW));
socket.bind(raw_endpoint_t(&sockaddr, sizeof(sockaddr)));
boost::asio::generic::raw_protocol::socket::receive_buffer_size option;
socket.get_option(option);
std::string in_buffer(option.value(), '\0');
raw_endpoint_t rep = raw_endpoint_t();
while (true)
{
size_t len = socket.receive_from(boost::asio::buffer(&in_buffer[0], in_buffer.size()), rep);
}
【问题讨论】:
-
抱歉,如果从您的代码中可以看出这一点,但 IP 地址是二进制还是可读形式?
-
好吧,我不知道。我正在尝试提取它们
-
如果您不知道,那么提取它们是不可能的。您至少必须知道地址的格式。您可以在不进行任何进一步转换的情况下将它们打印出来吗?如果是,它们是字符串,即可读。
-
我应该使用 asio 来提取它们还是一些解决方法?