Pingの実行

特定のパソコンなどとネットワーク接続がされているか確認する場合、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を発行し、結果を表示

コメント