C#sockaddr to sockaddr_in

时间:2012-07-31 02:12:11

标签: c# struct winsock

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

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

这是我被困的地方。我使用InteropSignatureToolkit(生成的代码:http://pastebin.com/twvGw030)为结构生成了C#代码,但我真的没有看到如何将sockaddr结构转换为sockaddr_in。在C ++中,这很容易,但我不知道如何在C#中完成它。

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

1 个答案:

答案 0 :(得分:3)

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