特定のパソコンなどとネットワーク接続がされているか確認する場合、Pingを使用して確認します。

Pingコマンドを発行して結果を表示するサンプルプログラムになります。
【サンプルプログラム】
Option Explicit
Sub Ping()
Dim result As Long
result = PingCommand("192.168.1.1")
MsgBox PingResult(result)
End Sub
Pingコマンドを発行するプログラムです。引数にIPアドレス(例:192.168.1.1)、ホスト名(例:www.yahoo.co.jp)を指定します。成否は戻り値で確認します。
【関数化】
' ------------------------------------------------------------
' 説明:Pingコマンドを発行
' 引数:1:IPアドレス(例:192.168.1.1)、ホスト名(例:www.yahoo.co.jp)名
' 戻値:pingの戻りコード 0:成功、その他は PingResult() 参照
' ------------------------------------------------------------
Function PingCommand(addr As String) As Long
Dim wmiLocator As WbemScripting.SWbemLocator
Dim swService As SWbemServices
Dim swObjSet As SWbemObjectSet
Dim swPingObj As SWbemObjectEx
Set wmiLocator = New WbemScripting.SWbemLocator
Set swService = wmiLocator.ConnectServer()
' 対象はIPアドレス or コンピューター名(ホスト名)で指定
Set swObjSet = swService.ExecQuery("Select * From Win32_PingStatus Where Address = '" & addr & "'")
'Pingの実行と結果を取得
For Each swPingObj In swObjSet
PingCommand = swPingObj.StatusCode
Next
Set wmiLocator = Nothing
Set swService = Nothing
Set swObjSet = Nothing
End Function
Pingコマンドを発行した結果を引数にして、結果を文字列で取得します。
' ------------------------------------------------------------
' 説明:Pingコマンドの戻り値を文字列で取得
' 引数:1:pingの戻りコード
' 戻値:pingの結果
' ------------------------------------------------------------
Function PingResult(result As Long) As String
Select Case result
Case 0: PingResult = "成功" ' Success
Case 11001: PingResult = "バッファが小さすぎます" ' Buffer Too Small
Case 11002: PingResult = "宛先ネットに到達不能" ' Destination Net Unreachable
Case 11003: PingResult = "宛先ホストに到達できません" ' Destination Host Unreachable
Case 11004: PingResult = "宛先プロトコルに到達できません"' Destination Protocol Unreachable
Case 11005: PingResult = "宛先ポートに到達できません" ' Destination Port Unreachable
Case 11006: PingResult = "リソースがありません" ' No Resources
Case 11007: PingResult = "不正なオプション" ' Bad Option
Case 11008: PingResult = "ハードウェアエラー" ' Hardware Error
Case 11009: PingResult = "パケットが大きすぎます" ' Packet Too Big
Case 11010: PingResult = "リクエストがタイムアウトしました" ' Request Timed Out
Case 11011: PingResult = "不正なリクエスト" ' Bad Request
Case 11012: PingResult = "悪いルート" ' Bad Route
Case 11013: PingResult = "転送中にTTLが期限切れになりました " ' TTL Expired Transit
Case 11014: PingResult = "フラグメントの再組み立て時間が超過 " ' TTL Expired Reassembly
Case 11015: PingResult = "パラメータの問題" ' Parameter Problem
Case 11016: PingResult = "ソースクエンチ" ' Source Quench
Case 11017: PingResult = "オプションが大きすぎます" ' Option Too Big
Case 11018: PingResult = "間違った宛先" ' Bad Destination
Case 11032: PingResult = "IPSEC のネゴシエーション" ' Negotiating IPSEC
Case 11050: PingResult = "一般的な障害" ' General Failure
Case Else: PingResult = "不明" ' Unknown
End Select
End Function
戻り値の詳細は、以下のリンクで確認できます。
https://learn.microsoft.com/ja-jp/previous-versions/windows/desktop/wmipicmp/win32-pingstatus
【補足】
Microsoft WMI Scripting V1.2 Library を使用しています。
初期設定では、エラーが発生するので、参照設定「Microsoft WMI Scripting V1.2 Library」の設定
が必要です。
IPアドレスのリストを作成して、まとめてpingを発行するには、以下を参照してください。
IPアドレスのリストにpingを発行し、結果を表示


コメント