Przeglądaj źródła

NetBios: Added NodeStatusRequest and improved NameQueryRequest implementation

Tal Aloni 5 lat temu
rodzic
commit
1afd4bc61d

+ 2 - 0
SMBLibrary/NetBios/NameServicePackets/NameQueryRequest.cs

@@ -24,7 +24,9 @@ namespace SMBLibrary.NetBios
         {
             Header = new NameServicePacketHeader();
             Header.OpCode = NameServiceOperation.QueryRequest;
+            Header.Flags = OperationFlags.RecursionDesired;
             Question = new QuestionSection();
+            Question.Type = NameRecordType.NB;
         }
 
         public NameQueryRequest(byte[] buffer, int offset)

+ 45 - 0
SMBLibrary/NetBios/NameServicePackets/NodeStatusRequest.cs

@@ -0,0 +1,45 @@
+/* Copyright (C) 2014-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.IO;
+using System.Text;
+using Utilities;
+
+namespace SMBLibrary.NetBios
+{
+    /// <summary>
+    /// [RFC 1002] 4.2.17. NODE STATUS REQUEST
+    /// </summary>
+    public class NodeStatusRequest
+    {
+        public NameServicePacketHeader Header;
+        public QuestionSection Question;
+
+        public NodeStatusRequest()
+        {
+            Header = new NameServicePacketHeader();
+            Header.OpCode = NameServiceOperation.QueryRequest;
+            Question = new QuestionSection();
+            Question.Type = NameRecordType.NBStat;
+        }
+
+        public NodeStatusRequest(byte[] buffer, int offset)
+        {
+            Header = new NameServicePacketHeader(buffer, ref offset);
+            Question = new QuestionSection(buffer, ref offset);
+        }
+
+        public byte[] GetBytes()
+        {
+            MemoryStream stream = new MemoryStream();
+            Header.WriteBytes(stream);
+            Question.WriteBytes(stream);
+            return stream.ToArray();
+        }
+    }
+}

+ 1 - 1
SMBLibrary/NetBios/NameServicePackets/Structures/QuestionSection.cs

@@ -7,7 +7,6 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
-using System.Text;
 using Utilities;
 
 namespace SMBLibrary.NetBios
@@ -23,6 +22,7 @@ namespace SMBLibrary.NetBios
 
         public QuestionSection()
         {
+            Class = QuestionClass.In;
         }
 
         public QuestionSection(byte[] buffer, ref int offset)

+ 1 - 0
SMBLibrary/SMBLibrary.csproj

@@ -83,6 +83,7 @@
     <Compile Include="NetBios\NameServicePackets\NameQueryRequest.cs" />
     <Compile Include="NetBios\NameServicePackets\NameRegistrationRequest.cs" />
     <Compile Include="NetBios\NameServicePackets\NameServicePacketHeader.cs" />
+    <Compile Include="NetBios\NameServicePackets\NodeStatusRequest.cs" />
     <Compile Include="NetBios\NameServicePackets\NodeStatusResponse.cs" />
     <Compile Include="NetBios\NameServicePackets\PositiveNameQueryResponse.cs" />
     <Compile Include="NetBios\NameServicePackets\Structures\NodeStatistics.cs" />