mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-08-11 09:59:19 +02:00
Client: NetBios: Added NameServiceClient
This commit is contained in:
parent
1afd4bc61d
commit
fce8082b52
2 changed files with 57 additions and 0 deletions
56
SMBLibrary/Client/NameServiceClient.cs
Normal file
56
SMBLibrary/Client/NameServiceClient.cs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/* Copyright (C) 2020 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
||||||
|
*
|
||||||
|
* 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,
|
||||||
|
* either version 3 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Sockets;
|
||||||
|
using SMBLibrary.NetBios;
|
||||||
|
|
||||||
|
namespace SMBLibrary.Client
|
||||||
|
{
|
||||||
|
public class NameServiceClient
|
||||||
|
{
|
||||||
|
public static readonly int NetBiosNameServicePort = 137;
|
||||||
|
|
||||||
|
private IPAddress m_serverAddress;
|
||||||
|
|
||||||
|
public NameServiceClient(IPAddress serverAddress)
|
||||||
|
{
|
||||||
|
m_serverAddress = serverAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetServerName()
|
||||||
|
{
|
||||||
|
NodeStatusRequest request = new NodeStatusRequest();
|
||||||
|
request.Header.QDCount = 1;
|
||||||
|
request.Question.Name = "*".PadRight(16, '\0');
|
||||||
|
NodeStatusResponse response = SendNodeStatusRequest(request);
|
||||||
|
foreach (KeyValuePair<string, NameFlags> entry in response.Names)
|
||||||
|
{
|
||||||
|
NetBiosSuffix suffix = NetBiosUtils.GetSuffixFromMSNetBiosName(entry.Key);
|
||||||
|
if (suffix == NetBiosSuffix.FileServiceService)
|
||||||
|
{
|
||||||
|
return entry.Key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private NodeStatusResponse SendNodeStatusRequest(NodeStatusRequest request)
|
||||||
|
{
|
||||||
|
UdpClient client = new UdpClient();
|
||||||
|
IPEndPoint serverEndPoint = new IPEndPoint(m_serverAddress, NetBiosNameServicePort);
|
||||||
|
client.Connect(serverEndPoint);
|
||||||
|
|
||||||
|
byte[] requestBytes = request.GetBytes();
|
||||||
|
client.Send(requestBytes, requestBytes.Length);
|
||||||
|
byte[] responseBytes = client.Receive(ref serverEndPoint);
|
||||||
|
return new NodeStatusResponse(responseBytes, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -61,6 +61,7 @@
|
||||||
<Compile Include="Client\Helpers\ServerServiceHelper.cs" />
|
<Compile Include="Client\Helpers\ServerServiceHelper.cs" />
|
||||||
<Compile Include="Client\ISMBClient.cs" />
|
<Compile Include="Client\ISMBClient.cs" />
|
||||||
<Compile Include="Client\ISMBFileStore.cs" />
|
<Compile Include="Client\ISMBFileStore.cs" />
|
||||||
|
<Compile Include="Client\NameServiceClient.cs" />
|
||||||
<Compile Include="Client\SMB1Client.cs" />
|
<Compile Include="Client\SMB1Client.cs" />
|
||||||
<Compile Include="Client\SMB1FileStore.cs" />
|
<Compile Include="Client\SMB1FileStore.cs" />
|
||||||
<Compile Include="Client\SMB2Client.cs" />
|
<Compile Include="Client\SMB2Client.cs" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue