- PR -

ネットワークアドレス

1
投稿者投稿内容
しゅう
会議室デビュー日: 2005/08/16
投稿数: 6
投稿日時: 2005-08-16 20:32
こんばんは。c#初心者のしゅうといいます。

c#で作るWebアプリで、クライアントが同一ネットワーク内からのアクセスか
ネットワーク外からのアクセスかでブラウザに表示する項目を区別する
という処理を行いたいと思ってます。
(同一ネットワーク内なら項目a,b,cを表示して、外からなら項目a,cしか表示しない)

単純にクライアントのIPアドレスとサブネットマスクを取得して、
ネットワークアドレスを算出して、定数として持っておいた同一ネットワークを
示すアドレスと比較すればいいかと思ったんですが、ネットワークアドレスの
算出がうまくできません。
WMIのManagementObjectSearcherを使って、IPAddressとIPSubnetは取得できた
のですが、そこから先の演算でつまってます。IPAddressとIPSubnetを
2進数か16進数にして、and演算しようと思ってるんですが・・・
以下のやり方だと、IPAddressを2進数や16進数に変換した際、string型になって
しまうため、and演算ができなくなってしまいます。

//IPアドレスの取得
foreach( ManagementObject mo in collection )
{
_IPAddress = ((string [])mo.Properties["IPAddress"].Value)[0];
}

IPAddress ipAddr_IPAddress;
ipAddr_IPAddress = IPAddress.Parse(_IPAddress);

byte[] bIPAddress=ipAddr_IPAddress.GetAddressBytes();

//バイト配列を16進数にしてstring配列に入れる
string[] sIPAddress;
sIPAddress= new string[bIPAddress.Length];
for(int i=0;i<bIPAddress.Length;i++)
{
sIPAddress[i]=Convert.ToString(bIPAddress[i],16);
}

//以下、IPSubnetも同様

そもそも、こういう目的に対し、このやり方(IPAddressとサブネットマスクで判断する)でいいのかというのも自信がありませんが、他のやり方が思いつきません。

どうかご教授ください。よろしくお願いします。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2005-08-17 12:46
文字列でIPアドレスが取得できているのなら、
コード:
 string str = "xxx.xxx.xxx.xxx";
 long address = System.Net.IPAddress.Parse(str).Address;


で、変換できそうな気がする。

サブネットマスクも同様に...。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2005-08-17 13:05
IPAddress.Address プロパティ は、
「メモ : このメンバは旧バージョン用です。」ってなってますね。(VS.NET 2003)
このプロパティは今後使用しません。代わりに、 GetAddressBytes を使用してください。
とのことなので、しゅうさんのプログラムのほうがよさそうです。
#これは整数型のエンディアンに影響を受けないための改善でしょう。

しゅうさんが誤解していると思うのは、
「2進数か16進数にして、and演算しよう」の部分だと思います。

2進数でも10進数でも16進数でもあらわしている数値は同じです。
つまり、and演算するために2進(表記)や16進(表記)をする必要は
ないと言うことです。

GetAddressBytes()して帰ってきたbyte配列を各桁ごとに
and演算すればよいと思います。
しゅう
会議室デビュー日: 2005/08/16
投稿数: 6
投稿日時: 2005-08-17 18:50
かずくん さん、Java僧 さん、ありがとうございます。

>2進数でも10進数でも16進数でもあらわしている数値は同じです。

確かにそうですね。机上の計算の感覚で考えてました。

Java僧さんのアドバイスを参考にやってみます。ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-08-19 05:21
 GDNJ に、同じようなスレッドがあったので、リンク

_________________
1

スキルアップ/キャリアアップ(JOB@IT)