mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-08-04 15:01:28 +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\ISMBClient.cs" />
|
||||
<Compile Include="Client\ISMBFileStore.cs" />
|
||||
<Compile Include="Client\NameServiceClient.cs" />
|
||||
<Compile Include="Client\SMB1Client.cs" />
|
||||
<Compile Include="Client\SMB1FileStore.cs" />
|
||||
<Compile Include="Client\SMB2Client.cs" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue