| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1958 人关注过本帖, 1 人收藏
标题:想做一个PING监控的软件
只看楼主 加入收藏
取消关键字高亮
jiaqi11
Rank: 2
等 级:论坛游民
帖 子:41
专家分:20
注 册:2011-10-11
结帖率:66.67%
收藏(1)
已结贴  问题点数:20 回复次数:20 
想做一个PING监控的软件
想做一个PING监控的软件
本来写了一段代码如下:
store "8.8.8.8" to pinghost
Run /n7 cmd /c ping -n 10  -w 10 &pinghost>PING.TXT
wait "" timeout 15
CREATE TABLE PING(AA C(80))
APPE FROM PING.TXT deli with tab
然后根据PING.DBF这个表的内容的倒数第四条来提取丢包率,根据倒数第二条提取延时。
但是后来发现,不同的OS,所产生的PING.DBF内容不一样。

前阵子群里有人给了个方案:
ip_h=CREATEOBJECT(")
ip_h.Ping("192.1.1.251")
能再具体说说,怎么用吗,用这个怎么才能提取到,是否能PING通,延时多少?
搜索更多相关主题的帖子: store 监控 软件 倒数 
2015-01-23 11:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
PING是用ICMP协议,用API就可以。
2015-01-23 11:48
jiaqi11
Rank: 2
等 级:论坛游民
帖 子:41
专家分:20
注 册:2011-10-11
收藏
得分:0 
能再具体点吗?
2015-01-23 11:58
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
用API可以试试,但PING功能要求对方要开放使用ICMP协议才有效,现在好多防火墙禁止使用ICMP协议。
2015-01-23 12:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
为什么不考虑一下是否真要用ping?

授人以渔,不授人以鱼。
2015-01-23 12:23
jiaqi11
Rank: 2
等 级:论坛游民
帖 子:41
专家分:20
注 册:2011-10-11
收藏
得分:0 
啊这个会了ip_h.Ping("192.1.1.251")的返回值如果是真,就是通的,如果是否,就是不通。。
有谁知道怎么提取延时的值吗?
2015-01-24 11:01
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用jiaqi11在2015-1-24 11:01:06的发言:

啊这个会了ip_h.Ping("192.1.1.251")的返回值如果是真,就是通的,如果是否,就是不通。。
有谁知道怎么提取延时的值吗?

看看 有无接收返回的报文的方法。
有一点要注意,NET4COM 是.NET的东西,有些系统可能没安装.NET。
2015-01-24 16:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
CLEAR
DECLARE LONG WSAStartup          IN Ws2_32 LONG, STRING@
DECLARE LONG WSACleanup          IN Ws2_32
DECLARE LONG socket              IN Ws2_32 LONG, LONG, LONG 
DECLARE LONG closesocket         IN Ws2_32 LONG
DECLARE LONG inet_addr           IN Ws2_32 STRING@
DECLARE LONG inet_ntoa           IN Ws2_32 LONG
DECLARE LONG setsockopt          IN Ws2_32 LONG, LONG, LONG, LONG@, LONG
DECLARE LONG sendto              IN Ws2_32 LONG, STRING@, LONG, LONG, STRING@, LONG
DECLARE LONG recvfrom            IN Ws2_32 LONG, STRING@, LONG, LONG, STRING@, LONG@
DECLARE LONG WSAGetLastError     IN Ws2_32
DECLARE LONG GetCurrentProcessId IN Kernel32
DECLARE LONG GetTickCount        IN Kernel32
DECLARE LONG Sleep               IN Kernel32 LONG

_Ping("180.97.33.107")
*_Ping("127.0.0.1")

CLEAR DLLS
RETURN

FUNCTION _Ping(cDestIP)
    LOCAL WsaData, IcmpHdr, SockAddr_Dest, SockAddr_From
    LOCAL i, hSocket, nTimeout, cRecvBuf, cIP, nVal, nTime
    WsaData  = REPLICATE(0h00, 398)
    WSAStartup(0x202, @WsaData)
    hSocket = socket(2, 3, 1)
    IF hSocket != -1
        nTimeout = 1000
        setsockopt(hSocket, 0xFFFF, 0x1006, @nTimeout, 4)
        cRecvBuf = REPLICATE(0h00, 1024)
        SockAddr_From = REPLICATE(0h00, 16)
        SockAddr_Dest = 0h02000000 + BINTOC(inet_addr(@cDestIP), "4RS") + 0h0000000000000000
        FOR i = 1 TO 4
            IcmpHdr = 0h08000000;    && 请求应答
                    + LEFT(BINTOC(GetCurrentProcessId(), "4RS"), 2);
                    + BINTOC(i-1, "2RS");
                    + BINTOC(GetTickCount(), "4RS")
            IcmpHdr = STUFF(IcmpHdr, 3, 2, LEFT(BINTOC(_CheckSum(IcmpHdr, LEN(IcmpHdr)), "4RS"), 2))
            IF sendto(hSocket, @IcmpHdr, LEN(IcmpHdr), 0, @SockAddr_Dest, LEN(SockAddr_Dest)) != -1
                nVal = LEN(SockAddr_From)
                nVal = recvfrom(hSocket, @cRecvBuf, LEN(cRecvBuf), 0, @SockAddr_From, @nVal)
                nTime = GetTickCount()
                IF nVal != -1
                    IF nVal >= (20 + LEN(IcmpHdr))
                        cIP = SYS(2600, inet_ntoa(CTOBIN(SUBSTR(cRecvBuf, 13, 4), "4RS")), 16)
                        cIP = LEFT(cIP, AT(0h00, cIP) - 1)
                        IF (ASC(SUBSTR(cRecvBuf, 10, 1)) == 1) AND ;    && 是ICMP协议
                           (cIP == cDestIP) AND ;                       
                           (ASC(SUBSTR(cRecvBuf, 21, 1)) == 0) AND ;    && 响应应答
                           (CTOBIN(SUBSTR(cRecvBuf, 25, 2), "2RS") == GetCurrentProcessId())
                            nTime = nTime - CTOBIN(SUBSTR(cRecvBuf, 29, 4), "4RS")
                                * 来自 180.97.33.107 的回复: 字节=32 时间=46ms TTL=53
                            ? "来自 " + cIP
                            ?? " 的回复: 字节=" + TRANSFORM(nVal)
                            ?? " 时间" + IIF(nTime < 1, "<1", "=" + TRANSFORM(nTime)) + "ms"
                            ?? " TTL=" + TRANSFORM(ASC(SUBSTR(cRecvBuf, 9, 1)))    && IP头ip_ttl
                            Sleep(1000)
                        ENDIF
                    ENDIF
                ELSE
                    nVal = WSAGetLastError()
                    IF nVal == 10060
                        ? "请求超时"
                    ELSE
                        ? "Error: " + TRANSFORM(nVal)
                    ENDIF
                ENDIF
            ENDIF
        ENDFOR
    ELSE
        nVal = WSAGetLastError()
        IF nVal == 10013
            ? "因权限被拒,可尝试以管理员身份运行主程序。"
        ELSE
            ? "Error: " + TRANSFORM(nVal)
        ENDIF
    ENDIF
    closesocket(hSocket)
    WSACleanup()
ENDFUNC

    * 校验和
FUNCTION _CheckSum(cBuffer, nSize)
    LOCAL i, nCheckSum
    i = 1
    nCheckSum = 0
    DO WHILE nSize > 1
        nCheckSum = nCheckSum + CTOBIN(SUBSTR(cBuffer, i, 2) + 0h0000, "4RS")
        i = i + 2
        nSIze = nSIze - 2
    ENDDO
    IF nSize == 1
        nCheckSum = nCheckSum + ASC(SUBSTR(cBuffer, i, 1))
    ENDIF
    nCheckSum = BITRSHIFT(nCheckSum, 16) + BITAND(nCheckSum, 0x0000FFFF)
    nCheckSum = nCheckSum + BITRSHIFT(nCheckSum, 16)
    RETURN BITAND(BITNOT(nCheckSum), 0x0000FFFF)
ENDFUNC
2015-01-25 17:25
jiaqi11
Rank: 2
等 级:论坛游民
帖 子:41
专家分:20
注 册:2011-10-11
收藏
得分:0 
WsaData  = REPLICATE(0h00,398)

说什么函数缺少“)”啊。。。。这个括号不是正好是1对吗?
全角半角我也看了,也对的呀。。。奇怪
2015-01-26 11:37
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
复制粘贴可能有乱字符,删除这行重新输入试试。
2015-01-26 11:59
快速回复:想做一个PING监控的软件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025740 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved