2009-09-11 107 views
5

使用C#如何確定URL是否是Intranet URL?我想要一些代碼來做一些事情,如果一個URL是一個內部網而不是公共的。如何判斷一個URL是否是Intranet網址?

+4

這是重要的,SLaks?我認爲這是一個合理的問題... – Atmocreations 2009-09-11 18:38:20

+0

這將幫助我們給出更好的答案,特別是如果我們知道他在尋找什麼樣的內聯網。 – SLaks 2009-09-11 19:18:36

回答

8

你不能隱式知道。如果您的Intranet網址看起來像完全合格的域名,那麼很難說清楚。要告訴的唯一方法是查詢兩個不同的DNS服務器(您自己的和公共的)。如果兩者都返回相同的結果,那麼它是一個互聯網域名。如果公共DNS服務器無法解析地址,那麼它很可能是一個內部網域。

+0

我見過瘋狂的設置,其中Intranet站點被命名爲「intranet.com」,它在內部解析到Intranet,但是是由外部任意公司擁有的真實活動域。您不僅必須檢查它是否從兩個DNS服務器解析,但它解決相同的事情。 – rmeador 2009-09-11 18:38:11

+0

如果您有關於內部IP與外部IP的先驗知識,此解決方案(將名稱解析爲IP)將起作用。如果添加一點配置(Intranet的有效IP範圍的列表),則說明問題已解決。不是一個漂亮的解決方案,但它會工作。 – 2009-09-11 19:02:27

+0

另一個問題是,如果主機解析爲可路由的IP,因爲您的組織具有有效的A類IP,並將其用作Intranet IP。它使.Net等生活變得非常困難。 – user7116 2009-12-04 21:53:20

8

你知道內部子網(就IP地址而言)嗎?如果是這樣,我只需解析主機名並查看它是否是內部的。

0

一般而言,沒有可靠的方法可以通過Internet URL告知Intranet URL。如果內部網可用於您的程序,那麼它將看起來就像互聯網,如果不是,那麼您仍然不知道該URL是否應該是一個正常工作的Intranet URL,或者只是一個(暫時)中斷的Internet URL 。

您需要一些特殊的知識,例如提供Intranet的服務器的域名或IP,以便區分它們。

0

如果您想確定任何給定的URL是否是任何公司的Intranet URL(而不是專門針對某個特定公司的代碼),祝您好運。

itranet urls通常但並非總是TLD(頂級域名,例如.com)。不過,我見過一些這樣做。

幾乎總是(AFAIK),Intranet域將解析爲與計算機當前地址類似的IP地址。請注意,我沒有說相同的子網;大型內聯網可以有多個子網。另請注意,如果計算機不在企業內部網中,作爲解析爲類似IP地址的regualr域名。 (除非計算機在NAT後面)

+0

我總是使用.local(http://en.wikipedia.org/wiki/.local)作爲內部命名空間。即supermegacorp.com在內部會是supermegacorp.local。如果每個人都這樣做,這個問題的解決方案將是微不足道的。當然,本地化可能無法適用於所有人,但是我還沒有找到無法工作的地方。 – Bryan 2009-09-11 18:39:54

+0

我從來沒有見過'.local'使用過。我已經看到了一個內部網託管在公司外部域名子域上的環境。 – SLaks 2009-09-11 19:24:48

7

如果url解析爲一個tcpIp地址,該地址是作爲專用IP地址留出的IP地址之一,那麼它絕對在您的Intranet上。這些都是

  1. 10.xxx.xxx.xxx,
  2. 172.16.xxx.xxx通過172.31.xxx.xxx和
  3. 192.168.xxx.xxx

,如果它要解析任何其他IP地址,實力仍然是在Intranet上,但它有一個公網IP地址,以便從Intranet外部潛在訪問

+0

+1,正如我在對另一個響應的評論中詳細說明的那樣,正如你所指出的,一些組織使用可路由的IP作爲內聯網IP。令人困惑的是,當使用網絡共享時,Net的安全性很大程度上取決於這些。如果你足夠幸運擁有這些知識產權,那麼我覺得它是一種有效的檢查方法。 – user7116 2009-12-04 21:57:03

+0

該解決方案也將打破IP6。儘管IP6保留了私有IP地址,但一般建議不要使用它們來避免地址轉換。 – Reza 2014-10-13 17:36:03

-1

要增加別人的話,Intranet在其地址中沒有任何知道的頂級域名。我曾在幾家公司工作過,所有的內聯網都是這樣的:

http://developments/admin - 你會注意到根本沒有頂級域名。所以,它解決了網絡中的計算機。同樣,顧名思義,您不可能在公司環境之外訪問它。

+0

正如回覆喬爾的帖子所述。這並非總是如此。 – Bryan 2009-09-11 18:43:52

0

我不是C#程序員,所以我不能爲您提供代碼,但基本方法會涉及將URL的主機名部分與Intranet中的服務器的主機名部分進行比較。或者,如果您的網址只使用IP而非DNS名稱,請將IP與您的Intranet服務器進行比較。

使用字符串操作破解URL - 雖然我想C#必須有一個URL類來爲你做這件事 - 然後提取主機名,將它與服務器列表進行比較。

0

簡單而不完美但適用於80%的情況是簡單地檢查URL是否有句點。我知道Intranet網址可以完全符合條件,但根據我的經驗(在微軟),大多數網站不會這樣做,而且這種方式非常有效。

0

您可以詢問Internet Explorer以查看該域是否與已接受的Intranet域的列表匹配。

註冊表項HKEY_CURRENT_USER是\軟件\微軟\的Windows \ CurrentVersion \ Internet設置\ ZoneMap \域名

有如果域中有1對將被視爲一個Intranet域協議的值。您需要執行nslookup來收集「真實」地址。

+0

*詢問Internet Explorer *不,IE即使折磨它也不會背叛微軟。 ;) – 2015-06-26 16:47:34

相關問題