使用Boost-ASIO协议搭建服务器,供Wireshark连接和接收报文

Setting up a server using Boost-ASIO for Wireshark to connect to and receive packets?

本文关键字:连接 Wireshark 报文 协议 Boost-ASIO 服务器 使用      更新时间:2023-10-16

我正在尝试使用ASIO创建一个简单的服务器,以便将数据包发送到Wireshark以使用远程接口功能查看它们。

设置服务器并等待连接的代码。

void server(boost::asio::io_service& io_service, unsigned short port)
{
    tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), port));
    for (;;)
    {
        auto pSock = std::make_shared<tcp::socket>(io_service);
        auto handler = [pSock](const boost::system::error_code& err) -> void
        {
            if (err)
            {
                pSock->close();
                return;
            }
            auto buf = connectToNamedPipe();
            streamOut(pSock, buf);
            pSock->close();
        };
        std::cout << "Awaiting connection" << std::endl;
        a.async_accept(*pSock, handler);
        io_service.run();
    }
}

这是客户端连接后发送数据包的代码

void streamOut(std::shared_ptr<tcp::socket> pSock, const std::pair<std::unique_ptr<char[]>, std::size_t>& b)
{
    ::boost::system::error_code ec;
    write(*pSock, ::boost::asio::buffer(b.first.get(), b.second));
    for (;;) 
    {
        char a;
        std::cin >> a;
        if (a == 'e')
            return;
    }
}

然而,当Wireshark连接时(使用管理接口对话框中的远程接口选项卡),它会挂起并停止响应,直到关闭该应用程序。在Wireshark开始发送数据之前,我需要发送一些其他数据吗?我只是发送错误的数据吗?服务器设置不正确?

Wireshark是一个"窃听"。

你不"发送数据包给它查看",它也不"连接"到你的应用程序。

相反,Wireshark只是进入网卡并查看所有传输的数据包。因此,使用常规客户端(如netcat)连接到服务器,并让Wireshark监控所涉及的网卡。

我认为,为了简单起见,您可以同时捕获所有网络适配器上的流量。