我正在用C#编写一个应用程序来挂钩另一个程序的connect函数调用并读取它所连接的IP。 (我知道它是IPv4)
目前它挂钩,截取并转发函数调用,我得到变量,但是因为在使用sockaddr *变量作为第二个参数调用winsock中的连接,我需要将其转换为sockaddr_in以获取IP地址。 (除非有办法从sa_data字段中检索ip,我找不到相关的信息。)
这是我被困的地方。我使用InteropSignatureToolkit(生成的代码:http://pastebin.com/twvGw030)为结构生成了C#代码,但我真的没有看到如何将sockaddr结构转换为sockaddr_in。在C ++中,这很容易,但我不知道如何在C#中完成它。
感谢您花时间阅读本文,希望您能帮助我。 :)
答案 0 :(得分:3)
在p / invoke声明中使用IntPtr
,然后您可以使用Marshal.PtrToStructure
。首先使用sockaddr
查找sa_family
,然后使用更具体的类型再次调用Marshal.PtrToStructure
。