- PR -

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

投稿者投稿内容
sav_monster
会議室デビュー日: 2007/07/24
投稿数: 16
投稿日時: 2007-08-01 16:04
本当にみなさん、ありがとうございます。

Ping /aはホスト名に解決できませんでした。
このコマンドもDNSから引っ張ってきているんでしょうか?

nbtstatのコマンドのようにコンピュータ名を出せないものでしょうか?
ただNbtstaは多くのPCに対して実行すると、時間が膨大にかかります。

以前、コマンドコンソールで実行すればいいかと思っていたのですが、
PingがMyクラスによって、簡単にできるようになったので、
コンピュータ名の取得も簡単にできないものかと試行錯誤しています。



gethostbyaddr をP/Invokeとはどういう意味でしょうか?
無知でほんとにすみません・・・・。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-01 16:16
引用:

sav_monsterさんの書き込み (2007-08-01 14:50) より:
それから、リモートコンピュータ名というのは、イントラネット内につながっている
普通のクライアントPCのコンピュータ名をVBで、IPアドレス指定で取得したいのです。



その「普通のクライアントPCのコンピュータ名」というのは
どのプロトコルでのコンピューター名前ですか?

コンピューターのシステムのプロパティで出てくる名前なら
DNSかNetBiosかNetBeuiでの名前ですが、
それでいいのですか?

引用:

AD環境やワーキンググループなど、環境はいろいろなので、DNS解決はできません。



ADならDNS、ワークグループならNetBiosというのが普通だと思います。
どんな環境でも取得できる方法はありません。
DNS使わないクライアントはNetBiosで解決しなければいけませんし、
NetBiosでの名前登録を行わないよう設定されているのでしたら
DNSで問い合わせなければなりません。
また、DNSにもNetBiosにも名前を登録しないことも可能です。
その場合は解決できません。
sav_monster
会議室デビュー日: 2007/07/24
投稿数: 16
投稿日時: 2007-08-01 16:20
早速のご回答、まことにありがとうございます。

>>コンピューターのシステムのプロパティで出てくる名前なら
>>DNSかNetBiosかNetBeuiでの名前ですが、
>>それでいいのですか?

以前はNbtstaコマンドでクライアントPCのコンピュータ名を取得していました。
これは、(たぶん)Netbios名を取得していたと思います。

ですので、NetBiosの名前で問題ないです。NetBeuiというのも有効なんでしょうか?
ちょっと存知ないです・・・。
ご回答いただいているように、コンピュータのシステムのプロパティにでてくる名前で十分です。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-01 16:25
引用:

ちゃっぴさんの書き込み (2007-08-01 15:52) より:
gethostbyaddr をP/Invoke してやるとか。



Invokeしなくても
Dns.GetHostByAddressはNetBios名を返してくれたように思います。

れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-01 16:32
引用:

sav_monsterさんの書き込み (2007-08-01 16:20) より:
ご回答いただいているように、コンピュータのシステムのプロパティにでてくる名前で



ではDns.GetHostByAddressを試してください。
だめならgethostbyaddrをInvokeしてください。
それでもだめならNbtstatしてください。
それでもだめなら、私にはわかりません。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-08-01 18:02
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1945938&SiteID=7

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-08-01 18:20
netbios 名の取得には
LMHOSTS にエントリをあらかじめ追加しておく、
WINS サーバを立てて PC を登録しておく、
ブロードキャストを流して返答を待つ
をしないと取得できないと思います。

だから nbtstat で時間がかかる。
ブロードキャストを使うということはセグメントをまたぐと使えない。
というのも気にしておく必要がありますね。
_________________
かるあ のメモスニペット
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-08-01 19:59
引用:

Dns.GetHostByAddressはNetBios名を返してくれたように思います。



確認したんですが。
Dns.GetHostByAddressも
Dns.GetHostEntryもNetBios名を返してくれますね。
NBNSパケットをターゲットに投げてくれてました。

引用:

かるあさんの書き込み (2007-08-01 18:20) より:
netbios 名の取得には
LMHOSTS にエントリをあらかじめ追加しておく、
WINS サーバを立てて PC を登録しておく、
ブロードキャストを流して返答を待つ
をしないと取得できないと思います。



それは名前からIPを解決したい場合や
名前もわからないときですね。

今回はIPがわかってますから、
ブロードキャストの必要はないですね。
IPにNBNSパケットを飛ばすだけでOKです。

引用:

ブロードキャストを使うということはセグメントをまたぐと使えない。



ですので、セグメントもまたげますね。
またげないのはブラウジングやブロードキャストですから。

MSDNフォーラムの方で
>ただ、調査したいクライアントの数が膨大なため、DOSコマンドのPING、Nbtstaを使用するとかなり時間がかかります。

とかかれていますが、どのくらいの数なんでしょうか。
GetHostByAddressを同期で呼ぶと1秒くらいはかかりますから
100ぐらいでもうかなりきついですね。
自分でSocketで飛ばすにしても、
たくさんあったら非同期でたくさん飛ばさないとだめですね。



[ メッセージ編集済み 編集者: れい 編集日時 2007-08-01 20:00 ]

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