2009-09-11 14 views
5

Mit C# wie würde man feststellen, ob eine URL eine Intranet-URL ist? Ich möchte etwas Code, um etwas zu tun, wenn eine URL ein Intranet gegen die Öffentlichkeit ist.Wie erkennt man, ob eine URL eine Intranet-URL ist?

+4

ist das wichtig, SLaks? Ich denke, das ist eine vernünftige Frage ... – Atmocreations

+0

Es würde uns helfen, eine bessere Antwort zu geben, vor allem, wenn wir wüssten, welche Art von Intranets er sucht. – SLaks

Antwort

8

können Sie nicht implizit wissen. Wenn Ihre Intranet-URLs wie vollständig qualifizierte Domänennamen aussehen, ist es schwer zu sagen. Die einzige Möglichkeit, dies zu tun, besteht darin, zwei verschiedene DNS-Server (Ihren eigenen und einen öffentlichen) abzufragen. Wenn beide das gleiche Ergebnis liefern, handelt es sich um eine Internetdomäne. Wenn der öffentliche DNS-Server die Adresse nicht auflösen kann, handelt es sich höchstwahrscheinlich um eine Intranet-Domäne.

+0

Ich habe wahnsinnige Setups gesehen, bei denen die Intranetseite so etwas wie "Intranet.com" genannt wird, das intern in das Intranet aufgelöst wird, aber eine echte Live-Domain ist, die im Außenbesitz einer beliebigen Firma ist. Sie müssen nicht nur überprüfen, ob es von beiden DNS-Servern aufgelöst wird, sondern auch, dass es zu demselben Ergebnis führt. – rmeador

+0

Diese Lösung (Auflösung des Namens in eine IP) funktioniert, wenn Sie a priori wissen, was eine interne IP im Vergleich zu einer externen IP ist. Wenn Sie ein wenig Konfiguration hinzufügen (eine Liste gültiger IP-Bereiche für das Intranet), haben Sie das Problem gelöst. Keine schöne Lösung, aber es wird funktionieren. –

+0

Ein weiteres Problem besteht darin, dass der Host zu einer routbaren IP-Adresse aufgelöst wird, da Ihre Organisation über gültige IP-Adressen der Klasse A verfügt, die als Intranet-IPs verwendet werden. Es macht das Leben mit .Net und dergleichen sehr schwer. – user7116

8

Kennen Sie die internen Subnetze (in Bezug auf IP-Adressen)? Wenn ja, würde ich einfach den Host-Namen auflösen und sehen, ob es so intern ist.

0

Im Allgemeinen gibt es keine zuverlässige Möglichkeit, eine Intranet-URL von einer Internet-URL zu unterscheiden. Wenn das Intranet für Ihr Programm verfügbar ist, wird es genauso aussehen wie das Internet, und wenn nicht, dann werden Sie immer noch nicht wissen, ob die URL eine funktionierende Intranet-URL sein soll oder nur eine (vorübergehend) unterbrochene Internet-URL ist .

Sie benötigen spezielle Kenntnisse, z. B. die Domänennamen oder IPs der Server, die das Intranet bereitstellen, um sie voneinander zu unterscheiden.

0

Wenn Sie feststellen möchten, ob eine bestimmte URL eine Intranet-URL in einer Firma ist (im Gegensatz zur Spezialisierung Ihres Codes für eine bestimmte Firma), wünsche ich Ihnen viel Glück.

In der Regel, aber nicht immer, haben itranet-URLs keine TLD (Top Level Domain, wie .com). Allerdings habe ich einige gesehen, die das tun.

Fast immer (AFAIK) werden Intranet-Domänen in eine ähnliche IP-Adresse aufgelöst wie die aktuelle Adresse des Computers. Beachten Sie, dass ich nicht dasselbe Subnetz angegeben habe. Große Intranets können mehrere Subnetze haben. Beachten Sie außerdem, dass regulare Domänennamen sind, die zu ähnlichen IP-Adressen aufgelöst werden, wenn sich der Computer nicht in einem Unternehmensintranet befindet. (Wenn sich der Computer nicht hinter NAT befindet)

+0

Ich verwende immer .local (http://en.wikipedia.org/wiki/.local) für interne Namespaces. d. h. supermegacorp.com wäre intern supermegacorp.local. Wenn jeder dies tun würde, wäre die Lösung für dieses Problem trivial. Natürlich funktioniert .local möglicherweise nicht für alle, aber ich muss noch irgendwo finden, wo es nicht funktionieren würde. – Bryan

+0

Ich habe noch nie zuvor '.local' gesehen. Ich habe eine Umgebung gesehen, in der das Intranet auf Subdomänen des externen Domainnamens des Unternehmens gehostet wird. – SLaks

7

Wenn die URL zu einer TCP IP-Adresse aufgelöst wird, die eine der IP-Adressen ist, die als eine private IP-Adresse reserviert sind, befindet sie sich definitiv in Ihrem Intranet. diese sind

  1. 10.xxx.xxx.xxx,
  2. 172.16.xxx.xxx durch 172.31.xxx.xxx und
  3. 192.168.xxx.xxx

wenn es beschließt, andere IP-Adresse es Macht noch im Intranet sein, aber es hat eine öffentliche IP-Adresse, so dass es möglicherweise von außerhalb des Intranet ist

+0

+1, Wie ich in einem Kommentar zu einer anderen Antwort ausführte, verwenden einige Organisationen, wie Sie darauf hinweisen, routbare IPs als Intranet-IPs. Verwirrend genug. Net-Sicherheit basiert zu einem großen Teil auf diesen bei der Verwendung von Netzwerkfreigaben. Wenn Sie Glück haben, diese IPs zu haben, dann finde ich es eine gute Möglichkeit, um zu überprüfen. – user7116

+0

Diese Lösung wird auch für IP6 brechen. Obwohl IP6 private IP-Adressen reserviert hat, besteht die allgemeine Empfehlung nicht darin, sie zu verwenden, um eine Adressumsetzung zu vermeiden. – Reza

-1

Um zu dem hinzuzufügen, was andere gesagt haben, hat Intranet keine bekannte Top-Level-Domain in seiner Adresse. Ich habe in einigen Unternehmen gearbeitet und die ganze Intranet war so etwas wie:

http://developments/admin - Sie werden feststellen, dass es keine Top-Level-Domain überhaupt. Es löst also einen Computer im Netzwerk auf. Wie der Name schon sagt, ist es unwahrscheinlich, dass Sie über die Unternehmensumgebung darauf zugreifen.

+0

Wie in der Antwort auf Joels Beitrag erwähnt. Das ist nicht immer richtig. – Bryan

0

Ich bin kein C# -Programmierer, daher kann ich Ihnen keinen Code anbieten, aber die grundlegende Methode würde beinhalten, den Hostnamen-Teil der URL mit dem der Server in Ihrem Intranet zu vergleichen.Oder wenn Ihre URL nur eine IP-Adresse und keinen DNS-Namen verwendet, vergleichen Sie die IP-Adresse mit der Ihres Intranetservers.

Crack die URL mit String-Manipulation - obwohl ich denke, C# muss eine URL-Klasse, die dies für Sie tun wird - und extrahieren Sie den Hostnamen, vergleichen Sie es mit einer Liste von Servern.

0

Das einfache und nicht perfekt, aber funktioniert für den 80% Fall ist einfach zu überprüfen, ob die URL einen Punkt enthält. Ich weiß Intranet-URLs können voll qualifiziert werden, aber nach meiner Erfahrung (bei Microsoft) die meisten nicht, und das funktioniert ziemlich gut.

0

Sie könnten Internet Explorer abfragen, um zu sehen, ob die Domain der Liste der akzeptierten Intranet-Domains entspricht.

Registrierungsschlüssel ist HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ Currentversion \ Internet Settings \ ZoneMap \ Domains

Es wenn der Domain-Wert für 1 für das Protokoll hat, wird es eine Intranet-Domäne angesehen werden. Sie müssen ein nslookup durchführen, um die "echte" Adresse zu erfassen.

+0

* Internet Explorer abfragen * Nein, IE wird Microsoft nicht verraten, auch wenn Sie es foltern. ;) –

Verwandte Themen