100求助一个监测网卡的问题!请高手不吝赐教!在线等待!

时间:2022-12-05 20:11:12
假如有一台机器通过ADSL连接到Internet,现在需要编写一个小的模块来实时监测网络是否畅通。
应该如何监测?是否可以通过监测网卡来获得目前的网络状况?如果不能通过监测网卡来获得,那么有什么好的办法?


    谢谢!

9 个解决方案

#1


用PING 命令就明白了

#2


ICMP to assert the statement

#3


有些程序是间隔性地向某个(些)地址发出ICMP包,如果能收到应答就表明网络是通的。

#4


现在主要是要写一段小程序来实现对当前网络状况的监控

#5



To:roland_c
    如果周期性的向某个地址发送ICMP包,但是如果这个地址出了问题,就无法得到真实的网络连接状况。而且有些会禁掉ICMP包。

    能不能通过监测网卡来获得网络的连接状况?

#6


通过网卡来实行监测就我所知道的是不行的。这些ICMP包的目标地址当然是你预先测试过并且确认会返回ICMP应答的,而且一般来说,要检测的话,不会是只向一个地址发送ICMP包,一般可多准备几个,三五个,只要有一个能返回应答就可以表明网络是通的。

#7


1)用PING,有些公开的网站没有禁止。

2)如果PING被禁止,那么采用HTTP,绝对不会被禁止的。

如果你用CB或者DELPHI,抓一个Http控件,目标设置为大的网站,如 sina,

然后编写几行代码就可以尝试连接该网站主页,

检查返回的代码,如果是网络故障,地址不能解析等,基本判断为未连接到Internet,

如果返回为:请求数据失败,或者对方Server 忙,那么再次请求,一般三次都不成功就可以判断

未连接到Internet。


3)WINDOWS API有个函数是检查Internet连接状态的,我在局域网和拨号都测试过,

你可以试试:
下面是我的CB代码:

         #include <wininet.h>

   DWORD dwFlag;
   bool netLink = InternetGetConnectedState(&dwFlag,0);

//   ---------检查是否连接-------------------------------------------
   if( netLink )
                                          Label4->Caption="在线"; //
   else                                   Label4->Caption="未在线";

// 网络配置
   if(dwFlag & INTERNET_CONNECTION_MODEM) Label1->Caption="√ Yes"; //MODEM连接
   else                                   Label1->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_LAN)   Label2->Caption="√ Yes"; //LAN连接
   else                                   Label2->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_PROXY) Label3->Caption="√ Yes"; //代理连接
   else                                   Label3->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_OFFLINE) Label5->Caption="√ Yes";//离线。注:不好用!
   else                                     Label5->Caption="× No";
   if(dwFlag & INTERNET_RAS_INSTALLED)    Label6->Caption="√ Yes";
   else                                   Label6->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_CONFIGURED) Label7->Caption="√ Yes";
   else                                        Label7->Caption="× No";

#8


不太好弄

#9


send icpm echo package can get current network status.
http://search.csdn.net/Expert/topic/1388/1388048.xml?temp=.8345148

#1


用PING 命令就明白了

#2


ICMP to assert the statement

#3


有些程序是间隔性地向某个(些)地址发出ICMP包,如果能收到应答就表明网络是通的。

#4


现在主要是要写一段小程序来实现对当前网络状况的监控

#5



To:roland_c
    如果周期性的向某个地址发送ICMP包,但是如果这个地址出了问题,就无法得到真实的网络连接状况。而且有些会禁掉ICMP包。

    能不能通过监测网卡来获得网络的连接状况?

#6


通过网卡来实行监测就我所知道的是不行的。这些ICMP包的目标地址当然是你预先测试过并且确认会返回ICMP应答的,而且一般来说,要检测的话,不会是只向一个地址发送ICMP包,一般可多准备几个,三五个,只要有一个能返回应答就可以表明网络是通的。

#7


1)用PING,有些公开的网站没有禁止。

2)如果PING被禁止,那么采用HTTP,绝对不会被禁止的。

如果你用CB或者DELPHI,抓一个Http控件,目标设置为大的网站,如 sina,

然后编写几行代码就可以尝试连接该网站主页,

检查返回的代码,如果是网络故障,地址不能解析等,基本判断为未连接到Internet,

如果返回为:请求数据失败,或者对方Server 忙,那么再次请求,一般三次都不成功就可以判断

未连接到Internet。


3)WINDOWS API有个函数是检查Internet连接状态的,我在局域网和拨号都测试过,

你可以试试:
下面是我的CB代码:

         #include <wininet.h>

   DWORD dwFlag;
   bool netLink = InternetGetConnectedState(&dwFlag,0);

//   ---------检查是否连接-------------------------------------------
   if( netLink )
                                          Label4->Caption="在线"; //
   else                                   Label4->Caption="未在线";

// 网络配置
   if(dwFlag & INTERNET_CONNECTION_MODEM) Label1->Caption="√ Yes"; //MODEM连接
   else                                   Label1->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_LAN)   Label2->Caption="√ Yes"; //LAN连接
   else                                   Label2->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_PROXY) Label3->Caption="√ Yes"; //代理连接
   else                                   Label3->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_OFFLINE) Label5->Caption="√ Yes";//离线。注:不好用!
   else                                     Label5->Caption="× No";
   if(dwFlag & INTERNET_RAS_INSTALLED)    Label6->Caption="√ Yes";
   else                                   Label6->Caption="× No";
   if(dwFlag & INTERNET_CONNECTION_CONFIGURED) Label7->Caption="√ Yes";
   else                                        Label7->Caption="× No";

#8


不太好弄

#9


send icpm echo package can get current network status.
http://search.csdn.net/Expert/topic/1388/1388048.xml?temp=.8345148