- PR -

リモートコンピュータ名を取得する方法について

投稿者投稿内容
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-08-02 09:13
ありゃりゃ、
れいさん フォローありがとうございます。


sav_monster
会議室デビュー日: 2007/07/24
投稿数: 16
投稿日時: 2007-08-02 10:09
みなさん、本当にたくさんのご返信、ありがとうございます。
未来が見えてきたように思います。

Dns.GetHostByAddressはBios名を返信してくれるんですね?
一度やってみたのですが、IPアドレスがそのまま返ってきたので、
無理だとおもっていました。

あまり自信はないですが、ちょっと調べて書いてみます。
あと、台数ですが、100台以上です。

このプログラムの目的は、IPアドレス枯渇状況を調査するのが目的です。
セグメントは100以上ありますので、とりあえず、2個ずつ(Cクラス)で、
254×2 =約500 ぐらいを単位に考えています。
(一台につき1秒ではかなり時間がかかりそうですね・・・)

定期的にPingを飛ばし、通ったものについては、コンピュータ名を取得する。。。
そうして、現状のIPアドレス枯渇状況を調査したいと考えています。

同期/非同期という言葉をときとき、目にします。
Dns.GetHostByAddressの場合、非同期にするのはどうすればいいんでしょうか?


甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2007-08-02 10:50
引用:

sav_monsterさんの書き込み (2007-08-02 10:09) より:
みなさん、本当にたくさんのご返信、ありがとうございます。
Dns.GetHostByAddressはBios名を返信してくれるんですね?


いいえ。BIOS名返信してくれます。
HOSTS→DNS→netBIOSの優先順位で返したと思います。したがってもしもDNSに登録されているなら、DNS名を返すでしょう。

引用:

一度やってみたのですが、IPアドレスがそのまま返ってきたので、
無理だとおもっていました。


必ず取得できるわけではありません。Firewallが有効になっているだけで取得できません。したがって、netBIOS名を取得できるためには、クライアントの設定を事前に変更しておく必要があるでしょう。

ほとんどの場合は、ネットワーク経由でネットワークを構成する要素の調査を行うためには、ネットワークを構築する時点でそれらを考慮していなくてはできません。後から「できないかな?」といっても、ほとんどの場合はネットワークに参加している端末やネットワークの設定を変更する必要が出るものです。

引用:

定期的にPingを飛ばし、通ったものについては、コンピュータ名を取得する。。。
そうして、現状のIPアドレス枯渇状況を調査したいと考えています。


それってpingに応答するように設定されていない端末は検出できないですよね。それでよいんですか?

引用:

同期/非同期という言葉をときとき、目にします。
Dns.GetHostByAddressの場合、非同期にするのはどうすればいいんでしょうか?


非同期に呼び出す機能はありません。なので複数のスレッドで処理を平行して行うことになるかと。
sav_monster
会議室デビュー日: 2007/07/24
投稿数: 16
投稿日時: 2007-08-02 11:43
早速のご返信、まことにありがとうございます。
自分の無知さが恥ずかしいかぎりです。

HOSTS→DNS→netBIOSの優先順位とはしりませんでした。
助かります。

FWなどは考慮しています。
PingOK、NbtstaTでもPC名取得可能なPCにDns.GetHostByAddressをしたのですが、
取得できなかったのです・・。

もう一度試してみます!!


PINGの返す設定等は考慮済みです。
できるかぎり徹底していますし、もし通らないもがあるとしても
それは無視して考えます。
(そこまでの精度は求めないということですね)


一気に同じスレッドを立てるんですか・・・了解です。
その点も考慮し一度Dns.GetHostByAddressでプログラムを書いてみます。


本当にみなさん、ありがとうございました!!!

BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2007-08-03 09:14
解決済みでしょうか?

引用:

sav_monsterさんの書き込み (2007-08-02 11:43) より:

HOSTS→DNS→netBIOSの優先順位とはしりませんでした。


ちょっと誤解があるようです。
正確にはこちらの名前解決のフロー(中間よりやや下)を参照して下さい。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-03 10:06
引用:

BackDoorさんの書き込み (2007-08-03 09:14) より:
正確にはこちらの名前解決のフロー(中間よりやや下)を参照して下さい。



逆引きに関しては載ってませんね。
私の環境(Vista Ultimate)だと、
キャッシュしてるはずの状況でもNBNS投げるんですよね。
どうしてだろうなぁ。
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2007-08-03 10:51
脊髄レスで変なこと書きましたか?
途中からの流れは読んでませんが、最後に優先順位の話題が出てたので一部
誤りかと思った部分を指摘させて頂きました。

引用:

れいさんの書き込み (2007-08-03 10:06) より:

逆引きに関しては載ってませんね。



質問はIPアドレスが判っている状況でそのホスト名が知りたいという内容です。
IPアドレスがわかっている場合、通信先のセグメントまではIPルーティングに
よる通信が行われ、当該セグメント内ではARPからMACアドレスを知り通信が
行われます。
# 要するにDNSにあるような逆引きという概念はWindows上のIPアドレスを使用
# した通信にはありません。

通信の仕組みからは、最初の頃にJitta様が提示したping -aが最も妥当な方法
だと思います。
# .net系が判らないインフラ屋の意見ですが。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-03 11:13
引用:

BackDoorさんの書き込み (2007-08-03 10:51) より:
引用:

れいさんの書き込み (2007-08-03 10:06) より:
逆引きに関しては載ってませんね。





NetBios名前解決で逆引きって言わないような気もしますね。
なんていうんだろう?

引用:

質問はIPアドレスが判っている状況でそのホスト名が知りたいという内容です。



DNSホスト名でなく
NetBios名を知りたいそうです。
IPアドレスから。

引用:

IPアドレスがわかっている場合、通信先のセグメントまではIPルーティングに
よる通信が行われ、当該セグメント内ではARPからMACアドレスを知り通信が
行われます。
# 要するにDNSにあるような逆引きという概念はWindows上のIPアドレスを使用
# した通信にはありません。



んーとすみません。
通信が行われることとホスト名を知ることの関連が
よくわかりません。
(最近、理解力が落ちてる気がします。

通信したいのではなくて
ただNetBios名を知りたいだけなのだと思いますが。

なので
キャッシュを見るか、
IPにNBNSパケットを投げて返答をみるか、
WINSを使うか、
LMHOSTSを使うか、
4通りしか方法ないですよね。

># .net系が判らないインフラ屋の意見ですが。

.net関係ないですよね。
むしろ.netは関係を切りたがっているというか…。

[ メッセージ編集済み 編集者: れい 編集日時 2007-08-03 11:19 ]

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