2011-05-24 150 views
0

如果我有一個網站運行在www.example.com,但有人通過IP地址訪問它。我怎樣才能在IIS中的代碼查找www.example.com是真正的網站的域名?Asp.NET獲取當前域名

+2

ASP.NET應用程序不知道它託管的容器的配置。要訪問IIS配置,您的ASP.NET應用程序需要以提升的權限運行,這是一個巨大的禁止,更不用說提出你想要做什麼的錯誤方式了。你應該做的是重定向訪問該網站的任何請求,而不是其規範名稱以外的任何請求。那麼你不必擔心這一點。請詳細描述爲什麼你覺得有必要這樣做。 – Chris 2011-05-24 18:51:44

+0

是的,這就是我的想法。這是一個許可問題,允許通過域名訪問網站,但如果有人通過IP地址訪問該網站,則無法找到域名,因此許可失敗。 – 2011-05-24 19:15:23

+0

你將不得不更具體。你說的是「如果有人說」你好「,我怎麼能知道我的名字?當然你知道你的名字,你的網站也應該知道它的名字。你的問題在表面上沒有太多意義,除非有什麼更多的你沒有說 – 2011-05-24 18:52:31

回答

1

這是不可能的可靠查找域基礎上,因爲IP的IP地址地址可以映射到0個或更多域名。

你可以做的最好的是有一個映射列表。請注意,本地網絡IP地址和外部IP點也可能位於同一位置。

通常,一臺特定的機器可以被多個IP引用,每個IP可以被幾個域引用。所以你可以去domain > IP address -> machine但不是相反。

+1

我認爲你的意思是不可能「可靠地」查找基於IP的域名。這當然是可能的,但它可能不是正確的域名,並且大多數網站無論如何都沒有正確的反向dns記錄。 – 2011-05-24 18:55:52

+0

不是真的......我已經發布瞭如何做到這一點,雖然它可能不是100%。 – Kelsey 2011-05-24 18:56:47

+0

改變說可靠。 – Davy8 2011-05-24 19:06:05

1

您想知道www.example.com的IP地址嗎?你可以比較這些IP嗎?

您可以通過執行獲得www.example.com的IP:

System.Net.Dns.GetHostEntry("www.example.com").AddressList[0].ToString(); 

然後,您可以比較IP地址,看看他們是相同的。還要注意的是有一個列表,以便您可以檢查,看看是否存在:

bool ipMatch = (System.Net.Dns.GetHostEntry("www.example.com"). 
    AddressList.Where(a => a.ToString().Equals(userIP)).Count() > 0); 

你可以使用Contains但你必須要建立一個IPAddress對象,你可能沒有。

編輯:從您的評論你的IP地址,要把主機地址,這樣只是做:

string hostname = System.Net.Dns.GetHostEntry(yourIPHere).HostName; 
+0

如果我從asp.net獲取當前域名時,用戶通過ip點擊該網站,我得到了ipaddress,但我想要的是實際所以如果我得到http://22.23.24.25/Default.aspx,我想知道它真的是http://www.bob.com/Default.aspx。 – 2011-05-24 18:50:13

+0

爲什麼你甚至需要看在主機名?你應該已經知道你是bob.com。你唯一不會的是,如果是的話一個用戶可配置的域名,如CMS或其他通用應用程序,在這種情況下,您需要一些配置條目來告訴它你的名字是什麼。 – 2011-05-24 18:54:30

+0

@Mystere Man我學會了永遠不要問爲什麼......每個人似乎都有理由去做任何事情;) – Kelsey 2011-05-24 18:56:11