2009-09-11 35 views
5

Sử dụng C# làm cách nào để xác định xem URL có phải là URL mạng nội bộ không? Tôi muốn một số mã để làm một cái gì đó nếu một URL là một mạng nội bộ một vs công cộng.Làm cách nào để biết URL có phải là địa chỉ mạng nội bộ không?

+4

là điều này quan trọng, SLaks? Tôi nghĩ rằng đây là một câu hỏi hợp lý ... – Atmocreations

+0

Nó sẽ giúp chúng tôi đưa ra một câu trả lời tốt hơn, đặc biệt là nếu chúng tôi biết loại mạng nội bộ anh ta đang tìm kiếm. – SLaks

Trả lời

8

bạn không thể biết rõ. nếu url mạng nội bộ của bạn trông giống như tên miền hoàn toàn đủ điều kiện thì rất khó để nói. cách duy nhất để nói là truy vấn hai máy chủ DNS khác nhau (của riêng bạn và máy chủ công cộng). Nếu cả hai trả về cùng một kết quả, thì đó là một tên miền internet. nếu máy chủ DNS công cộng không thể giải quyết địa chỉ thì rất có thể đó là miền mạng nội bộ.

+0

Tôi đã thấy các thiết lập điên rồ nơi trang mạng nội bộ được đặt tên như "intranet.com", được giải quyết nội bộ vào mạng nội bộ, nhưng là miền thực sự thuộc sở hữu của một công ty tùy ý ở bên ngoài. Bạn sẽ không chỉ phải kiểm tra xem nó có giải quyết được từ cả hai máy chủ DNS hay không, nhưng nó cũng giải quyết được điều tương tự. – rmeador

+0

Giải pháp này (giải quyết tên cho IP) sẽ hoạt động nếu bạn có kiến ​​thức tiên quyết về IP nội bộ so với IP bên ngoài. Nếu bạn thêm một chút cấu hình (danh sách các dải IP hợp lệ cho mạng nội bộ), bạn đã giải quyết được sự cố. Không phải là một giải pháp khá, nhưng nó sẽ hoạt động. –

+0

Một vấn đề khác là nếu máy chủ phân giải thành một IP có thể định tuyến vì tổ chức của bạn có IP lớp A hợp lệ mà nó sử dụng làm IP của mạng nội bộ. Nó làm cho cuộc sống rất khó khăn với. Net và muốn. – user7116

8

Bạn có biết mạng con bên trong (về địa chỉ IP) không? Nếu vậy, tôi chỉ cần giải quyết tên máy chủ và xem nó có phải là nội bộ theo cách đó hay không.

0

Nói chung, không có cách nào đáng tin cậy để cho biết URL mạng nội bộ từ URL Internet. Nếu mạng nội bộ có sẵn cho chương trình của bạn, thì nó sẽ giống như Internet, và nếu không, thì bạn vẫn sẽ không biết liệu URL có được coi là URL mạng nội bộ đang hoạt động hay chỉ là URL Internet tạm thời .

Bạn sẽ cần một số kiến ​​thức đặc biệt, chẳng hạn như tên miền hoặc IP của máy chủ đang cung cấp mạng nội bộ, để phân biệt chúng.

0

Nếu bạn muốn xác định xem có URL nào là url mạng nội bộ trong bất kỳ công ty nào (trái ngược với chuyên mã của bạn cho một công ty cụ thể), tôi chúc bạn may mắn.

Thông thường, nhưng không phải lúc nào, các url trong mạng nội bộ không có TLD (Tên miền cấp cao nhất, chẳng hạn như .com). Tuy nhiên, tôi đã nhìn thấy một số mà làm.

Hầu như luôn luôn (AFAIK), tên miền mạng nội bộ sẽ giải quyết thành địa chỉ IP tương tự như địa chỉ hiện tại của máy tính. Lưu ý rằng tôi đã không nói cùng một mạng con; mạng nội bộ lớn có thể có nhiều mạng con. Cũng lưu ý rằng nếu máy tính không nằm trong mạng intranet của công ty, thì sẽ là tên miền regualr giải quyết cho các địa chỉ IP tương tự. (Trừ khi máy tính ở phía sau NAT)

+0

