mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-12 12:28:09 +02:00
Client: Correctly open a second NetBios session
This commit is contained in:
parent
0a89a84434
commit
4ac07b6ea3
3 changed files with 41 additions and 16 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
/* Copyright (C) 2017-2020 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
||||||
*
|
*
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
* You can redistribute this program and/or modify it under the terms of
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
* the GNU Lesser Public License as published by the Free Software Foundation,
|
||||||
|
@ -16,6 +16,29 @@ namespace SMBLibrary.Client
|
||||||
{
|
{
|
||||||
public class ConnectionState
|
public class ConnectionState
|
||||||
{
|
{
|
||||||
public NBTConnectionReceiveBuffer ReceiveBuffer = new NBTConnectionReceiveBuffer();
|
private Socket m_clientSocket;
|
||||||
|
private NBTConnectionReceiveBuffer m_receiveBuffer;
|
||||||
|
|
||||||
|
public ConnectionState(Socket clientSocket)
|
||||||
|
{
|
||||||
|
m_clientSocket = clientSocket;
|
||||||
|
m_receiveBuffer = new NBTConnectionReceiveBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Socket ClientSocket
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return m_clientSocket;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public NBTConnectionReceiveBuffer ReceiveBuffer
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return m_receiveBuffer;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@ namespace SMBLibrary.Client
|
||||||
SessionPacket sessionResponsePacket = WaitForSessionResponsePacket();
|
SessionPacket sessionResponsePacket = WaitForSessionResponsePacket();
|
||||||
if (!(sessionResponsePacket is PositiveSessionResponsePacket))
|
if (!(sessionResponsePacket is PositiveSessionResponsePacket))
|
||||||
{
|
{
|
||||||
m_clientSocket.Close();
|
m_clientSocket.Disconnect(false);
|
||||||
if (!ConnectSocket(serverAddress, port))
|
if (!ConnectSocket(serverAddress, port))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -142,7 +142,7 @@ namespace SMBLibrary.Client
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConnectionState state = new ConnectionState();
|
ConnectionState state = new ConnectionState(m_clientSocket);
|
||||||
NBTConnectionReceiveBuffer buffer = state.ReceiveBuffer;
|
NBTConnectionReceiveBuffer buffer = state.ReceiveBuffer;
|
||||||
m_clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
m_clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
||||||
return true;
|
return true;
|
||||||
|
@ -399,8 +399,9 @@ namespace SMBLibrary.Client
|
||||||
private void OnClientSocketReceive(IAsyncResult ar)
|
private void OnClientSocketReceive(IAsyncResult ar)
|
||||||
{
|
{
|
||||||
ConnectionState state = (ConnectionState)ar.AsyncState;
|
ConnectionState state = (ConnectionState)ar.AsyncState;
|
||||||
|
Socket clientSocket = state.ClientSocket;
|
||||||
|
|
||||||
if (!m_clientSocket.Connected)
|
if (!clientSocket.Connected)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -408,7 +409,7 @@ namespace SMBLibrary.Client
|
||||||
int numberOfBytesReceived = 0;
|
int numberOfBytesReceived = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
numberOfBytesReceived = m_clientSocket.EndReceive(ar);
|
numberOfBytesReceived = clientSocket.EndReceive(ar);
|
||||||
}
|
}
|
||||||
catch (ArgumentException) // The IAsyncResult object was not returned from the corresponding synchronous method on this class.
|
catch (ArgumentException) // The IAsyncResult object was not returned from the corresponding synchronous method on this class.
|
||||||
{
|
{
|
||||||
|
@ -437,7 +438,7 @@ namespace SMBLibrary.Client
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
||||||
}
|
}
|
||||||
catch (ObjectDisposedException)
|
catch (ObjectDisposedException)
|
||||||
{
|
{
|
||||||
|
@ -464,7 +465,7 @@ namespace SMBLibrary.Client
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
m_clientSocket.Close();
|
state.ClientSocket.Close();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -496,7 +497,7 @@ namespace SMBLibrary.Client
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log("Invalid SMB1 message: " + ex.Message);
|
Log("Invalid SMB1 message: " + ex.Message);
|
||||||
m_clientSocket.Close();
|
state.ClientSocket.Close();
|
||||||
m_isConnected = false;
|
m_isConnected = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ namespace SMBLibrary.Client
|
||||||
SessionPacket sessionResponsePacket = WaitForSessionResponsePacket();
|
SessionPacket sessionResponsePacket = WaitForSessionResponsePacket();
|
||||||
if (!(sessionResponsePacket is PositiveSessionResponsePacket))
|
if (!(sessionResponsePacket is PositiveSessionResponsePacket))
|
||||||
{
|
{
|
||||||
m_clientSocket.Close();
|
m_clientSocket.Disconnect(false);
|
||||||
if (!ConnectSocket(serverAddress, port))
|
if (!ConnectSocket(serverAddress, port))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -134,7 +134,7 @@ namespace SMBLibrary.Client
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConnectionState state = new ConnectionState();
|
ConnectionState state = new ConnectionState(m_clientSocket);
|
||||||
NBTConnectionReceiveBuffer buffer = state.ReceiveBuffer;
|
NBTConnectionReceiveBuffer buffer = state.ReceiveBuffer;
|
||||||
m_clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
m_clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
||||||
return true;
|
return true;
|
||||||
|
@ -294,8 +294,9 @@ namespace SMBLibrary.Client
|
||||||
private void OnClientSocketReceive(IAsyncResult ar)
|
private void OnClientSocketReceive(IAsyncResult ar)
|
||||||
{
|
{
|
||||||
ConnectionState state = (ConnectionState)ar.AsyncState;
|
ConnectionState state = (ConnectionState)ar.AsyncState;
|
||||||
|
Socket clientSocket = state.ClientSocket;
|
||||||
|
|
||||||
if (!m_clientSocket.Connected)
|
if (!clientSocket.Connected)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -303,7 +304,7 @@ namespace SMBLibrary.Client
|
||||||
int numberOfBytesReceived = 0;
|
int numberOfBytesReceived = 0;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
numberOfBytesReceived = m_clientSocket.EndReceive(ar);
|
numberOfBytesReceived = clientSocket.EndReceive(ar);
|
||||||
}
|
}
|
||||||
catch (ArgumentException) // The IAsyncResult object was not returned from the corresponding synchronous method on this class.
|
catch (ArgumentException) // The IAsyncResult object was not returned from the corresponding synchronous method on this class.
|
||||||
{
|
{
|
||||||
|
@ -332,7 +333,7 @@ namespace SMBLibrary.Client
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
m_clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
clientSocket.BeginReceive(buffer.Buffer, buffer.WriteOffset, buffer.AvailableLength, SocketFlags.None, new AsyncCallback(OnClientSocketReceive), state);
|
||||||
}
|
}
|
||||||
catch (ObjectDisposedException)
|
catch (ObjectDisposedException)
|
||||||
{
|
{
|
||||||
|
@ -359,7 +360,7 @@ namespace SMBLibrary.Client
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
m_clientSocket.Close();
|
state.ClientSocket.Close();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,7 +392,7 @@ namespace SMBLibrary.Client
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
Log("Invalid SMB2 response: " + ex.Message);
|
Log("Invalid SMB2 response: " + ex.Message);
|
||||||
m_clientSocket.Close();
|
state.ClientSocket.Close();
|
||||||
m_isConnected = false;
|
m_isConnected = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue