【问题标题】:C# sockaddr to sockaddr_inC# sockaddr 到 sockaddr_in
【发布时间】:2012-07-28 18:02:52
【问题描述】:

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

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

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

感谢您抽出宝贵时间阅读本文,希望您能帮助我。 :)

【问题讨论】:

  • 另一个站点上的代码可以独立地从 stackoverflow 更改,从而降低这篇文章的用处。

标签: c# struct winsock


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-19
    • 2013-09-07
    • 2015-06-21
    • 2021-12-12
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多