2014-08-28 42 views
4

我正在寫一個C++應用程序,它接收一個LAN計算機名稱作爲外部世界的輸入(例如\\ PCNAME123,我可以通過在Windows運行提示符或IE地址欄中鍵入來訪問它),並且需要獲取一些基於該名稱的數據,例如通過調用gethostbyname()函數。以編程方式將LAN計算機名稱解析爲完全限定名稱?

問題是我需要我認爲所謂的(我是新來的Winsock和網絡編程一般,所以我可能沒有術語權限)完全限定的名稱(例如PCNAME123.domainname.net)。我已經測試過,gethostbyname()可以正常工作,但不能與「PCNAME123」或「\\ PCNAME123」配合使用。

如何獲取該網絡計算機的完全限定名稱(請注意,它不是用於本地主機,而是用於本地網絡上的其他計算機)?

+0

除非您有其他信息(例如「它是AD域的成員」或「它與我在同一DNS域中」),否則在邏輯上不可能將非限定名稱轉換爲合格名稱,兩個(或更多)計算機可能具有相同的非限定名稱的簡單原因,那麼如何判斷哪一個可以選擇? – 2014-08-29 12:02:48

+0

與Internet Explorer或Run提示符一樣嗎?如果給出了「不明確」的非限定名稱,我可以對運行提示或IE的相同行爲進行確認。 – user3671607 2014-08-30 13:21:03

+0

我的錯誤是,我錯過了機器在本地網絡上的限定符。這使事情變得更容易,一開始如果有人試圖設置重複名稱,機器可能會投訴。 :-) – 2014-08-31 21:24:30

回答

1

您可以嘗試使用GetAddrInfoW函數獲取名稱信息。

1

要回答我自己的問題,看起來像解決方案之一是使用getaddrinfo()函數。

+0

只要目標計算機位於計算機搜索路徑上的某個DNS域中,就應該可以工作。如果有多臺同名的計算機在搜索路徑上,我不確定你是否會得到所有這些計算機,或者只是隨機選擇一臺計算機。 – 2014-08-29 12:04:44

+0

想一想,如果兩臺計算機(您的計算機和目標機器)都配置爲將本地網絡視爲「私有」計算機,則它可能也適用於本地網絡上的計算機(無論DNS是否配置)或「工作」網絡而不是「公共」。 +1。 – 2014-08-31 21:22:34

相關問題