各位高手,我有几个有关网卡的问题,还望各位高手能指点一下。
1、网卡(局域网连接正常)在计算机工作时和计算机处于关机状态这两种情况下有何不同?如用程序来检测这两种情况应该如何处理?
2、如在一个有双网卡的计算机上,如何用程序实现对其中一块网卡的禁用和启用?
再附带一个tracert的命令我在书上看到用这个命令可以检测路由器,如tracert www.sohu.com
会显示一连窜的路由器ip地址及其相应的数据回复,可我试了一下,只能找到学校自己的路由器(第一个路由器),后面的路由器request timeout
这是不是因为那些路由器装了防火墙,阻止了外部对其的这种探测?还望各路高手多多指教,小弟先谢了!高分!不够再给!
1、网卡(局域网连接正常)在计算机工作时和计算机处于关机状态这两种情况下有何不同?如用程序来检测这两种情况应该如何处理?
2、如在一个有双网卡的计算机上,如何用程序实现对其中一块网卡的禁用和启用?
再附带一个tracert的命令我在书上看到用这个命令可以检测路由器,如tracert www.sohu.com
会显示一连窜的路由器ip地址及其相应的数据回复,可我试了一下,只能找到学校自己的路由器(第一个路由器),后面的路由器request timeout
这是不是因为那些路由器装了防火墙,阻止了外部对其的这种探测?还望各路高手多多指教,小弟先谢了!高分!不够再给!
解决方案 »
- 急急急!!!!关于c++程序中调用用c#写的dll文件,该怎么调用?
- 鼠标假死
- 对话框中加入ACTIVEX控件以后,对话框就不能DOMODAL弹出的问题。
- 大家讨论一下!
- 我写了一个简单的browser,想在一个打开的html网页里,实现自动点击提交按钮(就form里的submit)的功能!?
- windows程序设计一书中的疑问
- 救火呀!!!!怎样动态加载Com组件,在线等待....
- 【boost序列化】使用boost序列化集成自CObject的类,还原的对象在释放内存时崩溃
- 请问LoadBitmap( LPCTSTR lpszResourceName )中lpszResourceName 是指哪个名字
- 为何Release版不能写文本文件?
- 有没有复制文件夹的函数啊?
- 怎么样用CListCtrl来显示查询的数据??
2.程序代码如下:
#include "stdafx.h"
#include <tchar.h>
#include <windows.h>
#include <setupapi.h>#pragma comment (lib,"setupapi")#define UnknownDevice TEXT("<Unknown Device>")HDEVINFO hDevInfo = 0;
BOOL StateChange(DWORD NewState, DWORD SelectedItem,HDEVINFO hDevInfo)
{
SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
HCURSOR hCursor; //
// This may take a while :^(
//
hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT)); //
// Get a handle to the Selected Item.
//
if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
{
printf("EnumDeviceInfo");
return FALSE;
} //
// Set the PropChangeParams structure.
//
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
PropChangeParams.StateChange = NewState; if (!SetupDiSetClassInstallParams(hDevInfo,
&DeviceInfoData,
(SP_CLASSINSTALL_HEADER *)&PropChangeParams,
sizeof(PropChangeParams)))
{
printf("SetClassInstallParams");
SetCursor(hCursor);
return FALSE;
} //
// Call the ClassInstaller and perform the change.
//
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
hDevInfo,
&DeviceInfoData))
{
printf("SetClassInstallParams");
SetCursor(hCursor);
return TRUE;
} SetCursor(hCursor);
return TRUE;
}
BOOL IsClassNet( GUID * ClassGuid )
{
#define MAX_NUM 50 HKEY hKeyClass;
LONG lRet;
char ClassType[MAX_NUM];
char NetClass[MAX_NUM] = "Net";
DWORD dwLength = MAX_NUM,dwType = REG_SZ;
if (hKeyClass = SetupDiOpenClassRegKey(ClassGuid,KEY_READ))
{
lRet = RegQueryValueEx(hKeyClass,
TEXT("Class"),
NULL, &dwType, LPBYTE(ClassType), &dwLength);
RegCloseKey(hKeyClass); if (lRet != ERROR_SUCCESS)
return FALSE; if (!strcmp(ClassType,NetClass))
return TRUE;
} return FALSE;
}int main(int argc, char* argv[])
{
if (INVALID_HANDLE_VALUE == (hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,
DIGCF_PRESENT|DIGCF_ALLCLASSES)))
{
printf("GetClassDevs");
return 0;
} DWORD i, Status, Problem;
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)}; HKEY hKeyClass;
char DeviceName[200];
for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
if (IsClassNet(&DeviceInfoData.ClassGuid))
{
printf(" the class's index is %d\n",i);
//
//DICS_DISABLE-->禁用网络
//DICS_ENABLE--->恢复网络
//
if (StateChange(DICS_ENABLE,i,hDevInfo))
printf("NetWork stopped"); }
} return 0;
}
第二点:不懂学习楼上的
对于第一个问题,用ping的方法是可以区分我上述所讲的两种情况,因为用ping的话,在关机时时没有响应的数据包,我主要是想知道在关机状态下是否有可能获取网卡的一些信息,以区别是由于网络不通(如网线没有正常连接)还是由于关机而造成采用类似ping的方法而没有收到数据包。
对于第二个问题,谢谢nanjinhui的热情帮助,但我还不是很明白,程序中许多函数和数据类型我在msdn中没有找到,我的msdn比较老,只有两张盘的,如SetupDiEnumDeviceInfo,SP_PROPCHANGE_PARAMS等都找不到,还望继续指教,谢谢!
对于第三个问题,我今天在利用Adsl上网的计算机上试了一下tracert的命令
tracert www.sohu.com结果找到了第2-8个路由器的信息(反应时间和ip地址)
第一个和后面几个路由器都没有找到继续高度关注,谢谢大家!
兄弟,你也将这块代码贴出来了:)
帮忙搞定一下,如何将某个ip对应的网卡禁掉?
要快啊,还有
帮忙看一个程序,不知道为什么不成功。
http://expert.csdn.net/Expert/topic/2289/2289229.xml?temp=.5295679
hoho:)
我觉得你好像想作检测代理这样的功能(防范代理)?
用traceroute肯定是不行的。
如果对方的ip是私网ip,traceroute根本达不到。
如果对方ip是公网ip,完全也有可能对方的防火墙根本不让icmp包通过,此路不通(:
我用过3com的网络管理软件,它显示的拓扑结构非常明确。
可以看出那些节点是通的(绿--这有可能只是网管可达,实际情况网络不一定好用),
那些节点出现故障(红)。
对于红了的点就是故障点。
对于某个主机是不是网络可达,可以ping它嘛,当然我想用snmp也可以实现的。
我相当主机掉电以后,这个链路已经不通,就不能获得信息了,你只能在连通的时候获得
它的信息,我想在主机没有主动响应程序的时候,最多能获得网卡的mac地址(而且必须在同一个网段),主机名等信息吧!