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



所以我实现了一个系统调用,它应该给我一个给定网络接口的DNS服务器(作为变量,即我的代码中的"接口"(:

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;
}

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

ping是几乎所有故障排除的错误工具。

如果您想按速度订购名称服务器,您只有一件事要做:查询它们,进行DNS查询,并查看它们的回复速度。

这是唯一有意义的事情。因此,您需要用编程语言了解如何在最低级别执行DNS查询并能够对其进行计时。

然后你只是开始触及表面并到达其他问题来解决:

  • 要执行哪些查询?如果您知道他们处理名称,请查询该名称;否则,可以接受查询根名称服务器 NS 记录
  • 您必须处理超时、UDP 最终截断回复以及在 TCP 上重试等。
  • 查询一次是可以的,但
  • 拓扑可以改变;现在A可能比B快,但也许在5分钟内它会相反;因此,任何这样做的系统都应该是智能的,并且"定期"仍然再次探测,看看事情是否发生了变化。

相关内容

  • 没有找到相关文章

最新更新