2022年2022年计算机网络实验 7.pdf
杭州电子科技大学学 生 实 验 报 告 书实验课程名称计算机网络开 课 学 院软件工程学院指导老师姓名谢红标学 生 姓 名齐路路林禹伉学生专业班级 10108412 2011 2012 学年第 二 学期学生学号10109275 10109273 实验课成绩名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 实验课程名称:计算机网络实验项目名称MAC 地址获取编程实现实验成绩实验者齐路路林禹伉专业班级10108412 实验日期名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - 第一部分:实验分析与设计一、实验内容描述(问题域描述)1、实验目的 1.1了解以太网帧的构成,了解各个字段的含义 1.2能够识别不同的MAC 地址,并理解MAC地址的作用2、实验要求编程实现获取本地网卡MAC 地址(语言自选,附源代码)二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等)实现方法是利用microsoft的 Netbios API ,这是一套通过winsock提供底层网路支持的指令, Netbios API 只宝库了一个函数,叫做Netbios ,这个函数使用网络控制块结构作为参数,具体实验c+代码 : #include #include #include #include #include #pragma comment(lib,netapi32.lib) int getMAC(char * mac) NCB ncb; typedef struct _ASTAT_ ADAPTER_STATUS adapt; NAME_BUFFER NameBuff 30; ASTAT,*PASTAT; ASTAT Adapter; typedef struct _LANA_ENUM UCHAR length; UCHAR lanaMAX_LANA; LANA_ENUM; /重置网卡 LANA_ENUM lana_enum; UCHAR uRetCode; memset(&ncb, 0, sizeof(ncb); memset(&lana_enum, 0, sizeof(lana_enum); ncb.ncb_command = NCBENUM; ncb.ncb_buffer = (unsigned char *)&lana_enum; ncb.ncb_length = sizeof(LANA_ENUM); uRetCode = Netbios(&ncb); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - if(uRetCode != NRC_GOODRET) return uRetCode; for(int lana=0; lanalana_enum.length; lana+) ncb.ncb_command = NCBRESET; ncb.ncb_lana_num = lana_enum.lanalana; uRetCode = Netbios(&ncb); if(uRetCode = NRC_GOODRET) break; /获取接口卡的状态快 if(uRetCode != NRC_GOODRET) return uRetCode; memset(&ncb, 0, sizeof(ncb); ncb.ncb_command = NCBASTAT; ncb.ncb_lana_num = lana_enum.lana0; strcpy(char*)ncb.ncb_callname, *); ncb.ncb_buffer = (unsigned char *)&Adapter; ncb.ncb_length = sizeof(Adapter); uRetCode = Netbios(&ncb); / 获取网卡信息 if(uRetCode != NRC_GOODRET) return uRetCode; sprintf(mac,%02X-%02X-%02X-%02X-%02X-%02X, Adapter.adapt.adapter_address0, Adapter.adapt.adapter_address1, Adapter.adapt.adapter_address2, Adapter.adapt.adapter_address3, Adapter.adapt.adapter_address4, Adapter.adapt.adapter_address5); return 0; int main(int argc, char* argv) char mac200; getMAC(mac); printf(MAC Address : %s n,mac); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 测试实验结果:再用 cmd指令查看正确测试成功名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -