2009-07-02 10 views
6

仕事場でローカルLANに接続している場合、私のアプリケーションが内部IP経由でサーバにアクセスする必要があります。そうしないと、野生の中で外部IPを使用する必要があります。どのドメインに接続しているかをプログラムで確認するにはどうすればよいですか?

現在のところ、私はローカルIP経由で接続しようとしていますが、失敗した場合は外部に接続しようとしていますが、タイムアウトには時間がかかりすぎて、どのドメインのマシンであるかを知る方法があるのでしょうか試す前に接続してください。

編集:Patrick>基本的に、アプリはローカルネットワークに数日に数回接続されたタブレットPCで動作します。これは、ネットワークを介して接続する回数と、ローカルに接続する回数との間でほぼ同じです。

すべてのマシンは、それらがネットワークに接続されているドメインアカウントを持っている(とドメインは、xは、それがゴーストだとき、マシンに与えられた番号である「LOCTabletx」のようなの命名規則にアカウントを持つ。

何I探していますと、機械が当社のローカルネットワークやインターネット上で接続されているかどうかを確認するための高速な方法です。Environment.UserDomainNameは私にLOCTabletxはなくドメイン名を取得します使用。

EDIT

誰にでも役立つならば、私はDNSにしようとしています。私がネットワーク上にあることを保証できるマシンの名前を解決します(サーバーの1つ)。それは私のために十分にうまくいく。

+0

ドメインアカウントを使用してマシンにログオンしていますが、実際にはワークネットワークに物理的に接続されていませんか? –

答えて

7

あなたが試してみました:

Environment.UserDomainName 

をあなたはまた、マシン上のアクティブなIPアドレスを見て、そしてあなたのローカルネットワーク上で動作するものについての問合せができ...

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); 
} 

をまた、ネットワークの状況を把握した後、System.Net.NetworkInformation.NetworkChange.NetworkAddressChangedイベントを購読して、アプリケーションの実行中にコンピュータのネットワークを操作することができます。

+0

ドメイン上で私のマシン名だけが私に届きます。ドメイン名自体ではありません。たとえば、私のcompがLOCProgrammer1で、ドメインがCompany.Localの場合、私は前者を取得し、後者は探しています。 –

+0

それは非常に奇妙です。 VistaとXP Proの両方でドメイン名を取得します。ドメインにログインしていないことを示すために使用する可能性がありますか? –

+0

ローカルマシン名を取得しましたが、ドメインにログインしていません。しかし、それはあなたのログインを認証したシステム、つまりローカルユーザーを使用している場合はローカルマシン、ドメインにログインした場合はドメインを認証します。 –

5
System.Environment.UserDomainName 
+2

「_that_分でそれを逃しました」 –

2

Network Location Awareness APIを参照してください。 Windows Vista以降では、どのネットワークに接続しているかをプログラムで検出し、変更があったときに通知を受けることができます。

「これは家庭/職場/公共のネットワークですか?」という形でおなじみの可能性があります。ダイアログボックス。

+0

残念ながら、マシンはWinXP Proをアップグレードするオプションなしで実行します。私はWinXPのために同等のものを探していくつもりです。ありがとうございました。 –

3

もう一つの方法が、それは実際に他のソリューションよりも良くある場合、私は知らないされています。これは、アクティブディレクトリの下に「ケルベロス」を返す文字列です

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

。ドメインに接続されていないときに何が言われるかわからない。

0

Environment.UserDomainName ...ドメインに参加していない場合は、マシン名が表示されます。ドメインに参加している場合は、ドメイン名が表示されます。ネットワークに接続されたドメインに参加しているマシンを「野生に」持ち帰った場合、再起動して(ドメインアカウントに)再度ログインしても、Environment.UserDomainNameは引き続きドメイン名を提供します。マシンは約30日間ドメインクレデンシャルをキャッシュします。

マシンアカウントにログインすると、マシン名が取得されます。

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

これは、ネットワークに接続されていないと「NTLM」を返します。

関連する問題