网卡禁用与启用(50分)

  • 主题发起人 主题发起人 wangydm
  • 开始时间 开始时间
W

wangydm

Unregistered / Unconfirmed
GUEST, unregistred user!
我的xp有时总是会断线,重启或将网卡禁用再启用就又可以连到线.而98又没有什么问题,我又找不出是什么原因.所以想用DELPHI编写一个小程序,就是按一下禁用网卡,再按一下启用网卡.如果有多块网卡,最好能找出电脑上各个网卡的名称,原后再禁用.是否能做到?
 
我也想知
 
会不会是网卡驱动在XP下有什么问题?下个新本本试试。

至于编程禁用网卡,听课...
 
应该没什么问题,我的网卡是联想主板自带的,另外一台机同样的配置,装的是98没有断线的问题.从理论上讲,xp的网络性能应该比98要好,为何会出现这种情况.
 
/*
**********************************************************************
*NETBUIT协议??????????????????
*原因与MIB结构有关
*现象:通过//IP不能访问计算机的默认共享
* 但是通过//主机名能够访问计算机的默认共享
* 天网防火墙的网络安全级别高和禁止也不能
* 禁止这种方法的访问
* 可以通过这个方法和ICMP的REPLY包绕过防火墙进行攻击
**********************************************************************
*/

/**/
#include "stdafx.h"
#include <windows.h>
#include <IpHlpApi.h>
#include <iostream.h>

typedef DWORD(CALLBACK * PGNOINTERFACE)(PDWORD); //GetNumberOfInterfaces
typedef DWORD(CALLBACK * PGIINFO)(PIP_INTERFACE_INFO,PULONG ); //GetInterfaceInfo()
typedef DWORD(CALLBACK * PSETADA)(PMIB_IFROW); //SetIfEntry
typedef DWORD(CALLBACK * PGETADA)(PMIB_IFROW); //GetIfEntry
typedef DWORD(CALLBACK * PDELROUT)(PMIB_IPFORWARDROW); //DeleteIpForwardEntry

int main(int argc, char* argv[])
{
DWORD index = 0;
HINSTANCE hInst; //加载IPHELPAPI 的实例句柄

hInst = LoadLibrary("IpHlpApi.dll");

if(!hInst)
cout<<"Can't Load IpHlpApi.DLL. /n";

ULONG ulSize = 0;

//--------------------------------->>显示网络接口个数
DWORD ulNumOfInterfaces = 0;
PGNOINTERFACE pGNOInterface; //函数指针
PGIINFO pGIInfo;

pGNOInterface = (PGNOINTERFACE)GetProcAddress(hInst, "GetNumberOfInterfaces");
pGNOInterface(&amp;ulNumOfInterfaces);
cout<<"U have "<<ulNumOfInterfaces<<" network interfaces/n";

//获取网络接口信息
pGIInfo = (PGIINFO)GetProcAddress(hInst,"GetInterfaceInfo");
PIP_INTERFACE_INFO pIInfo = NULL;
ulSize = 0;

pGIInfo(pIInfo, &amp;ulSize); //第一次调用获得缓冲的大小
pIInfo = (PIP_INTERFACE_INFO)new(char[ulSize]);
pGIInfo(pIInfo, &amp;ulSize);

PSETADA pSetAda; //函数指针

pSetAda = (PSETADA)GetProcAddress(hInst, "SetIfEntry");
MIB_IFROW *pMIBIf = NULL;

PGETADA pGetAda; //函数指针

pGetAda = (PGETADA)GetProcAddress(hInst, "GetIfEntry");

pMIBIf = new(MIB_IFROW);
//显示网络接口信息


/*思路的错误,不能删除路由表*/
//////////////////////////////////////////////////////////////
PDELROUT pDELRout;
pDELRout = (PDELROUT)GetProcAddress(hInst, "DeleteIpForwardEntry");
PMIB_IPFORWARDROW pMIBIPRow = NULL;
//////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////
char key;
for(int i = 0; i < pIInfo->NumAdapters; i++)
{
cout<<"Adapter Index :"<<pIInfo->Adapter.Index<<endl;
cout<<"And Name :"<<pIInfo->Adapter.Name<<endl;
//------------------------------------------>>禁用网卡
pGetAda(pMIBIf);
cout<<"-----------------------------------------"<<endl;
cout<<"Chose Operation:"<<endl;
cout<<"(1) 1: Close Adapter!!!"<<endl;
cout<<"(2) 2: Open Adapter!!!"<<endl;
cout<<"-----------------------------------------"<<endl;

cin >> key;
if(key == '1')
{
pMIBIf->dwIndex = pIInfo->Adapter.Index;
pMIBIf->dwAdminStatus = MIB_IF_ADMIN_STATUS_DOWN;
// pMIBIf->dwOperStatus = MIB_IF_OPER_STATUS_NON_OPERATIONAL;

pSetAda(pMIBIf);
cout<<"Adapter Closed!!"<<endl;
}
else if(key == '2')
{
pMIBIf->dwIndex = pIInfo->Adapter.Index;
pMIBIf->dwAdminStatus = MIB_IF_ADMIN_STATUS_UP;
// pMIBIf->dwOperStatus = MIB_IF_OPER_STATUS_OPERATIONAL;

pSetAda(pMIBIf);
cout<<"Adapter Opened!!"<<endl;
}
}
cout<<endl<<endl;
//------------------------------------------>>接口信息显示完毕
delete pMIBIf;
return 0;
}
物理上禁用网卡的问题我也没有解决,希望我们共同讨论
 
等待答案。
 
应该可以做到,看NTDDK,有类似的例程
BTW:我还没有完全转换过来[:)]
 
可以用API:SetIfEntry
 
I have
But,is c...
 
楼上的DX,能不能把你的C程序给我发一个
tty_xiaotao@eyou.com
我写了上面的那个,用的是SETIFENTRY函数
不能在物理层做到,希望你的能在物理层做到
期待ing。。。。。。。谢谢
 
看来又是无终问题
 
看一看禁用启用网卡是修改哪一项注册表。
然后自己操作注册表
 
TO wangydm:
我已做到物理层上禁止、启用网卡,D7,2k、XP、2003下测试通过,我的98有问题进不去了,所以没有测试:)
留下Mail,我给你发过去,顺便帮忙在98下测试看看效果[:)]
 
pihome,我也要,谢谢wzh01@citiz.net
 
to pihome
有代码吗?我也要!
wfzha123@yiwu.com.cn
 
to pihome,顺便让我也共享一下,如何? 多谢了!secondmonk@tom.com
 
swindboy@163.net,先谢过了。
 
上面的几位DFW,邮件已发送,请查收!
 
谢谢你,my E-mail ADD:wangydm@163.net.再次感谢!
 
playicq上不是有防护墙的代码?
 
后退
顶部