アプリ版:「スタンプのみでお礼する」機能のリリースについて

すみません。どなたかご存知でしたら教えてください。
私はVBの初心者です。VB2005を使用しています。

IPアドレスを指定し、そのPCのコンピュータ名を取得したいと考えています。色々調べたところ、APIを呼び出さなければいけないところまではわかったのですが、その先がなかなか判明しません。

Myクラスを使うとローカルPC名は簡単に取得できるのですが、
リモートとなると、なかなかどのサイトにも乗っていません。

リモートPCはメールサーバや、WEBサーバではなく、ただのクライアントなので、DNS引きの取得方法では取得できないようです。

すみませんが、困っています。
よろしくお願いいたします。

A 回答 (4件)

既に回答されている方と殆ど似ていますがURLだけ・・・。



http://hiro.wankuma.com/VBNET2003/Network/Networ …

ネットワーク系のPGを作ったことがないので的外れかもしれません。
多分DNSのところで引っかかると思いますけど。^^;

リモート先のPCはいじることができないんですよね。
いじれるなら、サバクラ形式でデータのやりとりができる気がしますけど・・・。


お役に立てなくてすみません。
    • good
    • 0
この回答へのお礼

いえいえ。
どうもありがとうございます。
上記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

これを使って、リモートコンピュータに応用できないでしょうか?

お礼日時:2007/07/13 10:51

#3です。


連続投稿すみません。

あれから気になっていろいろ調べてみました。
http://support.microsoft.com/default.aspx?scid=k …
がNetBIOS系の取得方法。
でも、多分失敗すると思います。

で、技術者ページから探した結果できそうなWMIを使用した方法。
※同じ質問をしている方が居ました。
http://www.microsoft.com/japan/technet/scriptcen …
もしかしたら既に拝見になっているかもしれませんが、一番下のコードが使えそうです。

試したかったのですが、環境が簡単に作れるもので無いので全く実行していません。
本当に申し訳ないです。

頑張って下さい。
    • good
    • 0
この回答へのお礼

わざわざどうも、ありがとうございました!!
両方とも確認させていただきました!

で、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で実施したいのですが、
もう少し細かく教えていただいてもよろしいでしょうか?

すみませんが、よろしくお願いいたします。

お礼日時:2007/07/24 14:02

単純にこんなんとか。


(行頭のインデント用スペースはブラウザ表示用に全角を使ってます)

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
    • good
    • 0
この回答へのお礼

どうもありがとうございました!!
一度上記プログラムで実施してみました。

自分のIPアドレスをしてすると、正常にコンピュータ名が取れますが、
その他、他のクライアントのIPアドレスを入力すると、ホスト名ではなく、そのままIPアドレスが表示されてしまいます。

これはDNSで引けなかったので、そのまま表示していると思われます。
難しいです。

このプログラムは初心者の私には大変勉強になりました。
ありがとうございます!!

お礼日時:2007/07/11 16:11

ActiveDirectory(LDAP)とかドメイン参加してると簡単にホスト名を取得できるんですが...



たぶん、今の場合はワークグループも考慮したい
しかも各クライアント端末のコンピュータ名をIPアドレスから逆引きしたいと...

解決としては、NetBIOS関係を調べてみると幸せになれます
あと、C#ですがサンプルがあります

CodeZine
カテゴリ > Windows > C# > ネットワーク
NetBIOSネームサービスでネットワーク内の端末をリアルタイムに列挙する
[中級] NBNSプロトコルの解釈とパケットの送受信
http://codezine.jp/a/article/aid/192.aspx
    • good
    • 0
この回答へのお礼

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

やりたいことはNetbios系ですよね・・・。

お礼日時:2007/07/11 16:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!