?? changegateway.cpp
字號:
//////////////////////////////////////////////////////////////////////
// ChangeGateway.cpp文件
#include <stdio.h>
#include <windows.h>
#include <Iphlpapi.h>
#pragma comment(lib, "Iphlpapi.lib")
#pragma comment(lib, "WS2_32.lib")
PMIB_IPFORWARDTABLE MyGetIpForwardTable(BOOL bOrder);
void MyFreeIpForwardTable(PMIB_IPFORWARDTABLE pIpRouteTab);
void PrintIpForwardTable();
int main()
{
// 新網關地址
DWORD dwNewGateway = ::inet_addr("192.168.0.1");
// 在表中查找我們想要的入口。默認網關的目的地址為0.0.0.0
PMIB_IPFORWARDTABLE pIpRouteTable = MyGetIpForwardTable(TRUE);
PMIB_IPFORWARDROW pRow = NULL;
if(pIpRouteTable != NULL)
{
for(DWORD i=0; i<pIpRouteTable->dwNumEntries; i++)
{
if(pIpRouteTable->table[i].dwForwardDest == 0) // 找到了默認網關
{
// 申請內存來保存這個入口。
// 這比自己填充MIB_IPFORWARDROW結構簡單許多,我們僅需要改變網關地址
if(pRow == NULL)
{
pRow = (PMIB_IPFORWARDROW)::GlobalAlloc(GPTR, sizeof(MIB_IPFORWARDROW));
memcpy(pRow, &pIpRouteTable->table[i], sizeof(MIB_IPFORWARDROW));
}
// 刪除舊的默認網關入口
if(::DeleteIpForwardEntry(&pIpRouteTable->table[i]) != ERROR_SUCCESS)
{
printf("Could not delete old gateway \n");
exit(1);
}
}
}
MyFreeIpForwardTable(pIpRouteTable);
}
if(pRow != NULL)
{
// 設置dwForwardNextHop域為我們的新網關,所有其它的路由屬性將和先前的相同
pRow->dwForwardNextHop = dwNewGateway;
// 為默認網關創建新的路由入口
if(::SetIpForwardEntry(pRow) == NO_ERROR)
printf(" Gateway changed successfully \n");
else
printf(" SetIpForwardEntry() failed \n");
::GlobalFree(pRow);
}
return 0;
}
PMIB_IPFORWARDTABLE MyGetIpForwardTable(BOOL bOrder)
{
PMIB_IPFORWARDTABLE pIpRouteTab = NULL;
DWORD dwActualSize = 0;
// 查詢所需緩沖區的大小
if(::GetIpForwardTable(pIpRouteTab, &dwActualSize, bOrder) == ERROR_INSUFFICIENT_BUFFER)
{
// 為MIB_IPFORWARDTABLE結構申請內存
pIpRouteTab = (PMIB_IPFORWARDTABLE)::GlobalAlloc(GPTR, dwActualSize);
// 獲取路由表
if(::GetIpForwardTable(pIpRouteTab, &dwActualSize, bOrder) == NO_ERROR)
return pIpRouteTab;
::GlobalFree(pIpRouteTab);
}
return NULL;
}
void MyFreeIpForwardTable(PMIB_IPFORWARDTABLE pIpRouteTab)
{
if(pIpRouteTab != NULL)
::GlobalFree(pIpRouteTab);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -