MongoDB的。所有服务器的列表

时间:2013-11-19 04:21:45

标签: c# mongodb

我为MongoDB使用C#驱动程序。我可以获取本地网络中所有MongoDB服务器的列表,例如MS SQL服务器的SqlDataSourceEnumerator吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以执行的操作是查找所有活动的IPv4地址。你可以找到如何做到here (answered by Ken Fyrstenberg)

然后使用HttpClient object从您在端口27017上找到的所有IP获取响应     尝试     {       //创建一个新的HttpClient对象。       HttpClient client = new HttpClient();

  HttpResponseMessage response = await client.GetAsync("http://localhost:27017/");
  response.EnsureSuccessStatusCode();
  string responseBody = await response.Content.ReadAsStringAsync();
  // Above three lines can be replaced with new helper method in following line 
  // string body = await client.GetStringAsync(uri);

  Console.WriteLine(responseBody); //HERE you can check for "MongoDB"
}  
catch(HttpRequestException e)
{
  Console.WriteLine("\nException Caught!"); 
  Console.WriteLine("Message :{0} ",e.Message);
}

响应如下(Mongod实例在特定的ip上运行):

  

您正尝试在本机驱动程序端口上访问MongoDB。对于http   诊断访问,将1000添加到端口号

因此,通过使用响应字符串,您可以确定Mongod实例是否在特定的ip上运行。

如果自定义MongoDB端口(默认值除外:27017),这可能不起作用。 有关MongoDB's Network Exposure and Security

的更多信息

答案 1 :(得分:1)

不,没有内置的方法来发现网络中的所有MongoDB服务器。虽然我看到有一个基本上是端口扫描的答案,但这在许多层面上存在缺陷。

  1. SqlDataSourceEnumerator类通过向本地网段发送广播包来工作。它非常高效,因为该段上的“所有”设备将接收数据包并具有响应选项。
  2. MongoDB的端口可能已从默认端口更改(默认情况下MongoDB配置服务器在不同的端口上运行)。我通常不使用默认端口来确保它在某处没有硬编码。 :)
  3. 如果不了解局域网的各个部分,您可能不知道实际扫描的位置(比如IP地址的范围?)
  4. 可以配置SSL
  5. 您可以在企业内触发安全警报以进行端口扫描
  6. 防火墙可能会阻止来自未经授权的主机的流量(在典型的企业中,就是这种情况)
  7. 随着企业转向IPV6,我不会长期使用IPV4
  8. 我通常建议只集中存储一组活动的MongoDB服务器。