还剩7页未读,继续阅读
文本内容:
学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称开课计算机网络学院指导老师姓名计算机科学与技术学院学生姓名学生专业刘维班级学年第二学期2013—2014实验课程名获取以太网卡的mac地址实验成绩称计算机网络实验项目名称实验者专业班级组别同组者实验日期第一部分实验分析与设计(可加页)
一、实验内容描述(问题域描述)设计一个程序,使得能够获取本机安装的以太网卡的物理地址
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)MAC(Media AccessControl,介质访问控制层)地址,定义了数据帧怎样在介质上进行传输在共享同一个带宽的链路中,对连接介质的访问是“先来先服务”的物理寻址在此处被定义,逻辑拓扑(信号通过物理拓扑的路径)也在此处被定义线路控制、出错通知(不纠正)、帧的传递顺序和可选择的流量控制也在这一子层实现实验原理使用Microsoft的NetbiosAPI这是一套通过Winsock提供底层网络支持的命令实验Netbios的最大缺点是必须在系统中安装了Netbios服务除此之外,这种方法又快又准确NetbiosAPI只包括了一个函数,就叫做Netbios这个函数使用网络控制块(network controlblock)结构作为参数,这个结构告诉函数要做什么其中,结构中最重要的就是ncb_command成员这个成员告诉Netbios该做什么使用32个命令来探测mac地址,它们在MSDN的定义如下NCBENUM Windows列举系统中网卡的数量使用此命令后,ncb_buffer成员指向由LANA_ENUM结构填充的缓冲区NCBASTAT:获得每个网卡的状态NCBRESET:重置网卡网卡在接受新的NCB命令之前必须重置
三、主要仪器设备及耗材Windows操作系统,VC
6.0Windows操作系统,VC
6.0-、第二部分实验调试与结果分析(可加页)调试过程#include(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)ttincludestdio.httincludestdlib.httincludehttpext.h#includewindef.hNb
30.hNCB neb;typedef struct_ASTAT_〃定义结构体ASTAT,*PASTAT{ADAPTER_STATUS adapt;
[30];NAME_BUFFER NameBuff}ASTAT,*PASTAT;ASTAT Adapter;〃定义ASTAT类的实体Adaptertypedef struct_LANA_ENUM〃定义结构体LANA_ENUM{UCHAR length;UCIIAR lana[MAX_LANA];}LANA_ENUM;〃定义LANA_ENUM类的实体lana_enumLANAENUM lana_enum;UCHAR uRetCode;memset ncb,0,sizeof neb;〃取得网卡列表memset1ana_enum,0,sizeoflana enum;neb.ncb_command二NCBENUM;//ncb_buffer成员指向由lana_enum填充的缓冲区neb.ncb_buffer=unsigned char*lana_enum;neb.ncb lengthsizeofLANA_ENUM;〃获取缓冲区大小uRetCode=Netbiosncb;ifuRetCode!=NRC G00DRET returnuRetCode;forint lana=0;lanalana_enum.length;lana++〃取得本地以太网卡地址neb.neb commandNCBRESET;〃重置网卡neb.ncb lananum=lana_enum.lana[lana];uRetCode=Netbios ncb;if uRetCode==NRC_G00DRETbreak;}ifuRetCode!=NRC_G00DRET returnuRetCode;〃发送NCBASTAT命令,获得每个网卡的状态memsetncb,0,sizeofneb;neb.ncbcommand NCBASTAT;neb.ncb_lana_num lanaenum.lana
[0];strepy char*neb.ncb callname,〃*〃;neb.neb buffer=unsigned char*Adapter;neb.ncblength=sizeof Adapter;uRetCode=〃获取缓冲区大小Netbiosncb;ttpragma commentlib,z,netapi
32.lib〃int getMACchar*macifuRetCode!=NRC_GOODRET returnuRetCode;sprintf mac,/,%02X-%02X-%02X-%02X-%02X-%02X,,〃输出网卡地址,Adapter,adapt,adapter address
[0],Adapter,adapt,adapter address
[1],Adapter,adapt.adapter_address
[2],Adapter.adapt.adapter_address
[3],Adapter,adapt.adapter_address
[4],Adapter,adapt,adapter address
[5];return0;int mainintargc,char*argv[]{char mac
[200];getMACmac;printfz,MAC Address:%s\n〃,mac;return0;
二、实验结果及分析包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等当前管理PC的MK地址:E4-D5-3D-B1-C3-BF克隆MAC地址进入路由器设置界面http://
192.
168.Ll/,查看本地mac地址,如下图:注意只有局域网中的计算机才能使用本功能保存帮助图
1.进入路由器查看的本地mac地址运行程序,得到本机的mac地址,如下图:*C:\Users\Administrator\desktop\C++^^,Debug\mac.exe MACAddress E4-D5-3D-B1-C3-BF Pressany keyto continue图
2.运行程序后获得的mac地址由此可知,本次实验成功!
三、实验小结、建议及体会通过本实验,我认识到mac地址定义了数据帧怎样在介质上进行传输在共享同一个带宽的链路中,对连接介质的访问是“先来先服务”的同时,使用Microsoft的NetbiosAPI进行程序的设计,并且准确获取了本地mac地址通过本实验,我认识到mac地址定义了数据帧怎样在介质上进行传输在共享同一个带宽的链路中,对连接介质的访问是“先来先服务”的同时,使用Microsoft的NetbiosAPI进行程序的设计,并且准确获取了本地mac地址实验课程名Socket支持下网上点对点通信的实现实验成绩称计算机网络实验项目名称实验者专业班级组别同组者实验日期第一部分实验分析与设计(可加页)-、
一、实验内容描述(问题域描述)使用Socket接口进行网络通信的过程如图5-1所示,简要步骤如下
①建立一个socket;
②按要求配置socket,即将socket连接到远程主机或给socket指定一个本地协议端口;
③按要求通过socket发送和接收数据;(开始]
④关闭此socketsocketbindXlisten|形成丁寺亭珂connect接通readwrite开女台C J月艮务器端白勺socketaccept|接收连接请求|一成功返回图
1.socket示例
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)所谓socket通常也称作〃套接字〃,用于描述IP地址和端口,是一个客户通端信白链勺的so句ck柄et在Internet上的主机一般运行了多个服务软件,同时提供儿种服务每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务开发原理服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序要学Internet上的TCP/IP网络编程,必须理解Socket接口Socket接口设计者最先是将接口放在Unix操作系统里面的如果了解Unix系统的输入和输出的话,就很容易了解Socket了网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的
三、主要仪器设备及耗材Windows操作系统,JDK第二部分实验调试与结果分析(可加页)-、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)ListenTCP:importjava.net.*;import java.io.*;public classListenTCP〃监听TCP数据包的服务端程序public staticvoid mainString[]argsServerSocket listen=null;//定义一个ServerScoket类型的引用Socket soc=null;//定义Socket的应用,用于套接字连接String messagenull;二BufferedReader bf=null;〃定义一个BufferedReader类型的读内容的引用InputStreamReader isr=null;〃定义一个可读输入流trylisten=new Serversocket10000;//创建一个监听1000端口的对象soc=listen.accept;〃当有socket连接所监听的端口时,连接上该socketXII•I\、ysteni outprinting不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不•System.out.printlnMserver okn;System.out.printing51c51c^|c5Jc51c51c51c51c5Jc51c5Jc51c^|c•System.out.printlnnn;isr=new InputStreamReadersoc.getInputStream;//创建一个来自套接字soc的可读bf=new BufferedReaderisr;〃把的可读输入流作为参数创建一个SOCBufferedReader输入流message=bf.readLine;//以每行为单位读取从客户端发来的数据System.out.printlnC^Socketf+soc;//显示出发送方的IP地址和端口号System.out.printlnReceive the message from:n+message;〃显示接收到的数据System.out.printlnnu;System.out.printlnn,•51c51c51c5Jc51c51czjC51c51czjc51cisr.close;〃关闭输入流isrbf.close;〃关闭字符流bfsoc.close;〃关闭Socket套接字catchException e〃异常处理System.out.printlnError:M+e;SendTCP:importjava.net.*;import java.io.*;public classSendTCP//发送TCP数据包的服务端程序{public staticvoid mainString[]args throwslOException ifargs.length!=4{命令行的输入格式有误,请按照以下格式重新输入!”;源IP地址源端口目的IP地址目的端口”;System.exitO;String source_ip=args
[0];int source_port=lnteger.parselntargs
[1];String dest_ip=args
[2];int dest_port=lnteger.parselntargs
[3];if dest_port!=l0000{请保持目的端口为10000!”;System.exit0;Outputstream os=null;〃定义一个输出流PrintStream ps=null;〃定义一个可写流BufferedReader bf=null;〃定义一个BufferedReader类型的读内容的引用String message=HThis ismy homeworkof network!1;Socket soc=null;//定义Socket的应用,用于套接字连接try soc=new Socketdest_ip,dest_port;System.out.println;bf=new BufferedReadernewInputStreamReaderSystem.in;〃把soc的可读输入流作为参数创建一个BufferedReaderSystem.out.printnPlease inputthemessage:;message=bf.readLine;os=soc.getOutputStream;/创建一个来自套接字soc的可读输出流ps=new PrintStreamos;ps.printlnmessage;bf.close;〃关闭字符流bfps.close;〃关闭可写流psos.close;〃关闭输出流osSystem.out.println;/A■■X1I KIKIKIKl■f\ysteni outprintin、不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不•System.out.printlnuSend OK!;System.out.printlnnThe messagewas sendto theaddress:u+dest_ip+|n+dest_port+,]n;A a•1**1*•!**1*■!*****1*■!**1*■!*****1**1**1**1**1*11\v qfpi”on Inri n11n soc.close;、不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不不小•不不不不不不不不不不不不不不不不不不不!•}catchException eSystem.out.printlne;
二、实验结果及分析包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等营理员:命令啊到[版本Microsoft Windows
6.
1.7600]版权所有〈保留所有权利c2009Microsoft CorporationC\Wsers\Adninistratore E\cd jauacourseE\Jauacoursejaua SendTCP
127.
0.
0.
14000127.
0.
0.110000你好,我是赵洪涛Please inputthe messageMMXXXXXXMXXMMXXXXMMXXMMXMXXMMXMMMXMMXMMXMXXXMXXMXXMSendOKThe messagewas sendto theaddress
127.
0.
0.1
[10000]丈*y・X*X**X*X*fXXXXMXXXM E\Jauacourse图
2.发送数据报图
3.监听数据报由此可知,本次实验成功
三、实验小结、建议及体会通过本次实验,我认识到网络中的进程是通过socket来通信的,socket就是“打开open->读写write/read—>关闭close”模式的一个实现,就是说,socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写
10、打开、关闭),同时,还编写程序实现了客户端与服务器端的通信通过本次实验,我认识到网络中的进程是通过socket来通信的,socket就是“打开open->读写write/read—>关闭close”模式的一个实现,就是说,socket是一种特殊的文件,一些socket函数就是对其进行的操作(读/写
10、打开、关闭),同时,还编写程序实现了客户端与服务器端的通信。
个人认证
优秀文档
获得点赞 0