• ベストアンサー

リモートコンピュータのPC名を取得したいのですが・・・・。

すみません。どなたかご存知でしたら教えてください。 私はVBの初心者です。VB2005を使用しています。 IPアドレスを指定し、そのPCのコンピュータ名を取得したいと考えています。色々調べたところ、APIを呼び出さなければいけないところまではわかったのですが、その先がなかなか判明しません。 Myクラスを使うとローカルPC名は簡単に取得できるのですが、 リモートとなると、なかなかどのサイトにも乗っていません。 リモートPCはメールサーバや、WEBサーバではなく、ただのクライアントなので、DNS引きの取得方法では取得できないようです。 すみませんが、困っています。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

既に回答されている方と殆ど似ていますがURLだけ・・・。 http://hiro.wankuma.com/VBNET2003/Network/Network03.htm ネットワーク系のPGを作ったことがないので的外れかもしれません。 多分DNSのところで引っかかると思いますけど。^^; リモート先のPCはいじることができないんですよね。 いじれるなら、サバクラ形式でデータのやりとりができる気がしますけど・・・。 お役に立てなくてすみません。

sav_moster
質問者

お礼

いえいえ。 どうもありがとうございます。 上記URLで確認したところ、やはりDNSを使用しているので、 クライアント名は取得できませんでした。 調べていたところ、WMIを使えば、なんとかできるかもしれません。 下記のプログラムですが、ローカル名を取得するものです。 (丸々コピーです) Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate,(RemoteShutdown)}").ExecQuery("select * from Win32_OperatingSystem where Primary=true") for each OpSys in OpSysSet WScript.Echo OpSys.CSName'コンピュータ名 WScript.Echo OpSys.Caption'OSの種類 Next これを使って、リモートコンピュータに応用できないでしょうか?

その他の回答 (3)

回答No.4

#3です。 連続投稿すみません。 あれから気になっていろいろ調べてみました。 http://support.microsoft.com/default.aspx?scid=kb;ja;302656 がNetBIOS系の取得方法。 でも、多分失敗すると思います。 で、技術者ページから探した結果できそうなWMIを使用した方法。 ※同じ質問をしている方が居ました。 http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/apr06/hey0425.mspx もしかしたら既に拝見になっているかもしれませんが、一番下のコードが使えそうです。 試したかったのですが、環境が簡単に作れるもので無いので全く実行していません。 本当に申し訳ないです。 頑張って下さい。

sav_moster
質問者

お礼

わざわざどうも、ありがとうございました!! 両方とも確認させていただきました! で、2番目のURLなんですが、 strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem") For Each objItem in colItems Wscript.Echo objItem.Name Next となっていました。リモートに接続する時は、ドットとIPアドレスにするということでしてみたのですが、エラーが返ってきます・・・orz 難しいですね。 「書き込みできません。getobjectエラー」だそうです。 やり方はテキストメモに貼り付けて、拡張子をvbsにしただけです。 やり方が間違ってますか? 初心者ですみません。できたらVB2005で実施したいのですが、 もう少し細かく教えていただいてもよろしいでしょうか? すみませんが、よろしくお願いいたします。

回答No.2

単純にこんなんとか。 (行頭のインデント用スペースはブラウザ表示用に全角を使ってます) Imports System.Net Imports System.Net.NetworkInformation Module Module1   Sub Main()     Dim ipAddr As IPAddress = IPAddress.Parse("192.168.3.1")     Dim hostEntry As IPHostEntry = Nothing     hostEntry = Dns.GetHostEntry(ipAddr)     Console.Write(hostEntry.HostName)     Console.ReadLine()   End Sub End Module

sav_moster
質問者

お礼

どうもありがとうございました!! 一度上記プログラムで実施してみました。 自分のIPアドレスをしてすると、正常にコンピュータ名が取れますが、 その他、他のクライアントのIPアドレスを入力すると、ホスト名ではなく、そのままIPアドレスが表示されてしまいます。 これはDNSで引けなかったので、そのまま表示していると思われます。 難しいです。 このプログラムは初心者の私には大変勉強になりました。 ありがとうございます!!

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

ActiveDirectory(LDAP)とかドメイン参加してると簡単にホスト名を取得できるんですが... たぶん、今の場合はワークグループも考慮したい しかも各クライアント端末のコンピュータ名をIPアドレスから逆引きしたいと... 解決としては、NetBIOS関係を調べてみると幸せになれます あと、C#ですがサンプルがあります CodeZine カテゴリ > Windows > C# > ネットワーク NetBIOSネームサービスでネットワーク内の端末をリアルタイムに列挙する [中級] NBNSプロトコルの解釈とパケットの送受信 http://codezine.jp/a/article/aid/192.aspx

sav_moster
質問者

お礼

どうもありがとうございました。 C#はまったくわからないのですが、関数的にはよく似ていると思うので 一度調査してみます!! やりたいことはNetbios系ですよね・・・。

関連するQ&A

専門家に質問してみよう