Tôi luôn sử dụng .local (http://en.wikipedia.org/wiki/.local) cho các không gian tên nội bộ. tức là supermegacorp.com sẽ là supermegacorp.local nội bộ. Nếu tất cả mọi người đã làm điều này, giải pháp cho vấn đề này sẽ là tầm thường. Tất nhiên .local có thể không làm việc cho tất cả mọi người, tuy nhiên tôi chưa tìm thấy một nơi nào đó mà nó sẽ không hoạt động. – Bryan

+0

Tôi chưa bao giờ thấy '.local' được sử dụng trước đây. Tôi đã nhìn thấy một môi trường nơi mạng nội bộ được lưu trữ trên các tên miền phụ của tên miền bên ngoài của công ty. – SLaks

7

nếu url phân giải thành địa chỉ tcpIp là một trong các địa chỉ IP được đặt sang một IPAddress riêng, thì chắc chắn là trên Intranet của bạn. đây là những

  1. 10.xxx.xxx.xxx,
  2. 172.16.xxx.xxx qua 172.31.xxx.xxx, và
  3. 192.168.xxx.xxx

nếu nó giải quyết để bất kỳ địa chỉ IP nào khác, có thể vẫn ở trên mạng nội bộ của bạn, nhưng nó có địa chỉ IP công khai để có thể truy cập từ bên ngoài Intranet

+0

+1, Như tôi đã nêu chi tiết trong một nhận xét cho một phản hồi khác, một số tổ chức, như bạn chỉ ra, hãy sử dụng IP có thể định tuyến làm IP của mạng nội bộ. Mức độ bảo mật của Net rất đáng kể dựa trên những điều này khi sử dụng các chia sẻ mạng. Nếu bạn đủ may mắn để có những IP đó, thì tôi thấy đó là một cách hợp lệ để kiểm tra. – user7116

+0

Giải pháp này cũng sẽ phá vỡ IP6. Mặc dù IP6 đã bảo lưu địa chỉ IP riêng, khuyến nghị chung là không sử dụng chúng để tránh dịch địa chỉ. – Reza

-1

Để thêm vào những gì người khác đã nói, Intranet không có bất kỳ tên miền cấp cao nào trong địa chỉ của nó. Tôi đã làm việc trong một vài công ty và tất cả Intranet là một cái gì đó như:

http://developments/admin - bạn sẽ nhận thấy rằng không có miền cấp cao nhất. Vì vậy, nó giải quyết với một máy tính trong mạng. Một lần nữa, như tên cho thấy, bạn không có khả năng truy cập nó vượt ra ngoài môi trường của công ty.

+0

Như đã đề cập trong thư trả lời bài đăng của Joel. Điều này không phải lúc nào cũng đúng. – Bryan

0

Tôi không phải là lập trình viên C#, vì vậy tôi không thể cung cấp mã cho bạn, nhưng phương pháp cơ bản sẽ liên quan đến việc so sánh phần tên máy chủ của URL với máy chủ trong mạng nội bộ của bạn.Hoặc, nếu URL của bạn chỉ sử dụng IP không phải là tên DNS, hãy so sánh IP với địa chỉ IP của (các) máy chủ mạng nội bộ của bạn.

Nứt URL bằng thao tác chuỗi - mặc dù tôi tưởng tượng C# phải có một lớp URL sẽ làm điều này cho bạn - và trích xuất tên máy chủ, so sánh nó với danh sách máy chủ.

0

Đơn giản và không hoàn hảo nhưng hoạt động đối với trường hợp 80% chỉ đơn giản là kiểm tra xem URL có một khoảng thời gian trong đó hay không. Tôi biết các URL Intranet có thể đủ điều kiện, nhưng theo kinh nghiệm của tôi (tại Microsoft) thì hầu hết là không, và điều này hoạt động khá tốt.

0

Bạn có thể thẩm vấn trình khám phá internet để xem miền có khớp với danh sách tên miền mạng nội bộ được chấp nhận hay không.

Registry quan trọng là HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Internet Settings \ ZoneMap \ Domains

Có nếu tên miền có giá trị trong vòng 1 cho giao thức đó sẽ được coi là một miền mạng nội bộ. Bạn sẽ cần thực hiện một nslookup để thu thập địa chỉ 'thực'.

+0

* thẩm vấn internet explorer * Không, IE sẽ không phản bội Microsoft ngay cả khi bạn tra tấn nó. ;) –

Các vấn đề liên quan