我使用LSP / SPI为指定的应用程序制作嗅探器。但我不明白这个应用程序如何与网络协同工作。
没有" connect"或WSAConnect调用。我拦截了WSPRecv,WSPSend,WSPCloseSocket,但没有WSPConnect。
另一个奇怪的事情 - WSPRecv总是返回WSA_IO_PENDING,但lpOverlapped中的hEvent为null,lpCompletionRoutine也为null。并且没有调用WSPGetOverlappedResult(WSAGetOverlappedResult,GetOverlappedResult)和GetQueuedCompletionStatus(GetQueuedCompletionStatusEx)。我搞了所有这些功能,但根本没有通话!该应用程序如何收集数据?
你能帮帮我吗?它是如何工作的?我错过了什么?答案 0 :(得分:0)
父进程侦听连接。建立连接后,父进程会启动一个新的子进程来处理连接。子进程继承连接套接字的句柄。子进程通过套接字进行通信,最终关闭套接字并退出。
如果您单独查看子进程,您将看到发送,接收和最终关闭但没有初始连接,就像您描述的那样。
这是UNIX上更常见的模型,但有时在Windows上使用。
对于奇怪的重叠行为,如果你看一下非阻塞套接字的内部结构,你可能会看到这种情况。非阻塞套接字是在异步套接字上实现的,但我不知道细节。