- PR -

自IPアドレスの取得方法

投稿者投稿内容
ShuU
常連さん
会議室デビュー日: 2006/09/29
投稿数: 21
投稿日時: 2006-10-16 10:38
お世話になっております。

VB2005を用いて、アプリケーションが動作しているコンピュータ自身の
IPアドレスを取得しようとしております。


DNSクラスを用いて、下記のコードでstrMyIPAddressにIPアドレスを格納
するようにしました。

Dim strHostName As String = Dns.GetHostName()
strMyIPAddress = Dns.GetHostEntry(strHostName).AddressList(0).ToString

しかしながら、いくつかのコンピュータでテストをしたところ1台のみ、
期待のIPアドレスを取得できません。

結果としては、"::1"という文字列が取得されてしまいます。


該当のコンピュータでのping結果は

"ping test02-pc"の場合(設定しているコンピュータ名)
Pinging test02-pc [::1] with 32 bytes of data:
Reply from ::1: time<1ms
(以下略)

"ping localhost"の場合
Pinging test02-pc [::1] with 32 bytes of data:
Reply from ::1: time<1ms
(以下略)

"ping 192.168.10.12"の場合(割り振っているIPアドレス)
Pinging 192.168.10.12 with 32 bytes of data:
Reply from 192.168.10.12: bytes=32 time<1ms TTL=128
(以下略)

"ping 127.0.0.1"の場合
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time<1ms TTL=128
(以下略)

となります。


該当のコンピュータは、「DELL PRECISION 690」「WindowsXP Pro.(SP2)」で、
期待しているIPアドレスは"192.168.10.12"です。

プログラムの問題か、コンピュータの問題か、解決方法をご指導ください。
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2006-10-16 11:04
"ping test02-pc"の結果
Reply from ::1: time<1ms

となってプログラムの結果と一致しています
コンピュータ側の問題が濃厚です。

プログラム側のstrHostNameの値をみてはいかがでしょうか?
test02-pcとなっているはずです
ShuU
常連さん
会議室デビュー日: 2006/09/29
投稿数: 21
投稿日時: 2006-10-16 11:37
ご返信を戴きまして有難う御座います。

99riさんの書き込み (2006-10-16 11:04) より:
> プログラム側のstrHostNameの値をみてはいかがでしょうか?
> test02-pcとなっているはずです

ご指摘の通り、"test02-pc"となっておりました。

コンピュータ側の問題ということですが、考えられ事例はありますでしょうか?

マイクロソフト社のウェブサイトで"ping ::1"を検索したところ、IPv6というの
が関係しているようなのですが、このあたりの情報には疎いので、解決策にまで
行き着けません。

試しに、ローカルエリア接続のプロパティから「TCP/IP version6」チェックを
外してみましたが、症状は変わりませんでした。

どうしたら、"::1"ではなく"192.168.10.12"を取得できるようになるか、設定面
でも、プログラム面でも構いませんので、ご教授ください。


NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2006-10-16 11:50
引用:

試しに、ローカルエリア接続のプロパティから「TCP/IP version6」チェックを
外してみましたが、症状は変わりませんでした。


外した状態でipconfig -allをやって結果は表示されなくなってるの?
なってなかったら結局まだiPv6が生きたまま。

再起動してみたらどうなります?
_________________
Inspired Ambitious
ISMS Assistant Auditor
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-10-16 11:51
引用:

ShuUさんの書き込み (2006-10-16 10:38) より:

コード:
Dim strHostName As String = Dns.GetHostName()
strMyIPAddress = Dns.GetHostEntry(strHostName).AddressList(0).ToString





複数のネットワークインターフェースを持っている端末の場合どうするんだろう。。。
AddressList の中身を確認してみてはどうでしょうか
99ri
大ベテラン
会議室デビュー日: 2006/09/09
投稿数: 129
投稿日時: 2006-10-16 12:14
"192.168.10.12"は従来のIPアドレス体系でIPv6ではこのような体系ではありません

もしIPv6を使用しているならば
プログラム的にはIPv6に対応しているメソッドでIPアドレスを取得する必要があります


[ メッセージ編集済み 編集者: 99ri 編集日時 2006-10-16 12:16 ]
ShuU
常連さん
会議室デビュー日: 2006/09/29
投稿数: 21
投稿日時: 2006-10-16 12:45
皆様、ご返信有難う御座います。

> NAOさん
"ipconfig -all"では、IPv6アドレスは無くなっておりました。
念のために再起動しましたが、結果は変わりません。
このチェックだけでは、駄目のようです。

> かるあさん
AddressListのすべて吐き出させてたところ、リストの2つ目に目的のアドレスがありました。
また、LANカードを追加したところ、"::1"、"192.168.10.13"、"192.168.10.12"となりました。
IPv4アドレスを取得するために、リストからIPv4の正規表現をチェックすることにします。
また、仕様としては、NIC2枚以上の場合、最も若いIPv4アドレスを使用することとします。
有難う御座いました。

> 99riさん
プログラム的にはIPv4のネットワークを想定しているため、IPv6が取得できることが問題でした。
将来的にIPv6のネットワークを想定する場合には、挑戦してみようと思います。

以上、ご指導、有難う御座いました。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-10-16 16:45
引用:

IPv4アドレスを取得するために、リストからIPv4の正規表現をチェックすることにします。


IPAddress クラスにどのアドレス形式かを示すプロパティとかあったような。

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