public static bool DoesServerSupportDialectWithSmbV2(string server, int dialect, out SMBSecurityModeEnum securityMode) { Trace.WriteLine("Checking " + server + " for SMBV2 dialect 0x" + dialect.ToString("X2")); securityMode = SMBSecurityModeEnum.NotTested; TcpClient client = new TcpClient(); client.ReceiveTimeout = 500; client.SendTimeout = 500; try { client.Connect(server, 445); } catch (Exception) { throw new SmbPortClosedException(server); } try { NetworkStream stream = client.GetStream(); var smb2 = new Smb2Protocol(stream, server); var negotiateresponse = smb2.SendNegotiateRequest(dialect); if ((negotiateresponse.SecurityMode & 1) != 0) { securityMode = SMBSecurityModeEnum.SmbSigningEnabled; if ((negotiateresponse.SecurityMode & 2) != 0) { securityMode |= SMBSecurityModeEnum.SmbSigningRequired; } } else { securityMode = SMBSecurityModeEnum.None; } Trace.WriteLine("Checking " + server + " for SMBV2 dialect 0x" + dialect.ToString("X2") + " = Supported"); return(true); } catch (Exception) { throw new Smb2NotSupportedException(server); } }
public static List <Smb2Protocol.NetworkInfo> GetFCTL_QUERY_NETWORK_INFO(string server, NetworkCredential credential = null) { Trace.WriteLine("Checking " + server + " for GetFCTL_QUERY_NETWORK_INFO"); TcpClient client = new TcpClient(); client.ReceiveTimeout = 500; client.SendTimeout = 500; try { client.Connect(server, 445); } catch (Exception) { Trace.WriteLine("Error with " + server + "(port closed)"); return(null); } try { NetworkStream stream = client.GetStream(); var smb2 = new Smb2Protocol(stream, server); smb2.SendNegotiateRequest(0x0302); smb2.SendSessionSetupRequests(credential); smb2.SendTreeConnect("\\\\" + server + "\\IPC$"); var o = smb2.GetNetworkInterfaceInfo(); client.Close(); return(o); } catch (Exception ex) { Trace.WriteLine("Error with " + server + "(" + ex.Message + ")"); return(null); } }