問題:應用程序中有一個輸入字段,用戶可以輸入主機名或IP地址。我需要告訴輸入的地址是否對應一個真實的主機。C#確定IP地址是否代表真實主機
我不是在談論一個簡單的正則表達式檢查或IPAddress.TryParse或Uri.CheckHostName。我沒有檢查主機名的困難:如果它不能解析爲IP地址,則Dns.GetHostEntry會拋出異常。這是一塊蛋糕。
但是。如果我獲得IP地址輸入,那麼如果我進行Dns.GetHostAddresses調用,它將始終成功,即使我輸入了一個愚蠢的IP,如「1.1.1.1」(「1.1.1.1」是IANA保留的IP地址,我們的DNS服務器報告「不存在的主機/域」)。 Dns.GetHostAddresses立即反擊剛剛通過的IP,就像所有的東西都是完全正確的。
我也不能使用Dns.GetHostEntry,因爲有一些IP地址(如本地網絡上的虛擬機)沒有任何與其關聯的DNS主機名,但它們仍然有有效的IP地址,和Dns.GetHostEntry會拋出異常(我想它試圖爲他們解析主機名?)。
我需要一個方法調用,它實際上告訴我它是否是僞造IP,即使它看起來像一個好的IP地址(由Uri.CheckHostName定義),但它沒有相應的DNS主機名。
什麼是「真正的主機」?如果您使用帶有域名的Dns.GetHostEntry,則只會發現DNS名稱中是否存在條目,而不是其後面是否有計算機。您可以發送一個ICMP迴應請求(「ping」)到IP地址,但是如果您沒有得到迴應,這並不意味着沒有電腦。 – dtb 2013-03-20 20:49:01
你看過http://www.codeproject.com/Articles/12072/C-NET-DNS-query-component或http://www.aspnettutorials.com/tutorials/network/net-dns-aspnet2-csharp .aspx?他們都使用Dns.GetHostByName。 – RandomUs1r 2013-03-20 20:52:00
和我同意dtb,我只是平了它。我不確定你是否有能夠防止這種情況的要求。 – RandomUs1r 2013-03-20 20:52:47