2016-09-30 11 views
1

私のアプリケーション(ASP.NET/VB.NET)の1つでは、クライアントマシン名を読み取る必要があります。クライアントマシンに基づいて、支払いを受け入れるためにPoint of Sale支払いデバイスを起動します。これらの各システムには、スタンドアロンのソフトウェアがインストールされており、HTTP要求を使用して銀行に通信します。私は、次の.NETコードを使用してクライアントコンピュータ名を読み取っています。ホスト名が空であることがあります

Dim name As String = String.Empty 
Dim hostEntry = Dns.GetHostEntry(HttpContext.Current.Request.UserHostAddress) 
If hostEntry.HostName.Contains(".") Then 
    name = hostEntry.HostName.Substring(0, hostEntry.HostName.IndexOf(".")) 
Else 
    name = hostEntry.HostName.Trim 
End If 

開発環境では、すべてのシステムがドメイン(「xyz.com」)内にあり、問題はありません。顧客の場所には、ドメイン名の設定がありません。私の上記のロジックは、クライアント環境の一部のシステムでうまく動作し、支払いを行うことができますが、ほとんどのシステムでロジックが失敗し、ホスト名を読み取ることができません。どんな助けもありがとう。

答えて

0

クライアントマシンのファイアウォール設定に問題がありました。私たちの.NETコードが失敗していました。 xyz.comからのすべての着信要求に例外を追加した後。私のコードは問題なく動作しています。

皆さん、@アレクサンダーヒギンズさん、ありがとうございました。

0

あなたはX-Forwarded-Forヘッダ

X-転送さ-用(XFF)HTTPヘッダフィールドからそれを取るしようとすることができますは、Web に接続するクライアントの発信元IPアドレスを特定する ための一般的な方法でありますHTTPプロキシまたはロードバランサを介してサーバーに送信します。

これはX-転送さ-の場合は返すべきである:

X-転送さ-の場合:クライアント、PROXY1、PROXY2

ここではいくつかのサンプルコード:

string ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ; 
if (!string.IsNullOrEmpty(ip)) 
{ 
    string[] ipRange = ip.Split(','); 
    ip = ipRange[0]; 
} 
else 
{ 
    ip = Request.ServerVariables["REMOTE_ADDR"]; 
} 
2

あなたの質問には、あなたの質問に答えるために必要な詳細がありません。正しい答えを出すためには、両方の環境について答えなければならない多くの質問があります。私は質問をすることができないので、私はこのポストの将来の読者に適用され、それらを助けることができるいくつかの仮定を行います。

私は質問をしますが、私のプロフィールは何らかの未知の理由のためにフォークされました。私は質問をするために必要な評判を持っていません。それは、私がバットを識別して問題の解決策を提案することができる問題のリストを実行し、解決策を導くことを願っています。

so ...

1)クライアントのマシン名を読み取る必要があります。ただし、アプリケーションが内部LAN(別名イントラネット)上で実行されていない場合、クライアントマシン名の期間を読み取ることはできません。だから、これがあなたの最初の問題かもしれません。

2)ポイント1を組み合わせて、DNSホスト名を検索するためにクライアントのUserHostAddressからIPアドレスを読み取り、ホストがルックアップを成功させると、最初の部分が最初のものになるまで""開発環境とクライアント環境の両方でLAN上で実行されているイントラネットアプリケーションであると仮定することは安全です。その前提と、すべてのマシンにxyz.comというドメインが与えられているとすれば、開発環境のDNSはおそらくActive Directory(AD)から動的に更新されていると見なすことができます。このような場合、開発ネットワーク上のクライアントマシンがIP経由でADを要求するたびに、ADと統合されたDHCPサーバが新しいIPアドレスを発行します。それが行われ、DHCPオファーが承認され、クライアントADによって受け入れられると、IPアドレスを指し示すクライアントマシンのコンピュータ名を含むホストエントリを追加することによって、DNSはWindowsネットワーク上でもAD統合されます。さらに、構成に応じてDNSポインタをADのDNSに追加することができます。これにより、IPアドレス検索がレコード(この場合はクライアントのマシン名)に解決されます。だからあなたの開発環境(おそらくWindows Active Directoryドメイン上で動作している)ではすべてが機能します。さらに、デフォルトでは、クライアントからの最初のDNS要求で、クライアントコンピュータの名前に最上位ドメイン名(XYZ.COM)が追加されます。

3)お客様のクライアントは、さらなる質問を残すドメインを実行していません。彼らは窓が走っていますか?実行中のウィンドウは、広告以外の環境(ワークグループなど)として実行されます。最初の前提は、彼らがAD統合されていないか、そうでなければこの問題を抱えていない可能性が高いということです。ただし、DNSサーバとは何か、DHCPサーバは何を実行しているのかといった疑問があります。アプリケーションがネットワーク上でクライアントIPアドレスを使用しようとしていて、そのIPに基づいてホスト名検索が失敗した場合、その環境で自分のIPアドレスからホスト名を取得できないことがわかりますクライアント。彼らがAD上にあっても正しく設定されていれば、あなたのDNSサーバはちょうど圧倒されて2秒以内に応答しないので、名前の検索に失敗しますが、それは速度の場合です。より多くの情報があれば、私はもっと助けることができた。

3)AD上にないと仮定すると、アプリケーションが実行されているコンピュータにホスト名を手動でコードすることができますか?たとえば、yourapp.exeがclient-server-01を実行し、クライアントがそれに接続しているとします。次に、client-server-01で、接続する予定のクライアントネットワーク上の各PCのホストファイルに静的DNSエントリを追加できます。一方、アプリケーションがクライアントPC上でローカルに実行されている場合は、Web要求のヘッダーとしてマシン名を渡し、サーバーのRequest.Headers変数からマシン名を読み取ることができます。

4)もう一度、クライアントがWebベースであり、クライアント環境のアプリケーションがサーバー上でホストされています...クライアント環境外のDMZ上のサーバーですか?その場合、ベストプラクティスごとにクライアント環境が構成されている可能性があります.WebアプリケーションをホストしているサーバーがDMZにあり、ボックスへのDNS要求はクライアントのISPに転送され、DNSサーバーで可能なネットワークには戻されません内部IPをクライアントマシン名に解決します。この場合、クライアントのマシン名をクライアントから変数として送信するか、ローカルIPをサーバーホストファイルのホスト名にコード化する必要があります(内部ネットワークがNATの背後になく、実際のクライアントマシンのIPを公開していることが前提です)。 DMZのサーバーが内部DNSにアクセスし、それに応じてアクセスを構成できることを要求します。

....

リストは本当に延々と続くが、私は状況の99%のための問題を強調し、彼らの様々なソリューションへの答えを提供だと思います。

+0

アレクサンダー:私の質問にお答えすることに貴重な時間をいただきありがとうございます。はい、彼らはAD設定を持っていません。ただし、各POSシステムに共通の作業グループが割り当てられています。私の質問は、クライアントシステムの中にはどのように働いているのでしょうか? –

+0

アプリケーションは内部LANで動作します。 WINDOWS OSで使用されるアプリケーション –

+0

ここでは、My xyz.comのWebサイトがclient-server-01、client-02 ...などでブラウズされるシナリオを示します。アプリケーションはclient-01を読んでその名前をIISサーバーに送信し、何らかの操作を行い、POSシステムにインストールされたソフトウェアにデータを送信するHTTP POSTコールを行います。クライアントマシンに接続された支払いデバイスを内部的に起動します(クライアント-01)。 –

関連する問題