首页 > 解决方案 > Delphi:如何直接读取windows dns缓存?

问题描述

我知道我可以使用“ipconfig /displaydns”和 Powershell 的“Show-DnsServerCache”并从该命令中获取输出,但我想直接执行此操作。我在 stackoverflow 中找到了如何在 C 中执行此操作的源代码,但我无法将其转换为 delphi。

有谁知道如何在delphi中做到这一点?我在谷歌上找不到任何东西。

提前致谢。

(这是我的第一篇文章,英语不是我的母语,如果我不清楚,请见谅)

我找到的代码:

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _DNS_CACHE_ENTRY {
    struct _DNS_CACHE_ENTRY* pNext; // Pointer to next entry
    PWSTR pszName; // DNS Record Name
    unsigned short wType; // DNS Record Type
    unsigned short wDataLength; // Not referenced
    unsigned long dwFlags; // DNS Record Flags
} DNSCACHEENTRY, *PDNSCACHEENTRY;


typedef int(WINAPI *DNS_GET_CACHE_DATA_TABLE)(PDNSCACHEENTRY);

int main(int argc, char **argv) {

    PDNSCACHEENTRY pEntry = (PDNSCACHEENTRY)malloc(sizeof(DNSCACHEENTRY));

    // Loading DLL
    HINSTANCE hLib = LoadLibrary(TEXT("DNSAPI.dll"));

    // Get function address
    DNS_GET_CACHE_DATA_TABLE DnsGetCacheDataTable =
        (DNS_GET_CACHE_DATA_TABLE)GetProcAddress(hLib, "DnsGetCacheDataTable");

    int stat = DnsGetCacheDataTable(pEntry);
    printf("stat = %d\n", stat);
    pEntry = pEntry->pNext;
    while(pEntry) {
        wprintf(L"%s : %d\n", (pEntry->pszName), (pEntry->wType));
        pEntry = pEntry->pNext;
    }
    free(pEntry);
    return 0;
}

标签: delphi

解决方案


推荐阅读