qsocket 指定网卡_QSocket

本文介绍了一个C++函数`CanRouteTo`,用于检查是否能通过特定网卡路由到指定的IP地址。该函数通过Windows API获取接口表和IP转发表来判断网卡状态和路由能力。如果网卡被禁用或无法路由到目标IP,则返回false,否则返回true。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*判断是否能够路由到指定的IP

Parameters

ARemote : 用来确定网卡的远程地址

Returns

在以下情况下,返回false:

1.无法路由到远程地址;

2.网卡被禁用或网卡断开连接

否则,返回true

*/

bool __fastcall CanRouteTo(const in_addr &ARemote)

{

MIB_IFTABLE *ATable;

DWORD ASize=0;

int ARetVal=0;//Unknown

if(GetIfTable(NULL,&ASize,false)==ERROR_INSUFFICIENT_BUFFER)

{

ATable=(MIB_IFTABLE *)malloc(ASize);

PMIB_IPFORWARDTABLE pIpForwardTable=NULL;

try

{

if(GetIfTable(ATable,&ASize,false)==ERROR_SUCCESS)

{

ASize=0;

int ALastMatric;

if(GetIpForwardTable(pIpForwardTable, &ASize, false)==ERROR_INSUFFICIENT_BUFFER)

{

pIpForwardTable = (PMIB_IPFORWARDTABLE)malloc(ASize);

if(GetIpForwardTable(pIpForwardTable, &ASize, false)==ERROR_SUCCESS)

{

for(int j=0; (jdwNumEntries)&&(ARetVal==0); j++)

{

if((pIpForwardTable->table[j].dwForwardMask&ARemote.S_un.S_addr)==pIpForwardTable->table[j].dwForwardDest)

{

if(pIpForwardTable->table[j].dwForwardType>=3)

{

for(DWORD i=0; idwNumEntries; i++)

{

if(pIpForwardTable->table[j].dwForwardIfIndex==ATable->table[i].dwIndex)

{

switch(ATable->table[i].dwOperStatus)

{

case MIB_IF_OPER_STATUS_OPERATIONAL:

case MIB_IF_OPER_STATUS_CONNECTED:

ARetVal=1;//Connected

break;

default:

ARetVal=2;//Disconnected

break;

}

break;

}

}

}

}

}

}

}

}

}

__finally

{

free(ATable);

if(pIpForwardTable)

free(pIpForwardTable);

}

}

return (ARetVal==1);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值