CIPAddressCtrl::ClearAddress 清除IP地址控件中的内容。void ClearAddress(); |
CIPAddressCtrl::Create 创建一个IP地址控件。BOOL Create(DWORD dwStyle,RECT& rect,CWnd* pParentWnd,UINT nID); 参数:dwStyle 为控件风格,可使用窗口风格的组合;rect 控件大小和位置;pParentWnd 指向父窗口的指针,不能为NULL;nID 控件的ID。 返回值:若成功,返回非0;否则返回0 |
CIPAddressCtrl::GetAddress 获取IP地址控件中的地址值。int GetAddress(BYTE& nField0,BYTE& nField1,BYTE& nField2,BYTE& nField3); int GetAddress(DWORD& dwAddress); 第一种形式是把IP地址的4个域填充到用4个引用中。 第二种形式是把IP地址填充到1个长整数的引用中。 返回值:IP地址控件中非空域的数量。 |
CIPAddressCtrl::IsBlank 判断IP地址控件中所有域是否为空。BOOL IsBlank(); 返回值:如果IP地址控件的所有域均为空,返回非0值;否则返回0。 |
CIPAddressCtrl::SetAddress 设置IP地址控件中的地址值。void SetAddress(BYTE nField0,BYTE nField1,BYTE nField2,BYTE nField3); void SetAddress(DWORD dwAddress); 第一种形式是用4个0~255的整数分别设置IP地址各个域的值。 第二种形式是用1个长整数设置IP地址值。 返回值:无 |
CIPAddressCtrl::SetFieldFocus 把输入焦点设置在指定的域中。void SetFieldFocus(WORD nField); 参数:nField 取值为0~3,如果大于3,则焦点设置到第一个空域中,若所有域均非空,则焦点设置在第一个域中。 返回值:无 |
CIPAddressCtrl::SetFieldRange 设置指定域中数值的取值范围。void SetFieldRange(int nField,BYTE nLower,BYTE nUpper); 参数:nField 域索引,取值0~3;nLower 域的下限值;nUpper:域的上限值。 返回值:无 |
0. 常用操作
DWORD dwAddress; DWORD dwNetmask; this->m_cGwIp.GetAddress(dwAddress); this->m_cGwNetmask.GetAddress(dwNetmask); //从IP控件获得的DWORD要htonl转换一下才能赋值给S_addr struct in_addr inadGw,inadNetmask; inadGw.S_un.S_addr = htonl(dwAddress); inadNetmask.S_un.S_addr = htonl(dwNetmask); char szGateway[128]; char szNetmask[128]; //in_addr 转 String strcpy_s(szGateway,sizeof(szGateway),inet_ntoa(inadGw)); strcpy_s(szNetmask,sizeof(szNetmask),inet_ntoa(inadGw)); TRACE("gateway:%s netmask:%s",szGateway,szNetmask); //判断IP的第一个字节, s_b1 数据类型为BYTE(unsigned char),直接判断 if(inadGw.S_un.S_un_b.s_b1 == 127) return ; //String 转 DWORD IP ,初始化IP控件 dwAddress = inet_addr("1.2.3.4"); ((CIPAddressCtrl*)GetDlgItem(IDC_IPGATEWAY))->SetAddress((u_long)htonl(dwAddress));
1
this->m_pDefaultRoute = (PMIB_IPFORWARDROW)::GlobalAlloc(GPTR,sizeof(MIB_IPFORWARDROW)); PMIB_IPFORWARDROW pDefaultRoute = FindRoute(0,0); if(NULL != pDefaultRoute ){ memcpy(m_pDefaultRoute,pDefaultRoute,sizeof(MIB_IPFORWARDROW)); } if(NULL != m_pDefaultRoute){ struct in_addr gw , netmask; char szGateway[128]; char szNetmask[128]; gw.S_un.S_addr = (u_long)m_pDefaultRoute->dwForwardNextHop; netmask.S_un.S_addr = (u_long)m_pDefaultRoute->dwForwardMask; strcpy_s(szGateway,sizeof(szGateway),inet_ntoa(gw)); strcpy_s(szNetmask,sizeof(szNetmask),inet_ntoa(netmask)); TRACE("GW:%s, NETMASK:%s",szGateway,szNetmask); m_cGwIp.SetAddress((u_long)htonl(m_pDefaultRoute->dwForwardNextHop)); m_cGwNetmask.SetAddress((u_long)htonl(m_pDefaultRoute->dwForwardMask)); } if(NULL != pDefaultRoute ) ::GlobalFree(pDefaultRoute); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
2
void CNetProcessDlg::EnmuRoute(void) { PMIB_IPFORWARDTABLE pIpRouteTable = MyGetIpForwardTable(true); CStringA output = ""; if(NULL != pIpRouteTable){ DWORD i, dwCurrIndex; struct in_addr inadDest; struct in_addr inadMask; struct in_addr inadGateway; PMIB_IPADDRTABLE pIpAddrTable = NULL; char szDestIp[128]; char szMaskIp[128]; char szGatewayIp[128]; for(i = 0; i< pIpRouteTable ->dwNumEntries; i++) { dwCurrIndex = pIpRouteTable->table[i].dwForwardIfIndex; inadDest.S_un.S_addr =(u_long) pIpRouteTable->table[i].dwForwardDest; inadMask.S_un.S_addr = (u_long)pIpRouteTable ->table[i].dwForwardMask; inadGateway.S_un.S_addr = (u_long)pIpRouteTable->table[i].dwForwardNextHop; strcpy_s(szDestIp,sizeof(szDestIp),inet_ntoa(inadDest)); strcpy_s(szMaskIp,sizeof(szMaskIp),inet_ntoa(inadMask)); strcpy_s(szGatewayIp,sizeof(szGatewayIp),inet_ntoa(inadGateway)); CStringA tmp = ""; tmp.Format("%s %s %s %d %d\r\n",szDestIp,szMaskIp,szGatewayIp,dwCurrIndex,pIpRouteTable->table[i].dwForwardMetric1); output += tmp; } }else { MessageBox(_T("error")); } MyFreeIpForwardTable(pIpRouteTable); const char* ch = output; CStringW output_w = CStringW(output); this->writeLog(output_w); }
PMIB_IPFORWARDROW CNetProcessDlg::FindRoute(DWORD dest,DWORD netmask) { 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 == dest && pIpRouteTable ->table[i].dwForwardMask == netmask) { pRow = (PMIB_IPFORWARDROW)::GlobalAlloc(GPTR,sizeof(MIB_IPFORWARDROW)); memcpy(pRow,&pIpRouteTable ->table[i],sizeof(MIB_IPFORWARDROW)); } } } MyFreeIpForwardTable(pIpRouteTable); return pRow; }