簡體   English   中英

MongoDB的。 所有服務器的列表

[英]MongoDB. The list of all servers

我為MongoDB使用C#驅動程序。 我可以獲取本地網絡中所有MonogDB服務器的列表,例如MS SQL服務器的SqlDataSourceEnumerator嗎?

謝謝。

您可以做的是找到所有活動的IPv4地址。 你可以在這里找到如何做到這一點(Ken Fyrstenberg回答)

然后使用HttpClient對象從您找到的所有IP獲取響應,但在端口27017上嘗試{//創建一個新的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的網絡曝光和安全性的更多信息

不,沒有內置的方法來發現網絡中的所有MongoDB服務器。 雖然我看到有一個基本上是端口掃描的答案,但這在許多層面上存在缺陷。

  1. SqlDataSourceEnumerator類的工作原理是將廣播數據包發送到本地網段。 它非常高效,因為該段上的“所有”設備將接收數據包並具有響應選項。
  2. MongoDB的端口可能已從默認端口更改(默認情況下MongoDB配置服務器在不同的端口上運行)。 我通常不使用默認端口來確保它在某處沒有硬編碼。 :)
  3. 如果不了解局域網的各個部分,您可能不知道實際掃描的位置(比如IP地址的范圍?)
  4. 它可以配置SSL
  5. 您可以在企業內觸發安全警報以進行端口掃描
  6. 防火牆可能阻止來自未經授權的主機的流量(在典型的企業中,情況就是這樣)
  7. 隨着企業轉向IPV6,我不會長期使用IPV4

我通常建議只集中存儲一組活動的MongoDB服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM