C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[16]: webサーバでクライアントを特定するには


(過去ログ 109 を表示中)

[トピック内 22 記事 (1 - 20 表示)]  << 0 | 1 >>

■64659 / inTopicNo.1)  webサーバでクライアントを特定するには
  
□投稿者/ shito (4回)-(2012/12/14(Fri) 09:19:14)

分類:[ASP.NET (C#)] 

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とかありますか?
ご存じの方教えてください。
引用返信 編集キー/
■64660 / inTopicNo.2)  Re[1]: webサーバでクライアントを特定するには
□投稿者/ シャバダバ (1回)-(2012/12/14(Fri) 10:24:53)
Webアプリケーションである以上、アプリ側からはユーザー認証以外でクライアントを特定すべきではないと思います。
クライアントの特定が必要なのであれば、Webアプリにする意味がないように思いますが、何故クライアントの特定が必要なのでしょうか。
引用返信 編集キー/
■64662 / inTopicNo.3)  Re[2]: webサーバでクライアントを特定するには
□投稿者/ shito (5回)-(2012/12/14(Fri) 13:20:08)
No64660 (シャバダバ さん) に返信
ご回答ありがとうございます。
特別な業務で使用するアプリなのですが、最大で5クライアント接続されます。
たとえばAクライアントが処理したことを、Bクライアントへは通知するが
Cクライアントには通知しないという処理が必要なのです。
そのため、どのクライアントが処理したのかを特定しなければなりません。
よろしくお願いします。

引用返信 編集キー/
■64665 / inTopicNo.4)  Re[3]: webサーバでクライアントを特定するには
□投稿者/ ザンク (1回)-(2012/12/14(Fri) 15:32:29)
No64662 (shito さん) に返信
> たとえばAクライアントが処理したことを、Bクライアントへは通知するが
> Cクライアントには通知しないという処理が必要なのです。

内容からしてイントラのWebアプリを想定しますが、ここでいう「クライアント」とは
ユーザーのことではなく端末のことを指していますか?
本来、Webアプリは、(一定の認証が必要であるとしても)不特定の端末から操作されるべきで、
クライアントの特定が必要なのであれば、そもそもWebアプリを使う意義がないと思います。
(もし対象の端末が故障したらどうしますか?)

それならば、各クライアントを識別するよりは、そのクライアントに固有のユーザーを割り当てるようにし、
ユーザーログイン機能を搭載した方が本来のWebアプリだと思うのですが。
運用でカバーできるものは運用で行った方が費用対効果としてはいいと思いますが、どうでしょう。
引用返信 編集キー/
■64666 / inTopicNo.5)  Re[4]: webサーバでクライアントを特定するには
□投稿者/ 中博俊 (8回)-(2012/12/14(Fri) 16:36:48)
まぁそこまで言わなくてもクッキーで番号でも配っておけばいいんじゃないんですかね?
引用返信 編集キー/
■64668 / inTopicNo.6)  Re[5]: webサーバでクライアントを特定するには
□投稿者/ shito (6回)-(2012/12/14(Fri) 21:38:20)
No64666 (中博俊 さん) に返信
> まぁそこまで言わなくてもクッキーで番号でも配っておけばいいんじゃないんですかね?

Webk開発初心者なもので「クッキーで番号でも配る」とはどういうことでしょうか?
参考になるURLあれば教えてください。
よろしくお願いします。
引用返信 編集キー/
■64669 / inTopicNo.7)  Re[6]: webサーバでクライアントを特定するには
□投稿者/ 通りすがり (1回)-(2012/12/15(Sat) 10:58:14)
回答ではありません

shitoさんへ

>するとサーバと同じネットワークアドレスのクライアントのIPアドレスは取得できましたが、
>違うネットワークアドレスのクライアントのIPアドレスは取得できませんでした。

ここから推測するとイントラネットで運用されているのですか?
詳しく環境をかかれたほうが回答を得られると思います


シャバダバさんへ

>Webアプリケーションである以上、アプリ側からはユーザー認証以外でクライアントを特定すべきではないと思います。

何故だめなのでしょうか?私が無知なだけです。理由を教えてください

>クライアントの特定が必要なのであれば、Webアプリにする意味がないように思いますが、何故クライアントの特定が必要なのでしょうか。

危機管理、情報収集なんでも目的はあるように思えます
そもそも顧客に要求されたら、それだけで理由になりませんか?
実現不可能な案件と自分に能力がなくて出来ない案件とでは顧客からの信用も変わってしまいますし
引用返信 編集キー/
■64675 / inTopicNo.8)  Re[7]: webサーバでクライアントを特定するには
□投稿者/ VTR (1回)-(2012/12/15(Sat) 17:34:45)
> そもそも顧客に要求されたら、それだけで理由になりませんか?
> 実現不可能な案件と自分に能力がなくて出来ない案件とでは顧客からの信用も変わってしまいますし

まぁ、顧客の信用にかかわることであれば、そもそもこういった掲示板で尋ねている場合じゃないわけで。
引用返信 編集キー/
■64678 / inTopicNo.9)  Re[8]: webサーバでクライアントを特定するには
□投稿者/ SuferOnWww (1回)-(2012/12/16(Sun) 10:28:46)
マルチポストのようなのでその URL を張っておきます。

http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/29d650a7-bb29-4182-93a2-2e0662753c92
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 をたどって解決できるかもしれませんから。
引用返信 編集キー/
■64679 / inTopicNo.10)  Re[7]: webサーバでクライアントを特定するには
□投稿者/ シャバダバ (2回)-(2012/12/16(Sun) 23:43:37)
No64669 (通りすがり さん) に返信
> シャバダバさんへ
>
> >Webアプリケーションである以上、アプリ側からはユーザー認証以外でクライアントを特定すべきではないと思います。
>
> 何故だめなのでしょうか?私が無知なだけです。理由を教えてください

WebアプリではREMOTE_ADDRなら取得できますが、少なくともローカルのIPアドレスは分かりません。
例え、ローカルのIPアドレスが分かったとしても、そのネットワークでDHCPが使われていたら意味がありませんし、
異なるネットワークであればローカルのIPアドレスだけでは唯一性は確保できません。
それはさて置き、何らかのクライアントに固有の情報を取得するには、例えばActiveXなどのプラグインを使う方法が考えられます。
ただ、クライアント環境でこのプラグインを許すかどうか、また、開発者にこのプラグインを作成する技量があるかどうか疑問です。
(質問の内容から推測して、どちらかというと素人であるとお見受けしました。)
そんな面倒なことを考えるのであれば、ログイン画面を作って認証すればずっと楽にクライアントうぃ識別できます。
(みなさんがご指摘のクッキーにログイン情報を入れておけば、クッキーを残すようにすれば次回以降ログインが不要というようにすることも可能です。)

> >クライアントの特定が必要なのであれば、Webアプリにする意味がないように思いますが、何故クライアントの特定が必要なのでしょうか。
>
> 危機管理、情報収集なんでも目的はあるように思えます
> そもそも顧客に要求されたら、それだけで理由になりませんか?
> 実現不可能な案件と自分に能力がなくて出来ない案件とでは顧客からの信用も変わってしまいますし

違います。
顧客に要求されたら何でもやるのですか?
それは三流以下でもできることです。
顧客の要求の意図を確認し、本当にそれが必要なのかどうか、費用対効果を考慮しながら提案を行うのがあるべき姿ではないのですか?
無駄に高い技術料を払わされる客にとってみれば、たまったものではありません。
多分、まだ顧客との折衝の経験が少ないためこのような発想が生まれてしまっているのだと思いますが、
それは、今後顧客との打ち合わせを重ねるにつれ、そのうち理解できるでしょう。

それに、Webアプリに情報収集をさせるような発想こそ、危機管理がなっていないと感じますね。
クライアント監視を想定しているのでしょうが、それはクライアントの所属するネットワーク上のサーバーで行うべきでしょう。
引用返信 編集キー/
■64680 / inTopicNo.11)  Re[7]: webサーバでクライアントを特定するには
□投稿者/ VTR (2回)-(2012/12/16(Sun) 23:49:38)
2012/12/16(Sun) 23:54:19 編集(投稿者)

ActiveXとなると、確かにこれは難しいですね。
引用返信 編集キー/
■64681 / inTopicNo.12)  Re[8]: webサーバでクライアントを特定するには
□投稿者/ 通りすがり (2回)-(2012/12/17(Mon) 08:43:58)
No64679 (シャバダバ さん) に返信
> ■No64669 (通りすがり さん) に返信
>>シャバダバさんへ

> WebアプリではREMOTE_ADDRなら取得できますが、少なくともローカルのIPアドレスは分かりません。
> 例え、ローカルのIPアドレスが分かったとしても、そのネットワークでDHCPが使われていたら意味がありませんし、
> 異なるネットワークであればローカルのIPアドレスだけでは唯一性は確保できません。
> それはさて置き、何らかのクライアントに固有の情報を取得するには、例えばActiveXなどのプラグインを使う方法が考えられます。
> ただ、クライアント環境でこのプラグインを許すかどうか、また、開発者にこのプラグインを作成する技量があるかどうか疑問です。
> (質問の内容から推測して、どちらかというと素人であるとお見受けしました。)
> そんな面倒なことを考えるのであれば、ログイン画面を作って認証すればずっと楽にクライアントうぃ識別できます。
> (みなさんがご指摘のクッキーにログイン情報を入れておけば、クッキーを残すようにすれば次回以降ログインが不要というようにすることも可能です。)

論点ずれてませんか?完全に特定出来るか出来ないかの議論ではなく
あなたは特定という行動自体をするべきではないと言及されています

もう一度聞きます

>>>Webアプリケーションである以上、アプリ側からはユーザー認証以外でクライアントを特定すべきではないと思います。

なぜだめなのですか?完全に特定できないからやる必要がないというのはおかしいと思うのですが
現状で取得できる可能な限りの情報を収集することを否定しているのが気になっています

引用返信 編集キー/
■64682 / inTopicNo.13)  Re[9]: webサーバでクライアントを特定するには
□投稿者/ みきぬ (15回)-(2012/12/17(Mon) 10:23:25)
理由は No64665 にある通りだと思うけど。
特定したいのは、端末なのか、人なのか。質問者がそこを勘違いしていないかどうかが心配。

「通知したい」という要件があるので尚更そう思う。通知したいのは、普通は人だと思うし。
引用返信 編集キー/
■64683 / inTopicNo.14)  Re[10]: webサーバでクライアントを特定するには
□投稿者/ 甕星 (5回)-(2012/12/17(Mon) 16:04:45)
横から口を出してしまいますが、WEBサーバー側で検出できるクライアントPCのIPアドレスは、NATやPROXYを経由する場合にはNATやPROXYサーバーになってしまうのは造る前から分かることです。今回の問題はIPアドレスでクライアントPCを認証しようとした場合に発生する問題を造る側も、運用する側も理解できてなかったわけで、その点で「酷い仕事しているな」とは思います。

あくまでWEBサーバー側で検出できる接続元のIPアドレスで認証したいと思うなら、ネットワークかクライアントの構成を見直す必要があります。

現状のネットワーク構成のままIPアドレスで認証するというなら、ActiveXを使うなり、クライアント側で動作するアプリケーションが必要になります。これだって制限がついて回ります。PROXYやNAPTを使用して接続できる環境と言うことは、同じIPアドレスを持つPCが複数存在し得るネットワーク環境と言うことです。同じIPアドレスが存在した場合どうするのか、存在しないように運用できるのか考えなくてはなりません。ActriveXを使うにはアプリケーション証明書が必要になったりします。これもどうするのか考えなければなりません。

Cookieに固有のIDを入れて見分けるという方法もありますが、Cookieはユーザーの操作で簡単に削除、改竄、複製できてしまいます。それで駄目なのか良いのかという問題があります。通信毎にCookieの内容を書き換えてしまえば容易には改竄、複製は出来なくなりますが、登録時の手順を考える必要があるでしょう。また削除できないようにする方法はありません。

コレという正当はありませんので、いくつかの方法の中から、利点欠点を秤に掛けながら判断するより他にありません。
引用返信 編集キー/
■64690 / inTopicNo.15)  Re[9]: webサーバでクライアントを特定するには
□投稿者/ シャバダバ (3回)-(2012/12/19(Wed) 14:50:40)
2012/12/19(Wed) 16:26:07 編集(投稿者)

No64681 (通りすがり さん) に返信

> なぜだめなのですか?完全に特定できないからやる必要がないというのはおかしいと思うのですが

なるほど、あなたの「なぜだめなのですか」という意味は、「なぜ特定してはならない」(つまり、MUST NOT)
という意味なのですね。
それならば、失礼ながら、論点がずれているのはあなたの方です。
私は一言も「特定してはならない」とは言及していません。
「特定すべきではない」と申しています。
「特定すべきではない」と「特定してはならない」は、意味に大きな違いがあることを理解できませんか?

例えば、風邪で熱が38度位ある場合、仕事や学校には「行くべきではない」と思いますが、
「行ってはならない」とは思いません(風邪でなく、インフルエンザであれば別ですが)。
これらは全く異なる意味合いであることは理解できますか?
「行くべきではない」は、MUST NOTではないのです。「行く」ことを禁止しているわけではありません。
また、例えば「窃盗をすべきではない」という言葉にあなたは違和感を感じませんか?
常識的に、「窃盗をしてはならない」となるでしょう。

また、

> 完全に特定できないからやる必要がないというのはおかしいと思うのですが

私の意見に対して「おかしいと思う」のだと思いますが、私がどこで「やる必要がない」と
述べていますか?
全く身に覚えがないのですが...その箇所を示してもらえませんか?

> 現状で取得できる可能な限りの情報を収集することを否定しているのが気になっています

否定した覚えは全くないのですが...
私がどこで「現状で取得できる可能な限りの情報を収集すること」を否定していますか?
そもそも、「現状」とは何を指していますか?
「現状」が、このスレの元々の質問者における「現状」であれば、別ネットワークの端末のローカルIPアドレスは
まだ取得できていないのですが、取得できない現状において「可能な限りの情報を収集」するとは、どういうことなのでしょうか?

もちろん「現状」で収集可能な情報は、システムでどんどん活用すればいいんじゃないのですか?
ただし、今回の質問者の質問は、「現状」で収集できない情報を収集したいということだと理解しています。
それに対して、私は、回答を行うにあたり、クライアントの情報を取得することが本当に最適解であるかを確認したいがために
最初の書き込みを行ったに過ぎません。


※もし、日本語が苦手な外国の方であれば、英語で質問をされては如何でしょう。
 こちらも頑張って英語で回答しますよ。


少なくとも、「特定すべきではない」という理由については前回、既に回答しています。
(要するに、わざわざユーザー認証以外の方法でクライアントを特定する手段に限定することはコストがかかるため、
そんなリスクを犯してまでユーザー認証以外の方法でクライアントを特定すべきではない、ということです。)

なので、貴方の問いの「なぜだめなのか」(つまり、「なぜ特定してはならないのか」)に対する回答は、
残念ながら持ち合わせていません。悪しからず。
(だめかどうか、なんて、私の知ったことではありません)

そもそも、あなたはスレ主(本来の質問者)ではなく、所詮「通りすがり」に過ぎないわけですので、
スレ主にも迷惑をかけないよう、脱線もほどほどにしてください。
(ハンドルを「通りすがり」にしているのも、自身に自信がないからなのだと思いますが、ご自愛ください。)
引用返信 編集キー/
■64702 / inTopicNo.16)  Re[10]: webサーバでクライアントを特定するには
□投稿者/ Ante (11回)-(2012/12/20(Thu) 15:15:59)
XPまでなら、IPアドレスはIPv4つまり、192.168.0.0などで表現されるIPアドレスが取得されるが、
Vista以降ではネットワークアダプタにIPv6のインターネットプロトコルが標準で有効になっているのでAddressList(0)ではIPv4ではなくIPv6のアドレスが取得される。

そこでIPv4を確実に取得するためにはこんな感じかな。

Imports System.Net

Dim ipa As IPAddress
Dim iphEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName())
For Each ipAddr As IPAddress In iphEntry.AddressList
    If ipAddr.AddressFamily = Sockets.AddressFamily.InterNetwork Then
        ipa = ipAddr
        Exit For
    End If
Next

’IPアドレス取得
Me.lblErr.Text = ipa.ToString

C#だとこうなるのかな?

using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Net;

IPAddress ipa = default(IPAddress);
IPHostEntry iphEntry = Dns.GetHostEntry(Dns.GetHostName());
foreach (IPAddress ipAddr in iphEntry.AddressList) {
    if (ipAddr.AddressFamily == Sockets.AddressFamily.InterNetwork) {
        ipa = ipAddr;
        break; // TODO: might not be correct. Was : Exit For
    }
}
//IPアドレス取得
this.lblErr.Text == ipa.ToString

まぁみなさん仰られてる通り、ユーザーの概念追加したほうが今後のためにもいいかもしれないですね。

的外れだったらすんません^^,

引用返信 編集キー/
■64703 / inTopicNo.17)  Re[11]: webサーバでクライアントを特定するには
□投稿者/ BBQ (1回)-(2012/12/20(Thu) 15:24:19)
No64702 (Ante さん) に返信

対象がASP.NETなので、今回の件とは関係ないかも知れませんね。
引用返信 編集キー/
■64704 / inTopicNo.18)  Re[12]: webサーバでクライアントを特定するには
□投稿者/ Ante (12回)-(2012/12/20(Thu) 16:08:36)
No64703 (BBQ さん) に返信
> ■No64702 (Ante さん) に返信
>
> 対象がASP.NETなので、今回の件とは関係ないかも知れませんね。

いやいや、ASP.NET上の話ですよ。空のWebサイトに上記コードを乗っければアドレス取得が可能です。
引用返信 編集キー/
■64705 / inTopicNo.19)  Re[13]: webサーバでクライアントを特定するには
□投稿者/ BBQ (2回)-(2012/12/20(Thu) 16:21:51)
2012/12/20(Thu) 16:26:16 編集(投稿者)

No64704 (Ante さん) に返信
> ■No64703 (BBQ さん) に返信
>>■No64702 (Ante さん) に返信
>>
>>対象がASP.NETなので、今回の件とは関係ないかも知れませんね。
>
> いやいや、ASP.NET上の話ですよ。空のWebサイトに上記コードを乗っければアドレス取得が可能です。

この取得可能なアドレスはホストにエントリーされているIPアドレスですよね?
今回欲しいのは別ネットワーク上のクライアントのプライベートIPアドレスなのですが。
(同一ネットワーク内のIPは取得できているとのことです。)
引用返信 編集キー/
■64706 / inTopicNo.20)  Re[14]: webサーバでクライアントを特定するには
 
□投稿者/ BBQ (3回)-(2012/12/20(Thu) 16:24:37)
2012/12/20(Thu) 16:27:28 編集(投稿者)

No64705を修正しようとして、間違えて空送信したので、ここの内容は削除します。
引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -