我正在尝试使用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进行连接时(使用manage interfaces对话框中的remote interfaces选项卡),它会挂起并停止响应,直到关闭此应用程序。在Wireshark开始发送数据之前,是否还有其他数据需要发送到Wireshark?我只是错误地发送了数据吗?服务器设置是否正确?
发布于 2015-07-17 16:23:00
Wireshark是一个“窃听器”。
你不会“向它发送数据包进行查看”,它也不会“连接”到你的应用程序。
取而代之的是,Wireshark只需接入NIC,即可查看传输的所有数据包。因此,请使用常规客户端(如netcat)连接到您的服务器,并让Wireshark监控所涉及的NIC。
我相信,为了简单起见,您可以一次捕获所有网络适配器上的流量。
https://stackoverflow.com/questions/31466542
复制相似问题