2

我正在为指定的应用程序使用 LSP/SPI 制作嗅探器。但我不明白这个应用程序如何与网络一起工作。

没有“连接”或 WSAConnect 调用。我拦截了 WSPRecv、WSPSend、WSPCloseSocket,但没有拦截 WSPConnect。

另一个奇怪的事情 - WSPRecv 总是返回 WSA_IO_PENDING,但 lpOverlapped 中的 hEvent 为空,lpCompletionRoutine 也为空。并且没有调用 WSPGetOverlappedResult (WSAGetOverlappedResult, GetOverlappedResult) 和 GetQueuedCompletionStatus (GetQueuedCompletionStatusEx)。我挂钩了所有这些功能,但根本没有调用!这个应用程序如何接收数据?

你能帮助我吗?它是如何工作的?我错过了什么?

4

1 回答 1

0

父进程监听连接。一旦建立了连接,父进程就会启动一个新的子进程来处理连接。子进程继承已连接套接字的句柄。子进程通过套接字进行通信并最终关闭套接字并退出。

如果您孤立地查看子进程,您将看到发送、接收和最终关闭但没有初始连接,正如您所描述的那样。

这是 UNIX 上更常见的模型,但有时也用于 Windows。

至于奇怪的重叠行为,如果您查看非阻塞套接字的内部,这可能就是您所看到的。非阻塞套接字是在异步套接字上实现的,但我不知道细节。

于 2014-05-06T12:49:11.087 回答