【问题标题】:How do I determine if a connected socket uses IPSec?如何确定连接的套接字是否使用 IPSec?
【发布时间】:2017-02-06 14:13:20
【问题描述】:

我正在开发一个 Windows 服务器应用程序,该应用程序将使用 HTTPClient 通过套接字将敏感信息传输到另一个 Windows 服务器。服务器应该配置为使用 IPSec。所以是的,我不需要做任何事情来在应用程序级别设置安全连接。但是,我已被指示确保连接是否使用 IPSec,如果不是,则中止。

如何以编程方式确定连接是否确实受 IPSec 保护?该应用程序是 C#,在 Windows Server 2016 上。如果需要,我愿意接受基于 P/Invoke 的解决方案或 C 代码来完成这项工作。只要它最终可以与 C# HttpClient 类一起使用。

【问题讨论】:

    标签: c# windows sockets dotnet-httpclient ipsec


    【解决方案1】:

    这不是应用程序的问题,也无法完成。隧道对网络堆栈的应用程序级用户是透明的。如果您希望应用程序确保连接经过加密和身份验证,请使用 TLS。否则,由网络/系统管理员确保已设置策略,以便只允许 ipsec 流量。

    想象一下,您想办法通过以某种方式询问操作系统来确保设置隧道。然后在 2 年内需要扩大系统并将 IPSec 终端转移到专用硬件。哎呀。

    【讨论】:

    • 您可以检查是否有活动的 IPSec 隧道,但您无法确定您的套接字是否通过它连接。
    • 好吧,我相信你可以尝试添加很多hackery;我从来没有在 Widows 上设置过 ipsec,但在 Linux 上,我认为您可以获得连接列表,并尝试根据端口 #s 查看您的连接是否是其中之一,但这是错误的。
    • IPSec 连接的端口,但不是封装数据包的目标端口,最终会以您的 .NET 端点结束。
    • 好吧,对。我要说的是,如果运气好的话,你也许可以通过运行一些 netsh 命令并解析它们的结果来破解某些东西,但“可以”并不意味着“应该”。
    • @MK。我将在 Windows 的 LTSB 分支上,因此不会有任何我不知道的操作系统更新。所以hackery在这里可能是可以接受的。我希望有一个 WMI 解决方案,有点像 stackoverflow.com/questions/703225
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多