实验要求
1、显示网卡信息
2、显示IPV4信息
实验步骤
1、确认程序实现的功能
查询电脑上所有网卡信息,包括网卡名、MAC地址、IP地址、子关掩码、网关等信息
2、在网上查询相关资料
了解可以通过调用`GetAdaptersInfo()`获取本地网络信息保存到结构体`pAdapterInfo`中
3、通过MFC进行程序界面的设计
通过本机网卡的ComboBox下拉显示本机所有网卡,选择其中一个网卡,按下“确认”按钮进行查询,在下方的编辑框中显示该网卡的对应信息
4、设置控件变量
对对话框中的控件进行变量设置,以便对程序查询到的信息进行显示
5、映射网卡信息
pAdapterInfo
以链表形式记录了本机的网卡信息,对pAdapter遍历显示网卡描述(比起网卡编号更易于人识别)到ComboBox内(通过ComboBox变量)
pAdapter = pAdapterInfo;
if (i < 1) {
while (pAdapter) {
//combo.AddString((LPCTSTR)pAdapter->AdapterName);
//CString str=pAdapter->AdapterName;
CString str;
//str=pAdapter->AdapterName.toString();
str = pAdapter->Description;
//str.Format(_T("%s"), pAdapter->AdapterName);
combo.AddString(str);
pAdapter = pAdapter->Next;
}
i++;
}
6、选定网卡功能
得到当前选择的网卡描述,并与所有网卡进行匹配,找到pAdapter
链表对应的项
CString strstatus; //定义一个字符串变量
combo.GetLBText(nSel, strstatus); //将当前光标所在的值赋给变量
while(pAdapter->Description != strstatus)//进行匹配,找到对应的网卡
pAdapter = pAdapter->Next;
7、显示对应网卡信息
把选定网卡的各个信息在对应的Exit Control
上显示
显示MAC地址时因为MAC地址以二进制保存,因此需要将二进制转换为16进制数,然后再转换为对应的字符存放起来
void Cnetcard_messageDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: 在此添加控件通知处理程序代码
int nSel;
CString cstr1;
CString cstr2;
CString cstr3;
CString cstr4;
CString cstr5;
char temp[8] = "";
int int_temp;
PIP_ADAPTER_INFO pAdapter; //*IP_ADAPTER_INFO
pAdapter = pAdapterInfo;
// 获取组合框控件的列表框中选中项的索引
nSel = combo.GetCurSel();
CString strstatus; //定义一个字符串变量
combo.GetLBText(nSel, strstatus); //将当前光标所在的值赋给变量
while(pAdapter->Description != strstatus)
pAdapter = pAdapter->Next;
cstr1 = pAdapter->AdapterName; //网卡号
for (i = 0; i < pAdapter->AddressLength; ++i)
{
int_temp = (int)pAdapter->Address[i];
_itoa_s(int_temp, temp, 4, 16);//int_temp表示的数以16进制转换到长度为4的字符数组temp中
if (int_temp == 0)
temp[0] = temp[1] = '0';//int_temp为0时需要显示 XX-00-XX
cstr2 += temp;//将字符连接到完整字符串中
if (i+1 < pAdapter->AddressLength)
cstr2 += '-';
}
//(pAdapter->Address[i]).ToString();
cstr3 = pAdapter->IpAddressList.IpAddress.String; //IP
cstr4 = pAdapter->IpAddressList.IpMask.String; //子关掩码
cstr5 = pAdapter->GatewayList.IpAddress.String; //网关
// 根据选中项索引获取该项字符串
//combo.GetLBText(nSel, cstr);
// 将组合框中选中的字符串显示到IDC_SEL_WEB_EDIT编辑框中
SetDlgItemText(IDC_EDIT1, cstr1); //网卡名
SetDlgItemText(IDC_EDIT2, cstr2); //MAC地址
SetDlgItemText(IDC_EDIT3, cstr3); //IP地址
SetDlgItemText(IDC_EDIT4, cstr4); //子网掩码
SetDlgItemText(IDC_EDIT5, cstr5); //网关
//getchar();
}
至此显示网卡信息的小程序完成了