【问题标题】:After Windows 10 update 1803 my program can't open a socket when running from network share在 Windows 10 更新 1803 后,我的程序从网络共享运行时无法打开套接字
【发布时间】:2018-10-25 04:12:08
【问题描述】:

我正在 Windows 10 中的共享文件夹中运行一些自行编写的 Winforms .net 3.5 应用程序。

一切正常,但在上次大更新 (1803) 之后,应用程序不再启动。

似乎程序在尝试打开套接字时崩溃了。第一个问题是访问数据库时出现以下异常:

2018-05-03 14:36:32,314 [1] ERROR NHibernate.Transaction.AdoTransaction [(null)] - Begin transaction failed
MySql.Data.MySqlClient.MySqlException: Unable to connect to any of the specified MySQL hosts. ---> System.Net.Sockets.SocketException: invalid argument
   at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
   at MySql.Data.Common.MyNetworkStream.CreateSocketStream(MySqlConnectionStringBuilder settings, IPAddress ip, Boolean unix)
   at MySql.Data.Common.MyNetworkStream.CreateStream(MySqlConnectionStringBuilder settings, Boolean unix)
   at MySql.Data.Common.StreamCreator.GetStream(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.NativeDriver.Open()

我已尝试解决此问题,但当程序从网络共享启动时,即使访问 SSH 服务器也无法正常工作:

2018-05-03 14:30:30,654 [1] ERROR WinForms.SpringApplication [(null)] - Main Handler
Tamir.SharpSsh.jsch.JSchException: System.Net.Sockets.SocketException: invalid argument
   at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
   at Tamir.SharpSsh.java.net.Socket..ctor(String host, Int32 port)
   at Tamir.SharpSsh.jsch.Util.createSocket(String host, Int32 port, Int32 timeout)
   bei Tamir.SharpSsh.jsch.Session.connect(Int32 connectTimeout)
   bei Tamir.SharpSsh.SshBase.ConnectSession(Int32 tcpPort)
   bei Tamir.SharpSsh.SshBase.Connect(Int32 tcpPort)
   bei Tamir.SharpSsh.SshBase.Connect()

当我在本地复制目录时,程序运行良好。

知道为什么当我从网络共享启动这个程序时,Windows 似乎阻止了对套接字的访问吗?

我知道信任 .net 代码,因此它可以从网络共享运行,但我已经更新了完全信任,但它仍然崩溃(如果我没有完全信任,通常它会更早崩溃) .

【问题讨论】:

  • 1803 原计划于 4 月 12 日。由于问题推迟到5月1日。由于这是一个内核更新,我完全预计旧程序会出现暂时的此类问题。
  • @Christopher 这不是暂时的,也不是令人惊讶的。早在 2015 年就宣布最终移除 SMB v1
  • @PanagiotisKanavos - 对我来说这很令人惊讶。奇怪的是我可以很好地打开文件,但它阻止了来自这些位置的网络访问。我希望 Windows 能发布更好的发行说明。解决方案很简单——我们只需配置我们的 SMB 服务器以使用较新的版本。
  • @bernhardrusch warnings were out there 。发布说明也在那里,包括路线图、安全公告、KB articles。过去几年的勒索软件攻击应该迫使每个人停止使用 SMB v1。在 Petya 之后使用不安全的协议真的没有任何借口
  • @bernhardrusch 我会接受,发现您的网络仍然使用 SMB v1.非常令人惊讶。特别是当它应该已经修补和现代化时。不过,这比 Petya 攻击要好。

标签: c# mysql sockets ssh windows-10


【解决方案1】:

我们有一些关于这个问题的信息:

Windows 10 更新 1803 无法打开网络连接 SMBv1 共享 上的可执行文件(如 Windows Server 2003)

您可以尝试将您的程序移动到与 SMBv2 或 SMBv3 兼容的服务器上进行检查。

【讨论】:

  • 更改(linux)服务器以使用 SMBv2 解决了问题 - 感谢您的帮助!
  • 这也是我的问题,但在我的情况下,SMBv2 在服务器上被禁用(我不知道为什么),所以只有 SMBv1 处于活动状态并正在使用
  • @Israel 您的信息是正确的,但我找不到关于此“功能”的任何官方信息。你知道微软关于它的任何官方信息吗?可以以某种方式禁用此“功能”吗?
  • @GeorgeChakhidze 很抱歉,我没有看到任何声明说从 SMB1 共享运行的二进制文件不能使用 IP 网络。
【解决方案2】:

我对此进行了测试 - 如果服务器仅允许 SMBv1(最大),则无法从共享的可执行文件创建任何连接。如果 SMB 是 v2,一切正常。

【讨论】:

    【解决方案3】:

    Microsoft 于 2018 年 6 月 26 日在 2018-06 Cumulative Update for Windows 10 Version 1803 for x64-based Systems (KB4284848)(操作系统内部版本 17134.137)中修复了此问题。

    其中一个修复是相关的:

    解决了一些用户在使用 SMBv1 协议从共享文件夹访问文件或运行程序时可能会收到错误的问题。错误是“提供了一个无效的参数”。

    此解决方法和其他解决方法在以下位置进行了讨论:

    https://blog.mertech.com/windows-10-version-1803-breaks-some-shared-folder-applications

    【讨论】:

    • KB4284848 在 Visual Studio 2015 中为我修复了一个类似的 System.Net.Sockets.SocketException,当我的解决方案在带有 SMB1 的 Buffalo NAS 驱动器上而不是在本地驱动器上时出现异常。
    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多