收到wireshark在我的c++游戏中看不到的奇怪的包

fhity93d  于 2023-02-26  发布在  其他
关注(0)|答案(1)|浏览(139)

我目前正在开发一个使用主循环来绘制物品的游戏。在进入主循环之前,我创建了一个线程,使用低级数据包接收器函数来接收数据包。然而,当我运行代码时,我注意到我的程序接收到带有随机IP地址的奇怪数据包,如“237.0.0.0“、“45.0.0.0“和“185.0.0.0“。每次我重新启动程序时,这些IP地址都会更改。
下面是数据包接收器函数的代码:

//thread creation in main function:
this->receive_thead = std::thread(&OGame::packet_receiver, this);

void OGame::packet_receiver() {
    while (1) {
        std::lock_guard<std::mutex> lock(packet_mutex);
        Packet rec = this->network.Receive();
        if (rec.type == -1)
            continue;
        printf("Received actual packet!\n");
    }
}

Packet AgiborNet::Receive()
{
    Packet packet{ 0 };
    char rec_buffer[sizeof(packet) + 13];
    struct sockaddr_in sender_addr;
    int sender_addr_size = sizeof(sender_addr);
    int recv_size = recvfrom(this->receive_socket, rec_buffer, sizeof(rec_buffer), 0, (struct sockaddr*)&sender_addr, &sender_addr_size);
    if (sender_addr.sin_addr.s_addr == this->send_ip.sin_addr.s_addr) {
        Packet empty_packet = { 0 };
        empty_packet.type = -1;
        return empty_packet;
    }
    std::cout << inet_ntoa(sender_addr.sin_addr) << ": " << rec_buffer << std::endl;
    std::cout << "Packet contents: ";
    for (int i = 0; i < recv_size; i++) {
        std::cout << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(rec_buffer[i]) << " ";
    }
    std::cout << std::dec << std::endl;

    return packet;
}

我还注意到Wireshark没有检测到这些数据包。另外,当我发送至少一个数据包时,我的程序停止接收这些奇怪的数据包。对于上下文,我正在侦听和等待特定端口上的广播数据包。
有人能帮我理解为什么我的程序会接收到这些带有随机IP地址的奇怪数据包,为什么Wireshark没有检测到它们吗?谢谢。

5uzkadbs

5uzkadbs1#

正如你们中的一些人在评论中所说的,问题是我没有检查recvfrom的返回值。

相关问题