SMBClient.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
  2. *
  3. * You can redistribute this program and/or modify it under the terms of
  4. * the GNU Lesser Public License as published by the Free Software Foundation,
  5. * either version 3 of the License, or (at your option) any later version.
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Net;
  10. using System.Net.Sockets;
  11. using System.Text;
  12. using SMBLibrary.NetBios;
  13. using SMBLibrary.SMB1;
  14. using Utilities;
  15. namespace SMBLibrary.Client
  16. {
  17. public class SMBClient
  18. {
  19. public const int NetBiosOverTCPPort = 139;
  20. public const int DirectTCPPort = 445;
  21. public const string NTLanManagerDialect = "NT LM 0.12";
  22. public SMBClient(IPAddress serverAddress, SMBTransportType transport)
  23. {
  24. NegotiateRequest request = new NegotiateRequest();
  25. request.Dialects.Add(NTLanManagerDialect);
  26. Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  27. if (transport == SMBTransportType.DirectTCPTransport)
  28. {
  29. serverSocket.Connect(serverAddress, DirectTCPPort);
  30. }
  31. else
  32. {
  33. serverSocket.Connect(serverAddress, NetBiosOverTCPPort);
  34. }
  35. TrySendMessage(serverSocket, request);
  36. }
  37. public static void TrySendMessage(Socket serverSocket, SMB1Command request)
  38. {
  39. SMB1Message message = new SMB1Message();
  40. message.Commands.Add(request);
  41. TrySendMessage(serverSocket, message);
  42. }
  43. public static void TrySendMessage(Socket serverSocket, SMB1Message message)
  44. {
  45. SessionMessagePacket packet = new SessionMessagePacket();
  46. packet.Trailer = message.GetBytes();
  47. TrySendPacket(serverSocket, packet);
  48. }
  49. public static void TrySendPacket(Socket serverSocket, SessionPacket response)
  50. {
  51. try
  52. {
  53. serverSocket.Send(response.GetBytes());
  54. }
  55. catch (SocketException)
  56. {
  57. }
  58. catch (ObjectDisposedException)
  59. {
  60. }
  61. }
  62. }
  63. }