找回密码
 加入
搜索
查看: 2172|回复: 9

[网络通信] 关于Ping 函数的BUG问题请教

[复制链接]
发表于 2019-7-11 15:26:45 | 显示全部楼层 |阅读模式
假如我的路由器为: 192.168.1.1 ,并且一直正常使用。
Local $var = Ping("192.168.1.1", 250)
If $var Then  MsgBox(0,"状态-成功","收发时间间隔:" & $var & "毫秒")






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

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

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

系统环境:win10 x64

Au3版本:3.3.7.15
 楼主| 发表于 2019-7-11 15:56:22 | 显示全部楼层
英文网站下载 v3.3.14.5 这个版本测试,拔掉网线 这个问题正常了

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

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

同时不管高低版本的AU3 ping 百度 ,移动DNS ,内网IP都正常
发表于 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个包正常。
 楼主| 发表于 2019-7-11 19:46:05 | 显示全部楼层
zch11230 发表于 2019-7-11 17:01
win10 x64 3.3.13.2
测试在ping 114.114.114.114时确实有你说的这个现象,其它的IP又正常,不知道你是不是 ...

是的,测试的结果跟你一样,请问一下你这个问题有解决方法吗?
发表于 2019-7-12 00:07:02 | 显示全部楼层
不错支持一下
发表于 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
 楼主| 发表于 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

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


发表于 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

点评

谢谢,这个我也看过,测试发现这样得出的结果不是很准(延时时间),因我这是同时测试多个自定义的服务器并同时显示具体的延时时间的  发表于 2019-7-15 08:40
发表于 2019-7-15 00:19:49 | 显示全部楼层
不错支持一下
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-20 17:24 , Processed in 0.072805 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表