关于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
英文网站下载 v3.3.14.5 这个版本测试,拔掉网线 这个问题正常了
但是又出现了另外一个问题,ping 一个电信的 DNS一直显示结果通不出
在系统CMD下ping正常, 低版本的AU3 ping 也正常
同时不管高低版本的AU3 ping 百度 ,移动DNS ,内网IP都正常 本帖最后由 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个包正常。 zch11230 发表于 2019-7-11 17:01
win10 x64 3.3.13.2
测试在ping 114.114.114.114时确实有你说的这个现象,其它的IP又正常,不知道你是不是 ...
是的,测试的结果跟你一样,请问一下你这个问题有解决方法吗? 不错支持一下 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 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
非常感谢,这个问题完美解决
本想主题标题也改一下,但是保存不了
zjg2003 发表于 2019-7-13 15:50
感谢兄弟你的回复,直接以.au3执行时正常,
Au3版本:3.3.7.15编译后运行则会报“表达式错误”
Au3版 ...
http://www.autoitx.com/thread-51981-1-1.html 不错支持一下
页:
[1]