【问题标题】:.NET: Conditional Socket.Accept.NET:条件套接字.Accept
【发布时间】:2009-04-12 13:01:26
【问题描述】:

似乎没有任何 Socket 或 ListenSocket 方法可以让我有条件地接受连接。

当我收到 SYN 时,我希望能够根据来源决定是否需要此连接,是发回 SYN/ACK(接受连接)还是 RST(强制拒绝)。

有没有人想实现这个目标?不幸的是,我不能在接受后立即关闭连接,根本不需要打开它。我还想避免将其用作 RAW 套接字。

【问题讨论】:

    标签: c# .net sockets tcp


    【解决方案1】:

    很遗憾,这是不可能的。无法使用 TCP 套接字连接有条件地接受。您只能在连接建立后对其进行过滤。

    但是您到底要过滤什么?在您获得 SYN 数据包时,您所知道的只是源的 IP 地址和它们尝试连接的端口。使用防火墙根据这些数据进行过滤似乎要好得多。我意识到这不是通过您的应用程序控制的,但它是一个可供考虑的替代方案。

    【讨论】:

    • 它是基于 TCP 的自定义协议的转发器服务。如果无法建立远程连接,我需要它开始拒绝本地连接。此外,还内置了一些防火墙功能。
    【解决方案2】:

    似乎不进入 RAW 模式是不可能的。一旦套接字进入 Winsock 的监听模式,它将接受任何东西,甚至在调用 Socket.Accept 之前。

    如果您需要此功能,您必须使用 RAW 模式并使用您自己的 TCP 堆栈解析数据包。

    【讨论】:

      【解决方案3】:

      也刮一下。 Windows XP SP2 和更高版本不再支持通过 RAW 套接字发送 TCP 数据包。详情请见here

      【讨论】:

        【解决方案4】:

        自 Windows Vista 以来有一个新的套接字选项允许这样做。但是没有标准库支持这一点。

        https://msdn.microsoft.com/en-us/library/windows/desktop/dd264794(v=vs.85).aspx

        http://www.winsocketdotnetworkprogramming.com/dotnetnetworkprogrammingsecurity13a.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 2021-12-20
          • 1970-01-01
          • 2010-10-04
          • 1970-01-01
          • 2015-07-08
          • 1970-01-01
          相关资源
          最近更新 更多