DDNS动态域名生效问题(TXT域名解决)
随着带宽普及·带宽提速·家庭宽带很多都光纤入户·带宽甩云主机厂商几条街·但是动态IP问题始终困扰我们·DDNS很多都收费了·就算付费也做不到秒更新·24小时才能全网更新···
近日研究了txt域名...(长度512)
好处秒更新·立即修改·立即生效...
哈哈哈···聪明的小朋友该知道怎么做了吧...
using System;
using System.Runtime.InteropServices;
namespace QueryDoMain
{
class Program
{
[DllImport("dnsapi", EntryPoint = "DnsQuery_W", CharSet = CharSet.Unicode, SetLastError = true, ExactSpelling = true)]
private static extern int DnsQuery([MarshalAs(UnmanagedType.VBByRefStr)] ref string pszName, QueryTypes wType, QueryOptions options, int aipServers, ref IntPtr ppQueryResults, int pReserved);
[DllImport("dnsapi", CharSet = CharSet.Auto, SetLastError = true)]
private static extern void DnsRecordListFree(IntPtr pRecordList, int FreeType);
public enum QueryOptions
{
DNS_QUERY_STANDARD = 0x0,
DNS_QUERY_BYPASS_CACHE = 0x8
}
public enum QueryTypes
{
DNS_TYPE_A = 0x1,
DNS_TYPE_CNAME = 0x5,
DNS_TYPE_MX = 0xF,
DNS_TYPE_TEXT = 0x10,
DNS_TYPE_TXT = DNS_TYPE_TEXT
}
[StructLayout(LayoutKind.Sequential)]
private struct Record
{
public IntPtr pNext;
public string pName;
public short wType;
public short wDataLength;
public int flags;
public int dwTtl;
public int dwReserved;
public int dwStringCount;
public IntPtr pString;
}
static string TXTDomainQuery(string domain)
{
IntPtr ptr1 = IntPtr.Zero;
string txt = string.Empty;
if (Environment.OSVersion.Platform == PlatformID.Win32NT && DnsQuery(ref domain, QueryTypes.DNS_TYPE_TEXT, QueryOptions.DNS_QUERY_STANDARD, 0, ref ptr1, 0) == 0)
{
Record rec; IntPtr ptr2;
for (ptr2 = ptr1; !ptr2.Equals(IntPtr.Zero); ptr2 = rec.pNext)
{
rec = (Record)Marshal.PtrToStructure(ptr2, typeof(Record));
txt = Marshal.PtrToStringAuto(rec.pString);
}
DnsRecordListFree(ptr1, 0);
return txt;
}
else
{
return txt;
}
}
static void Main(string[] args)
{
string domain = "t1.0x**.cn";
string ret = TXTDomainQuery(domain);
Console.WriteLine(ret);
Console.ReadKey();
}
}
}