zjg2003 发表于 2019-7-11 15:26:45

关于Ping 函数的BUG问题请教

假如我的路由器为: 192.168.1.1 ,并且一直正常使用。
Local $var = Ping("192.168.1.1", 250)
If $var ThenMsgBox(0,"状态-成功","收发时间间隔:" & $var & "毫秒")






网络正常的情况下运行以上代码正常,会弹出提示相应的延时时间1MS或者2MS不等,这属于正常情况。

但是当我拔掉网线再行测试的时候,依然 会弹出提示相应的延时时间 为 1MS ,且每次都是1MS ,这个就不正常了。

而且 @error 值是为0 ,这个也是正常的时候才有的值。论坛搜索了一下,Win7 也有这个情况,只看到说在XP系统下不会出现。

系统环境:win10 x64

Au3版本:3.3.7.15

zjg2003 发表于 2019-7-11 15:56:22

英文网站下载 v3.3.14.5 这个版本测试,拔掉网线 这个问题正常了

但是又出现了另外一个问题,ping 一个电信的 DNS一直显示结果通不出

在系统CMD下ping正常, 低版本的AU3 ping 也正常

同时不管高低版本的AU3 ping 百度 ,移动DNS ,内网IP都正常

zch11230 发表于 2019-7-11 17:01:43

本帖最后由 zch11230 于 2019-7-11 17:09 编辑

win10 x64 3.3.13.2
测试在ping 114.114.114.114时确实有你说的这个现象,其它的IP又正常,不知道你是不是和我一样的问题:
用autoit自带的Ping icmp包字节为5,error为2结果为0,cmd默认ping正常回显,icmp包字节32, 改为ping 114.114.114.114 -l 5同样的超时,其实有响应包返回,但是校验值对不上,只有在32字节的时候能对上。不过在Linux下带5个包正常。

zjg2003 发表于 2019-7-11 19:46:05

zch11230 发表于 2019-7-11 17:01
win10 x64 3.3.13.2
测试在ping 114.114.114.114时确实有你说的这个现象,其它的IP又正常,不知道你是不是 ...

是的,测试的结果跟你一样,请问一下你这个问题有解决方法吗?

tarcy118 发表于 2019-7-12 00:07:02

不错支持一下

zch11230 发表于 2019-7-12 12:01:49

zjg2003 发表于 2019-7-11 19:46
是的,测试的结果跟你一样,请问一下你这个问题有解决方法吗?

我觉得是服务器的问题了,只认32字节的包。用wmi试下看能解决你的需求不。

__wmi_Win32_PingStatus("114.114.114.114")
Func __wmi_Win32_PingStatus($server)
        Local $colItems = ""
        Local $strComputer = "localhost"

        Local $Output = ""
        $Output &= "Computer: " & $strComputer & @CRLF
        $Output &= "==========================================" & @CRLF
        Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\ROOT\CIMV2")
        $colItems = $objWMIService.ExecQuery("select * from Win32_PingStatus where address ='" & $server & "'")

        If IsObj($colItems) Then
                For $objItem In $colItems
                        $Output &= "Address: " & $objItem.Address & @CRLF
                        $Output &= "BufferSize: " & $objItem.BufferSize & @CRLF
                        $Output &= "NoFragmentation: " & $objItem.NoFragmentation & @CRLF
                        $Output &= "PrimaryAddressResolutionStatus: " & $objItem.PrimaryAddressResolutionStatus & @CRLF
                        $Output &= "ProtocolAddress: " & $objItem.ProtocolAddress & @CRLF
                        $Output &= "ProtocolAddressResolved: " & $objItem.ProtocolAddressResolved & @CRLF
                        $Output &= "RecordRoute: " & $objItem.RecordRoute & @CRLF
                        $Output &= "ReplyInconsistency: " & $objItem.ReplyInconsistency & @CRLF
                        $Output &= "ReplySize: " & $objItem.ReplySize & @CRLF
                        $Output &= "ResolveAddressNames: " & $objItem.ResolveAddressNames & @CRLF
                        $Output &= "ResponseTime: " & $objItem.ResponseTime & @CRLF
                        $Output &= "ResponseTimeToLive: " & $objItem.ResponseTimeToLive & @CRLF
                        Local $strRouteRecord = $objItem.RouteRecord(0)
                        $Output &= "RouteRecord: " & $strRouteRecord & @CRLF
                        Local $strRouteRecordResolved = $objItem.RouteRecordResolved(0)
                        $Output &= "RouteRecordResolved: " & $strRouteRecordResolved & @CRLF
                        $Output &= "SourceRoute: " & $objItem.SourceRoute & @CRLF
                        $Output &= "SourceRouteType: " & $objItem.SourceRouteType & @CRLF
                        $Output &= "StatusCode: " & $objItem.StatusCode & @CRLF
                        $Output &= "Timeout: " & $objItem.Timeout & @CRLF
                        Local $strTimeStampRecord = $objItem.TimeStampRecord(0)
                        $Output &= "TimeStampRecord: " & $strTimeStampRecord & @CRLF
                        Local $strTimeStampRecordAddress = $objItem.TimeStampRecordAddress(0)
                        $Output &= "TimeStampRecordAddress: " & $strTimeStampRecordAddress & @CRLF
                        Local $strTimeStampRecordAddressResolved = $objItem.TimeStampRecordAddressResolved(0)
                        $Output &= "TimeStampRecordAddressResolved: " & $strTimeStampRecordAddressResolved & @CRLF
                        $Output &= "TimestampRoute: " & $objItem.TimestampRoute & @CRLF
                        $Output &= "TimeToLive: " & $objItem.TimeToLive & @CRLF
                        $Output &= "TypeofService: " & $objItem.TypeofService & @CRLF
                        If MsgBox(1, "WMI Output", $Output) = 2 Then ExitLoop
                        $Output = ""
                Next
        Else
                MsgBox(0, "WMI 输出", "没有在类 " & "Win32_PingStatus" & "中找到WMI对象")
        EndIf
EndFunc   ;==>__wmi_Win32_PingStatus

zjg2003 发表于 2019-7-13 15:50:11

本帖最后由 zjg2003 于 2019-7-13 16:14 编辑

zch11230 发表于 2019-7-12 12:01
我觉得是服务器的问题了,只认32字节的包。用wmi试下看能解决你的需求不。
感谢兄弟你的回复,直接以.au3执行时正常,
Au3版本:3.3.7.15编译后运行则会报“表达式错误”
Au3版本:3.3.14.2编译后OK,估计3.3.7.15这个旧版存在一定BUG

非常感谢,这个问题完美解决
本想主题标题也改一下,但是保存不了


lin6051 发表于 2019-7-14 09:42:05

zjg2003 发表于 2019-7-13 15:50
感谢兄弟你的回复,直接以.au3执行时正常,
Au3版本:3.3.7.15编译后运行则会报“表达式错误”
Au3版 ...

http://www.autoitx.com/thread-51981-1-1.html

tarcy118 发表于 2019-7-15 00:19:49

不错支持一下
页: [1]
查看完整版本: 关于Ping 函数的BUG问题请教