在C语言中存储netsh的DNS服务器

问题描述 投票:0回答:1

因此,我已经实现了一个系统调用,它应该给我一个给定网络接口的DNS服务器(作为变量,即我的代码中的 "interface")。

strcpy(str, "netsh interface ipv4 show dnsservers "); 
strcat(str, interface); 
system(str);

现在我的问题是:你建议用哪种方式来提取这些DNS服务器,并且能够比较它们的速度?我有下面的函数来提取平均速度为整数,所以两个服务器之间的比较应该很容易,但事情是我遇到的DNS没有固定的数量。

int average_speed(const char* ip)
{
    const char* const Delim = "Average = ";
    printf("\n    Extracting average %s", ip);

    char cmd[64];
    sprintf(cmd, "ping %s", ip);
    FILE* p = _popen(cmd, "r");
    char line[256];
    while (fgets(line, sizeof(line), p))
    {
        char* s = NULL;
        if ((s = strstr(line, Delim)) != NULL)
        {
            _pclose(p);
            return atoi(s + strlen(Delim));
        }
    }
    _pclose(p);

    return 0;
}
c dns netsh
1个回答
0
投票

绝对不要使用 ping 要做到这一点。

ping 是一个错误的工具,几乎所有类型的故障排除。

如果你想根据名字服务器的速度来排序,你只有一件事要做:查询他们,对于DNS查询,看看他们的回复速度。

这是唯一有意义的事情。所以你需要在你的编程语言中找出如何在最底层进行DNS查询,并且能够对它们进行计时。

然后你才开始从头开始,得出其他的问题来解决。

  • 如果你知道他们处理了一个名字,就查询它;否则可能会接受查询根名称服务器的NS记录。
  • 你必须处理超时、UDP截断回复以及在TCP上重试等问题。
  • 现在A可能比B快,但5分钟后可能会相反;因此,任何系统都应该聪明地 "定期 "再次探测,看看情况是否发生了变化。
© www.soinside.com 2019 - 2024. All rights reserved.