我需要一些PowerShell工具或.NET库,或者直接使用DNS协议,因为我需要在非Microsoft DNS上执行dynamic更新,而WMI和DNS cmdlet仅适用于MicroSoft DNS服务器。
我试过了ARSoft.Tools.Net库 ,但是我总是得到一个FormatError返回码(参见下面的例子)。
还有其他工具吗?
using ARSoft.Tools.Net; using ARSoft.Tools.Net.Dns; using ARSoft.Tools.Net.Dns.DynamicUpdate; using System; using System.Net; class Program { static void TestUpdateAdd(IPAddress dnsServerIP, DomainName updateZoneName, DomainName newRecordName, IPAddress newRecordIPAddress, DomainName tsigName, byte[] tsigKey) { var client = new DnsClient(dnsServerIP, 150000); client.IsUdpEnabled = false; var msg = new DnsUpdateMessage { ZoneName = updateZoneName }; msg.Updates.Add( new AddRecordUpdate( new ARecord(newRecordName, 86400, newRecordIPAddress))); msg.TSigOptions = new TSigRecord(tsigName, TSigAlgorithm.Md5, DateTime.Now, new TimeSpan(0, 0, 5), msg.TransactionID, ReturnCode.NoError, null, tsigKey); DnsUpdateMessage dnsResult = client.SendUpdate(msg); if (dnsResult == null) { Console.WriteLine("Failed sending message"); } else { Console.WriteLine(dnsResult.ReturnCode); // FormatError } } }
从快速浏览我的印象是,目前的ARSoft.Tools.Net版本(尝试2.2.4和一些之前版本的抽查)似乎是TSIG签名的问题。
似乎有一个错误导致TTL在TSIG
logging中被包含了两次,这显然抵消了所有的事情之后,完全破坏了logging的任何分析。
如果你使用1.8.2这样的旧版本,那么你在问题中所使用的代码基本上可以正常工作(最大的区别是它使用string代替DomainName)。 也就是说,我不知道老版本是否还有其他问题可能会导致这种方法不可取。
不pipe你是否使用这个特定的库,一些一般的笔记: