tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVb6)時間制限ありping応答確認する方法
記事No16259
投稿日: 2016/10/03(Mon) 23:08
投稿者はさみ
Vb6のプログラムから、端末番号指定でPing送信を行い、1つのパケットの応答が1秒以内に返ってきたかどうかを判定するプログラムを教えてほしいです。
ちなみに、ネットではWin32_PingStatusclassを使うやり方を見つけましたが、私の方では上手くいきませんでした。

御回答よろしくお願いします。

[ツリー表示へ]
タイトルRe: Vb6)時間制限ありping応答確認する方法
記事No16261
投稿日: 2016/10/04(Tue) 10:14
投稿者魔界の仮面弁士
> 端末番号指定
ここでいう「端末番号」とは何を指していますか?
IPv6 アドレスのことでしょうか。IPv4 アドレスのことでしょうか。
それとも別の何か?


> Win32_PingStatusclassを使うやり方を見つけましたが、私の方では上手くいきませんでした。
Win32_PingStatusclass というのは
Win32_PingStatus クラスのことだと思いますが、
具体的には、何が問題になっているのでしょうか?

Option Explicit
Private Sub Command1_Click()
    
    Dim wql As String
    wql = "SELECT * FROM Win32_PingStatus" _
        & " WHERE (Address = '8.8.8.8' OR Address = 'google.co.jp' OR Address='www.microsoft.com' OR Address = 'hanatyan.sakura.ne.jp')" _
        & " AND TimeToLive=32" _
        & " AND BufferSize=64" _
        & " AND Timeout=1000" _
        & " AND TimestampRoute=0"

    Dim tm As Single
    tm = Timer

    Dim oSet As Object
    Set oSet = GetObject("winmgmts:").ExecQuery(wql)

    Dim o As Object, v As Variant
    Dim msg As String
    msg = ""
    For Each o In oSet
        If o.StatusCode = 0 Then
            msg = msg & (vbCrLf & "◎ " & o.Address & " => [" & o.ProtocolAddress & "] " & CStr(o.ResponseTime) & "ミリ秒, TTL=" & o.ResponseTimeToLive)
        Else
            msg = msg & (vbCrLf & "× " & o.Address & " => エラー" & o.StatusCode)
        End If
        If IsArray(o.TimeStampRecordAddress) Then
            For Each v In o.TimeStampRecordAddress
                msg = msg & (vbCrLf & vbTab & v)
            Next
        End If
    Next
    msg = ("実行時間:" & Format(Timer - tm, "0.000000") & "秒") & msg

    MsgBox msg, vbInformation
End Sub



WMI の Win32_PingStatus 以外の手段としては、
WMI の netDiagnostics クラスの Ping メソッドを使うとか、
ICMP.DLL の IcmpSendEcho API を呼ぶといった手がありますが、
何が問題になっているのかを示して貰わないと、代案も立てられません。


どうしても駄目なら、面倒でも raw socket を投げるか…。

[ツリー表示へ]