Tal Aloni 6f22af8bf8 NTTransactionRequest: Improved readability 8 năm trước cách đây
..
Authentication 092869efa1 SMB2: implemented server-initiated SPNEGO authentication 8 năm trước cách đây
Client 6700166f5a Renamed SMBMessage to SMB1Message 8 năm trước cách đây
EnumStructures bbd572e938 Added conversion operators to and from AccessMask 8 năm trước cách đây
Enums 55b83add4e Added SMB 2.0 / 2.1 server implementation 8 năm trước cách đây
Helpers 8e67e1fab8 Moved FILETIME helper methods from SMB1Helper to FileTimeHelper 8 năm trước cách đây
NetBios 3aa7825d1c Renamed SMBConnectionReceiveBuffer to NBTConnectionReceiveBuffer 8 năm trước cách đây
Properties cbe4160675 SMBServer v1.1.0 8 năm trước cách đây
RPC 3f36591e14 RPC PDUs can now be read starting from a specified buffer offset 8 năm trước cách đây
SMB1 6f22af8bf8 NTTransactionRequest: Improved readability 8 năm trước cách đây
SMB2 88204faf9b SMB2: Honor SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB flag 8 năm trước cách đây
Server b24345b5ca NTFileSystemHelper: Added OpenFile helper method 8 năm trước cách đây
Services 9265858968 Removed leading slash from ServerService.PipeName and WorkstationService.PipeName 8 năm trước cách đây
Structures d5b73a8f9d Added MS-FSCC enums and structures required for SMB2 8 năm trước cách đây
Tests 017a96240f Renamed NTLMv2ClientChallengeStructure class to NTLMv2ClientChallenge 8 năm trước cách đây
Utilities 0641ccd6cf PrefetchStream: changed debug message 8 năm trước cách đây
Win32 6772c0c33e IsNTLMv1ExtendedSecurity and IsNTLMv2NTResponse methods added to AuthenticationMessageUtils 8 năm trước cách đây
Readme.md 3539d3bd31 Updated Readme.md 8 năm trước cách đây
Readme.txt 44d1866f0e Updated readme.txt 8 năm trước cách đây
RevisionHistory.txt cbe4160675 SMBServer v1.1.0 8 năm trước cách đây
SMBLibrary.csproj 88204faf9b SMB2: Honor SMB2_CLOSE_FLAG_POSTQUERY_ATTRIB flag 8 năm trước cách đây

Readme.md

About SMBLibrary:

SMBLibrary is an open-source C# SMB 1.0/CIFS 1.0, SMB 2.0 and SMB 2.1 server implementation.
SMBLibrary gives .NET developers an easy way to share a directory / file system / virtual file system, with any operating system that supports the SMB protocol.
SMBLibrary shares can be accessed from any Windows version since Windows NT 4.0.

Supported SMB / CIFS transport methods:

• NetBIOS over TCP (port 139)
• Direct TCP hosting (port 445)

'NetBIOS over TCP' and 'Direct TCP hosting' are almost identical, the only differences:
  • A 'session request' packet is initiating the NBT connection.
  • A 'keep alive' packet is sent from time to time over NBT connections.
  • SMB2: Direct TCP hosting supports large MTUs.

Notes:

By default, Windows already use ports 139 and 445. there are several techniques to free / utilize those ports:

Method 1: Disable Windows File and Printer Sharing server completely:
Windows XP/2003:
  1. For every network adapter: Uncheck 'File and Printer Sharing for Microsoft Networks".
  2. Navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters and set SMBDeviceEnabled to '0' (this will free port 445).
  3. Reboot.
Windows 7/8/2008/2012:

Disable the "Server" service (p.s. "TCP\IP NETBIOS Helper" should be enabled).

Method 2: Use Windows File Sharing AND SMBLibrary:

Windows bind port 139 to the first IP addres of every adapter, while port 445 is bound globally. This means that if you'll disable port 445 (or block it using a firewall), you'll be able to use a different service on port 139 for every IP address.

Additional Notes:
  • To free port 139 for a given adapter, go to 'Internet Protocol (TCP/IP) Properties' > Advanced > WINS, and select 'Disable NetBIOS over TCP/IP'. Uncheck 'File and Printer Sharing for Microsoft Networks' to ensure Windows will not answer to SMB traffic on port 445 for this adapter.

  • It's important to note that disabling NetBIOS over TCP/IP will also disable NetBIOS name service for that adapter (a.k.a. WINS), This service uses UDP port 137. SMBLibrary offers a name service of its own.

  • You can install a virtual network adapter driver for Windows to be used solely with SMBLibrary:

    • You can install the 'Microsoft Loopback adapter' and use it for server-only communication with SMBLibrary.
    • A limited alternative is 'OpenVPN TAP-Windows Adapter' that can be used for client communication with SMBLibrary.

However, you will have to configure this adapter to use a separate network segment. The driver installation can be downloaded from: https://openvpn.net/index.php/open-source/downloads.html To get started, go to Adapter properties > 'Advanced' and set 'Media Status' to 'Always Connected'.

Windows 7/8/2008/2012:
  • if you want localhost access from Windows explorer to work as expected, you must use port 445, you must also specify the IP address that you selected (\\127.0.0.1 or \\localhost will not work as expected).
Method 3: Use an IP address that is invisible to Windows File Sharing:

Using PCap.Net you can programmatically setup a virtual Network adapter and intercept SMB traffic (similar to how a virtual machine operates), You should use the ARP protocol to notify the network about the new IP address, and then process the incoming SMB traffic using SMBLibrary, good luck!

Using SMBLibrary:

Any directory / filesystem / object you wish to share must implement the IFileSystem interface.
You can share anything from actual directories to custom objects, as long as they expose a directory structure.

Contact:

If you have any question, feel free to contact me.
Tal Aloni tal.aloni.il@gmail.com