2009-07-02 31 views
6

Nếu tôi kết nối với LAN cục bộ tại nơi làm việc, tôi cần có ứng dụng truy cập máy chủ của chúng tôi qua IP nội bộ, nếu không, tôi sẽ cần sử dụng IP bên ngoài của chúng tôi khi thoát ra ngoài tự nhiên.Làm cách nào để kiểm tra theo chương trình xem tôi đã kết nối với miền nào?

Hiện tại, tôi chỉ cố gắng kết nối qua IP cục bộ và sau đó thử bên ngoài nếu không thành công ... nhưng thời gian chờ mất quá nhiều thời gian và tôi đã tự hỏi liệu có cách nào để tìm ra tên miền của máy không kết nối trước khi thử.

Chỉnh sửa: Patrick> Về cơ bản, ứng dụng chạy trên máy tính bảng được kết nối với mạng cục bộ vài lần mỗi ngày. Nó gần bằng nhau giữa số lần nó kết nối qua mạng và thời gian mà nó kết nối cục bộ.

Tất cả các máy có một tài khoản miền khi chúng được kết nối vào mạng (và có chiếm miền với một quy ước đặt tên giống như "LOCTabletx" trong đó x là một số lượng nhất định để máy khi nó mờ đi.

Những gì tôi đang tìm kiếm là một cách nhanh chóng để xem nếu máy được kết nối vào mạng nội bộ của chúng tôi hoặc internet. Sử dụng Environment.UserDomainName được tôi LOCTabletx và không phải là tên miền.

EDIT

Nếu nó giúp bất cứ ai, tôi chỉ cố gắng DNS Giải quyết tên của một máy mà tôi có thể đảm bảo sẽ được trên mạng (một trong các máy chủ). Nó hoạt động đủ tốt cho tôi.

+0

Bạn có đăng nhập vào máy bằng tài khoản miền và không kết nối thực với mạng công việc của mình không? –

Trả lời

7

Các bạn đã thử:

Environment.UserDomainName 

Bạn cũng có thể có một cái nhìn tại các địa chỉ IP đang hoạt động trên máy tính, và truy vấn cho một trong những hoạt động trên mạng cục bộ ...

var x = NetworkInterface.GetAllNetworkInterfaces() 
    .Where(ni => ni.OperationalStatus == OperationalStatus.Up) 
    .SelectMany(ni => ni.GetIPProperties().UnicastAddresses); 

// do something with the collection here to determine if you're on the right network. 
// just looping & printing here for example. 
foreach (var item in x) 
{   
    Console.WriteLine(item.Address); 
} 

Và sau khi bạn đã tìm ra mạng mà bạn đang truy cập, bạn có thể đăng ký sự kiện System.Net.NetworkInformation.NetworkChange.NetworkAddressChanged để xử lý các mạng nhảy máy tính của bạn trong khi ứng dụng của bạn đang chạy.

+0

Điều đó chỉ cho tôi tên máy của tôi trên miền. Không phải tên miền. Ví dụ, nếu comp của tôi là LOCProgrammer1 và tên miền là Company.Local tôi lấy cái cũ, và tôi đang tìm cái sau. –

+0

Điều đó rất kỳ quặc. Tôi nhận được tên miền của chúng tôi theo cả Vista và XP Pro. Có lẽ bạn có thể sử dụng nó như là một dấu hiệu cho thấy bạn không đăng nhập vào miền? –

+0

Tôi lấy tên máy cục bộ của mình - và tôi chưa đăng nhập vào miền. Mặc dù có ý nghĩa - nó sẽ cung cấp cho bạn bất kỳ hệ thống nào đã xác thực đăng nhập của bạn, hoặc máy cục bộ nếu bạn sử dụng một người dùng cục bộ hoặc miền của bạn nếu bạn đăng nhập vào một miền. –

5
System.Environment.UserDomainName 
+2

"Đã bỏ lỡ nó bởi _that_ nhiều." –

2

Bạn muốn xem API Network Location Awareness. Có sẵn trên Windows Vista hoặc mới hơn, nó cho phép bạn lập trình khám phá mạng nào bạn đang kết nối và được thông báo khi điều này thay đổi.

Nó có thể quen thuộc với bạn dưới dạng "Đây có phải là mạng gia đình/cơ quan/công cộng không?" hộp thoại.

+0

Thật không may là các máy chạy WinXP Pro mà không có tùy chọn nâng cấp. Tôi sẽ làm một số tìm kiếm cho một tương đương cho WinXP mặc dù. Cảm ơn bạn. –

3

Một cách khác, nhưng tôi không biết nếu nó thực sự là bất kỳ tốt hơn so với các giải pháp khác là:

System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 

này là một chuỗi trả về "Kerberos" dưới thư mục hoạt động. Bạn không chắc chắn những gì nó sẽ nói khi không kết nối với miền mặc dù.

0

Environment.UserDomainName ... cung cấp cho bạn tên máy nếu bạn không tham gia vào miền. Nó cung cấp cho bạn tên miền nếu bạn tham gia vào một miền. Nếu bạn lấy một máy được nối với một tên miền ngoài mạng và thoát ra ngoài "hoang dã", Environment.UserDomainName sẽ tiếp tục cung cấp tên miền ngay cả khi bạn khởi động lại và đăng nhập lại (vào tài khoản miền của bạn). Máy của bạn lưu trữ thông tin đăng nhập miền trong khoảng 30 ngày.

Nếu bạn đăng nhập vào tài khoản máy của bạn, sau đó bạn sẽ nhận được tên máy.

4
System.Security.Principal.WindowsIdentity.GetCurrent().AuthenticationType 

Điều này sẽ trả về "NTLM" khi không được kết nối mạng.

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