none
Webサーバでクライアントを特定するには RRS feed

  • 質問

  • visual studio 2010
    のC#でWebアプりを作成しています。
    クライアントは最大5台と決まっており、クライアントのIPアドレスも決まっています。
    サーバにアクセスしてきたクライアントを5台の内どれかを特定する必要があり
    System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]).AddressList[i].ToString();
    上記の様にしました。
    するとサーバと同じネットワークアドレスのクライアントのIPアドレスは取得できましたが、
    違うネットワークアドレスのクライアントのIPアドレスは取得できませんでした。
    サーバにDNSをインストールすれば良いのでしょうか?
    ただ単にクライアントを特定するだけでよいので、DNSのインストールは敷居が高いので
    違う方法を探しています。
    簡易版のDNSとかありますか?
    ご存じの方教えてください。
    2012年12月14日 4:35

すべての返信

  • System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] の内容は確認しましたか?
    2012年12月14日 5:10
  • > するとサーバと同じネットワークアドレスのクライアントの
    > IPアドレスは取得できましたが、違うネットワークアドレ
    > スのクライアントのIPアドレスは取得できませんでした。

    「違うネットワークアドレスのクライアント」というのは、Web サーバーから見て NAPT の後ろでプライベートアドレスを使っているとか、プロキシの後ろにいるということはないですか。

    2012年12月14日 13:28
  • ご回答ありがとうございます。

    count = System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]).AddressList.Length;

    を実行するとクライアント端末が持っているIPアドレスの個数を取得でき

    System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]).AddressList[i].ToString();

    の'i'を変更してループするとクライアントが持っているすべてのIPアドレスを取得できましたが

    ご教示いただいた

    System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"])

    でもクライアントが持っているIPアドレスを複数個取得できるのでしょうか?

    もし複数個取得できる場合に、どのように複数個取得すればよいでしょうか?

    windows7がクライアントの場合はIPV4とIPV6のアドレスを持っているので複数個のIPアドレスを

    持っていると思います。

    よろしくお願いします。

    よろしくお願いします。

    2012年12月15日 9:24
  •  NAPT とかプロキシは使っていません。L3スイッチ経由で違うネットワークアドレスでも通信できるようにしています。

     NAPT とかプロキシを使っていなければ

    System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]).AddressList[i].ToString();

    でもクライアントのIPアドレスを取得できるはずなのでしょうか?

    よろしくおねがいします

    2012年12月15日 9:29
  • > NAPT とかプロキシは使っていません。L3スイッチ経由で違う
    > ネットワークアドレスでも通信できるようにしています。

    先の私の質問の意味を分かっておられるでしょうか? クライアントと IIS の間に、クライアントの IP アドレスを書き換えたり(NAPT など)、通信を遮断したり(プロキシなど)しているものはありませんか、ということなんですが。

    L3 スイッチにも VLAN 間の通信を制御するフィルタリング機能があるはずです。

    > System.Net.Dns.GetHostEntry(System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]).AddressList[i].ToString();
    >
    > でもクライアントのIPアドレスを取得できるはずなのでしょうか?

    Dns.GetHostEntry を使うのは意味がないと思います。

    問題の PC から IIS に要求を出して応答が戻ってきているなら、PC が要求した aspx.cs ページで、

    Request.ServerVariables["REMOTE_ADDR"]

    とすれば何らかの IP アドレスを取得できるはずです。

    とにかく、佐祐理さんがレスされたように、まずはそれをやって、取得できた IP アドレスが期待したものか、そうではないのか確認してください。一方的に聞くだけでなく、レスされたことに対しては、きちんと返事をするのが礼儀です。

    2012年12月16日 0:47
  • マルチポストのようなのでその URL を張っておきます。

    http://bbs.wankuma.com/index.cgi?mode=al2&namber=64659
    http://oshiete.goo.ne.jp/qa/7844595.html
    http://okwave.jp/qa/q7844595.html
    http://soudan1.biglobe.ne.jp/qa7844595.html?order=DESC&by=datetime


    質問者さんへ>
     
    マルチポストはダメとは言いませんが、他の投稿先の URL 等を書いておいていただければと思います。同じ問題を持つ人が検索でこのページにたどり着いた時、URL をたどって解決できるかもしれませんから。
     
    ここはフォーラムで、開発者同士の情報交換の場所ですので、他の閲覧者のことも考えていただければと思います。

    2012年12月16日 1:19
  • DNSというものが何をするものかわかっていますか? その上で、Dns.GetHostEntry()メソッドが何のリストを返すものかわかっていますか? 「クライアントが持っているすべてのIPアドレス」ものではありません。ついでに言うと「クライアントが持っているすべてのIPアドレスを取得」する方法は基本的には存在しません。
    # リモートからWMI接続でもすればできますが…。

    まずプログラムの目的として何をしたいのかをはっきりさせましょう。

    2012年12月16日 2:13