CreateIpForwardEntry函数在WinXp及Win7上运行的问题?

时间:2020-11-29 03:59:29
以下是我的代码,用于添加路由表

DWORD CIpForwardTable::AddRouteTable(const char* pIP, const char* pMask, const char* pGateway, DWORD dwForwardType, DWORD dwForwardProto)
{
MIB_IPFORWARDROW IpForwardTable;
ZeroMemory(&IpForwardTable,sizeof(MIB_IPFORWARDROW));

IpForwardTable.dwForwardDest = inet_addr(pIP);
IpForwardTable.dwForwardMask = inet_addr(pMask);
IpForwardTable.dwForwardNextHop = inet_addr(pGateway);
IpForwardTable.dwForwardIfIndex = m_dwAdapterIndex;
IpForwardTable.dwForwardType = 4;  
IpForwardTable.dwForwardProto = 3; 
IpForwardTable.dwForwardPolicy = 0;
IpForwardTable.dwForwardAge = 0;
IpForwardTable.dwForwardNextHopAS = 0;

IpForwardTable.dwForwardMetric1 = m_ulMetric; 
IpForwardTable.dwForwardMetric2 = 0xFFFFFFFF;
IpForwardTable.dwForwardMetric3 = 0xFFFFFFFF;  
IpForwardTable.dwForwardMetric4 = 0xFFFFFFFF;   
IpForwardTable.dwForwardMetric5 = 0xFFFFFFFF;

DWORD dwRetVal = CreateIpForwardEntry(&IpForwardTable); 
return dwRetVal;
}

在Win7上CreateIpForwardEntry函数正常执行。
但是,在WinXp上,CreateIpForwardEntry返回87(参数有误),将IpForwardTable.dwForwardType改成3后,CreateIpForwardEntry函数才可以正常。

不知道是什么原因?请高手们给点意见。

5 个解决方案

#1


dwForwardType
Type: DWORD

The route type as described in RFC 1354. For more information, see http://www.ietf.org/rfc/rfc1354.txt.

This member can be one of the values defined in the Iprtmib.h header file. 

On Windows Vista and later, the header files were reorganized and this member can be one of the values from the MIB_IPFORWARD_TYPE enumeration type defined in the Ipmib.h header file. Note that the Ipmib.h header is automatically included by the Iprtrmib.h header file which is automatically included by the Iphlpapi.h header. The Iprtrmib.h and Ipmib.h header files should never be used directly. 

The following list shows the possible values for this member. 

Value Meaning 
MIB_IPROUTE_TYPE_OTHER 
1 Some other type not specified in RFC 1354.
 
MIB_IPROUTE_TYPE_INVALID
2 An invalid route. This value can result from a route added by an ICMP redirect.
 
MIB_IPROUTE_TYPE_DIRECT
3 A local route where the next hop is the final destination (a local interface).
 
MIB_IPROUTE_TYPE_INDIRECT
4 The remote route where the next hop is not the final destination (a remote destination).
 

 

#2


其实,我是想建立VPN连接后,添加路由表。
个人感觉:dwForwardType的取值,只能为MIB_IPROUTE_TYPE_INDIRECT,即:下一跳不是最终地址。

我不明白的是:建立VPN连接以后,
在Win7上使用上面的代码,可以正常添加路由;
在WinXP上,CreateIpForwardEntry函数却执行错误,如果把dwForwardType的值修改为MIB_IPROUTE_TYPE_DIRECT,对于我的VPN连接,就没什么意义了。

#3


呵呵,这个我遇到过,你可以在XP上先获取路由表某一个IpForwardTable,然后仅把用到的参数改成自己的,其他的直接复制,你现在对IpForwardTable每一个变量赋值,有些值不能随便写的!

#4


这个问题我也遇到,感觉很疑惑,而且我还遇到一个更疑惑的事情:我添加了一个虚拟网卡,然后在网卡上有一个默认IP和几个自己添加的IP,我把其中一个IP(非默认IP)设置为NEXTHOP,结果使用CreateIpForwardEntry过后,打印出来ROUTE TABLE发现gatway不是我绑定的nexthop,而成为了另外的一个默认IP地址,很迷惑。

#5


谢谢学习了

#1


dwForwardType
Type: DWORD

The route type as described in RFC 1354. For more information, see http://www.ietf.org/rfc/rfc1354.txt.

This member can be one of the values defined in the Iprtmib.h header file. 

On Windows Vista and later, the header files were reorganized and this member can be one of the values from the MIB_IPFORWARD_TYPE enumeration type defined in the Ipmib.h header file. Note that the Ipmib.h header is automatically included by the Iprtrmib.h header file which is automatically included by the Iphlpapi.h header. The Iprtrmib.h and Ipmib.h header files should never be used directly. 

The following list shows the possible values for this member. 

Value Meaning 
MIB_IPROUTE_TYPE_OTHER 
1 Some other type not specified in RFC 1354.
 
MIB_IPROUTE_TYPE_INVALID
2 An invalid route. This value can result from a route added by an ICMP redirect.
 
MIB_IPROUTE_TYPE_DIRECT
3 A local route where the next hop is the final destination (a local interface).
 
MIB_IPROUTE_TYPE_INDIRECT
4 The remote route where the next hop is not the final destination (a remote destination).
 

 

#2


其实,我是想建立VPN连接后,添加路由表。
个人感觉:dwForwardType的取值,只能为MIB_IPROUTE_TYPE_INDIRECT,即:下一跳不是最终地址。

我不明白的是:建立VPN连接以后,
在Win7上使用上面的代码,可以正常添加路由;
在WinXP上,CreateIpForwardEntry函数却执行错误,如果把dwForwardType的值修改为MIB_IPROUTE_TYPE_DIRECT,对于我的VPN连接,就没什么意义了。

#3


呵呵,这个我遇到过,你可以在XP上先获取路由表某一个IpForwardTable,然后仅把用到的参数改成自己的,其他的直接复制,你现在对IpForwardTable每一个变量赋值,有些值不能随便写的!

#4


这个问题我也遇到,感觉很疑惑,而且我还遇到一个更疑惑的事情:我添加了一个虚拟网卡,然后在网卡上有一个默认IP和几个自己添加的IP,我把其中一个IP(非默认IP)设置为NEXTHOP,结果使用CreateIpForwardEntry过后,打印出来ROUTE TABLE发现gatway不是我绑定的nexthop,而成为了另外的一个默认IP地址,很迷惑。

#5


谢谢学习了