实验1 《XXXX实验》
实验学时:2 实验地点:XXXX 实验日期:2014.XX
1. 实验目的
XXXX
2. 实验内容
XXXX
3. 实验方法
XXXX
4. 实验步骤
XXXX
5. 实验结果
实验2 《XXXX实验》
实验学时:2 实验地点:XXX 实验日期:2014.XX
1. 实验目的
XXXX
2. 实验内容
XXXX
3. 实验方法
XXXX
4. 实验步骤
XXXX
5. 实验结果
实验3 《XXXX实验》
实验学时:2 实验地点:XXX 实验日期:2014.XX
1. 实验目的
XXXX
2. 实验内容
XXXX
3. 实验方法
XXXX
4. 实验步骤
XXXX
5. 实验结果
第二篇:计算机网络实验报告封面
实验1 《Windows Socket编程》
实验学时:2 实验地点:X204 实验日期:2014.04.23
1. 实验目的
通过实验,使学生熟悉并掌握计算机Windows 编程的基本知识,进一步加深学生对课堂所学基本内容的理解,掌握基本的Windows编程技巧,通过实验使得学生能够进行一些简单的网络程序设计。
2.实验内容
1.介绍基本的Windows Socket编程技巧;
2.基于Windows Socket编程,设计并实现一个简单的聊天系统,包括客户端及服务器端。
3.实验方法
利用MFC,参考网络上socket编程指南进行实验
4.实验步骤
1.工程创建
(1)服务器端创建
(2)客户端创建
2.Winsock初始化
在Windows环境下进行网络程序设计时,所有的Winsock函数都是从ws2_32.dll导出的,我们可以通过#pragma comment(lib, "ws2_32.lib")语句链接到该库文件。但在使用Winsock函数之前还必须调用WSAStartup函数对库资源进行初始化工作,使用完毕后,在退出程序之前,我们还必须调用WSACleanup函数来释放库资源。
3.编程模式
(1)服务器端
1)创建socketSocket函数的原型为:
2)绑定bindbind函数的原型:
3)监听listen
4)接受连接accept,接收/发送数据send/recv
5)发送/接收数据
6)关闭监听套接字,终止服务器
(2)客户端:
1)创建连接套接字
2)设置通信地址
3)向服务器提出连接请求:
4)连接成功后,接收服务器端发送来的信息
5)关闭套接字,终止通信
4.项目简单演示
1)开启服务器端,等待客户端连接
2)开启客户端,可以开启多个,为了达到效果,可以再不同的机器上开启客户端
3)连接服务器。
4)开始聊天,只要连接上服务器的客户端都会收到聊天信息,相当于简单的群聊。
5.实验结果
成功启动服务器:
启动客户端:
向服务端发送消息:
服务端成功接收到消息:
实验2 《NS2网络仿真实验》
实验学时:2 实验地点:XXX 实验日期:2014.XX
1. 实验目的
1) 学生能够初步掌握NS2网络模拟平台,并且能够利用网络模拟平台进行简单的实验。
2) 学习采用距离矢量算法(Distance Vector Algorithm)的动态路由。
3) 加深对TCP 拥塞控制与流量控制机制的理解,并且能够为实验需要简单修改NS2 的核心模块。
2. 实验内容
本实验分为三个实验过程,NS2平台的坏境搭建、NS2网络路由协议的仿真以及要简单修改NS2 的核心模块。此外,在实验过程中需要同学们自学linux操作系统的安装和使用(可在虚拟机中安装linux,本实验指导书使用的VMware虚拟机中的ubuntu操作系统),熟悉linux下的软件开发过程(如vi编辑器,gcc编译器),熟悉Tcl和Otcl脚本语言,熟悉C++编程语言。
实验3 《ip数据包捕获》
实验学时:2 实验地点:X203 实验日期:2014.05.05
1. 实验目的
JPCAP是一个能够捕获、发送网络数据包的java类库包。这个包用到了Winpcap/Libpcap和原始套接字API,目前,JPCAP在FreeBSD 3.x、Linux RedHat 6.1、Solaris 和Microsoft Windows 2000/XP系统上已经做过测试,并且支持Ethernet, IPv4, IPv6, ARP/RARP, TCP, UDP, ICMPv4协议。JPCAP是由在美国加利福尼亚大学Irvine分校(UCI)攻读博士学位的日本人Keita Fujiiy研制发布的,其主页为http://netresearch.ics.uci.edu/kfujii/ 。
JAVA语言虽然在TCP/UDP传输方面给予了良好的定义,但对于网络层以下的控制,却是无能为力的。JPCAP扩展包弥补了这一点。JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用Winpcap/Libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包。
通过本次实验熟悉使用JPCAP捕获数据包,并从捕获的数据了解ip数据包包含的信息。
2. 实验内容
1.使用Keita Fujiiy编写的基于JPCAP 的JPCAPDumper软件捕获网络数据,了解JPCAP能实现的功能。JPCAPDumper为英文程序,可参考反编译和汉化后的程序数据包捕获器,功能一致;
2.熟悉JPCAP API的常用类(ARPPacket、DatalinkPacket、IPAddress、IPPacket等);
3.熟悉JPCAP环境的安装步骤;
4.使用JPCAP编写简单的ip数据包捕获程序;
5.参考反编译和汉化的数据包捕获器代码,实现可视化ip数据包捕获程序(选作)。
3. 实验方法
使用MyEclipse进行相应的代码编程,加上做成可视化界面。
4. 实验步骤
1. JPCAP环境的安装
JPCAP实际上并非一个真正去实现对数据链路层的控制,而是一个中间件,JPCAP调用Winpcap/Libpcap,给JAVA语言提供一个公共的接口,从而实现了平台无关性,并能够捕获、发送网络数据包。因此要是用JPCAP首先需要安装Winpcap(Windows操作系统)或Libpcap(Linux操作系统)。
(1)安装Java SDK(http://java.sun.com)
(2)安装最新版本的LibPcap(对于Linux平台,http://ee.lbl.gov/) 或者WinPcap (对于Windows平台,http://winpcap.polito.it/)
(3)下载并解压缩Jpcap的最新版本(http://netresearch.ics.uci.edu/kfujii/jpcap/doc/index.html)。
(4)以Window XP系统为例,具体准备工作如下:
l 复制Jpcap.dll到C:\WINDOWS\system32
l 安装winpcap4.0.2
l 在Eclipse工程中导入 jpcap.jar
2. JPCAPDumper的使用
JPCAPDumper是Keita Fujiiy编写的基于JPCAP的网络分析软件,用于演示JPCAP的功能。JPCAPDumper为英文程序,对中文操作系统支持较差,可参考反编译和汉化后的程序数据包捕获器,两者功能一致。
3. 熟悉JPCAP API
阅读资料里提供的JPCAP API,熟悉JPCAP常用类和方法。
Jpcap0.4版本共有1个分析器接口14个分析器类,分别简介如下:
JpcapHandler :这个接口用来定义分析被捕获数据包的方法
ARPPacket :这个类描述了ARP/RARP包,继承了Packet类
DatalinkPacket :这个抽象类描述了数据链路层
EthernetPacket :这个类描述了以太帧包,继承DatalinkPacket类
ICMPPacket :这个类描述了ICMP包,继承了IPPacket类
IPAddress :这个类描述了IPv4和IPv6地址,其中也包含了将IP地址转换为域名的方法
IPPacket :这个类描述了IP包,继承了Packet类,支持IPv4和IPv6
IPv6Option :这个类描述了IPv6选项报头
Jpcap :用来捕获数据包
Jpcap.JpcapInfo :Jpcap的内部类, 它包含被捕获数据包的信息 (在jpcap0.4修改部分BUG之后不再使用这个类)
JpcapSender :它用来发送一个数据包
JpcapWriter :它用来将一个被捕获的数据包保存到文件
Packet :这个类是所有被捕获的数据包的基类
TCPPacket :这个类描述TCP包,继承了IPPacket类
UDPPacket :这个类描述了UDP包,继承了IPPacket类
4.简单的抓包程序
以抓取ip数据包为例,JPCAP抓包基本步骤为:绑定网络设备、抓包、分析。
5. 实验结果
部分源码:
import java.io.IOException;
import jpcap.JpcapCaptor;
import jpcap.NetworkInterface;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
publicclass IPPacketTest {
publicstaticvoid main(String[] args) {
//一、绑定网络设备
NetworkInterface[] devices = JpcapCaptor.getDeviceList();
for(NetworkInterface n : devices)
System.out.println(n.name + " | " + n.description);
System.out.println("-------------------------------");
JpcapCaptor jpcap = null;
int caplen = 1512;
boolean promiscCheck = true;
//caplen限制每一次收到一个数据包,只提取该数据包中前多少字节
//Promisc:设置是否混杂模式。处于混杂模式将接收所有数据包,若之后又调用了包过滤函数setFilter()将不起任何作用
//60这个参数主要用于processPacket()方法,指定超时的时间
try{
jpcap = JpcapCaptor.openDevice(devices[1], caplen, promiscCheck, 60);
}catch(IOException e){
e.printStackTrace();
}
//二、抓包
int i = 0;
while(i < 10){
Packet packet = jpcap.getPacket();
if((packet instanceof IPPacket) && (((IPPacket)packet).version == 4)){
i++;
IPPacket ip = (IPPacket)packet;//将包强制转换为IP包
System.out.println("版本:IPV4");
System.out.println("优先权:" + ip.priority);
System.out.println("区分服务:最大吞吐量:" + ip.t_flag);
System.out.println("区分服务:最高可靠性:" + ip.r_flag);
System.out.println("长度:" + ip.length);
System.out.println("标识:" + ip.ident);
System.out.println("DF:Don't Fragment:" + ip.dont_frag);
System.out.println("MF:More Fragment:" + ip.more_frag);
System.out.println("片偏移:" + ip.offset);
System.out.println("生存时间:" + ip.hop_limit);
String protocol = null;
switch(new Integer(ip.protocol)){
case 1:protocol = "ICMP";break;
case 2:protocol = "IGMP";break;
case 6:protocol = "TCP";break;
case 8:protocol = "EGP";break;
case 9:protocol = "IGP";break;
case 17:protocol = "UDP";break;
case 41:protocol = "IPv6";break;
case 89:protocol = "OSPF";break;
default:break;
}
System.out.println("协议:" + protocol);
System.out.println("源IP:" + ip.src_ip.getHostAddress());
System.out.println("目的IP:" + ip.dst_ip.getHostAddress());
System.out.println("源主机名:" + ip.src_ip);
System.out.println("目的主机名:" + ip.dst_ip);
System.out.println("--------------------------------------");
}
}
}
}