0

我正在用 C# 编写一个应用程序,它挂钩另一个程序的连接函数调用并读取它正在连接的 IP。(我知道它是 IPv4)

目前它钩子、拦截和转发函数调用,我得到了变量,但由于 winsock 中的 connect 是使用 sockaddr* 变量作为第二个参数调用的,我需要将其转换为 sockaddr_in 以获取 IP 地址。(除非有办法从 sa_data 字段中检索 ip,但我找不到相关信息。)

这就是我卡住的地方。我使用 InteropSignatureToolkit(生成的代码:http://pastebin.com/twvGw030)为结构生成了 C# 代码,但我真的不知道如何将 sockaddr 结构转换为 sockaddr_in。在 C++ 中这很容易,但我不知道如何在 C# 中做到这一点。

感谢您花时间阅读本文,希望您能帮助我。:)

4

1 回答 1

3

IntPtr在 p/invoke 声明中使用 an ,然后您可以使用Marshal.PtrToStructure. 首先使用sockaddr查找,然后使用更具体的类型再次sa_family调用。Marshal.PtrToStructure

于 2012-07-31T02:24:43.760 回答