使用Boost-ASIO协议搭建服务器,供Wireshark连接和接收报文
Setting up a server using Boost-ASIO for Wireshark to connect to and receive packets?
我正在尝试使用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监控所涉及的网卡。
我认为,为了简单起见,您可以同时捕获所有网络适配器上的流量。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- WinSock2:connect() 提供"连接被拒绝"
- 使用Boost-ASIO协议搭建服务器,供Wireshark连接和接收报文