广州大学学生实验报告
开课学院及实验室: 计算机学院?2015年月
一、实验目得
初步掌握网络监听与分析技术得实现方法,从而加深对网络协议得理解。了解以太网得帧格式,认识TCP/IP得层次结构。
二、实验环境
1、安装了TCP/IP协议得Windows系统得计算机
2、VC++6、0开发环境
三、实验原理
在分层模型中,主要利用数据封装来实现不同系统间得通信,在发送数据经过时,每经过一层就会被增加上本层得头部信息。本实验要分析数据包,就一层一层得分析这些头部信息。
本实验用WinPcap进行捕获数据包,它工作在底层。以太网中传输得数据被称为“帧”,帧得格式如下:
头部:
图1:帧格式
WinPcap就是一个开源得、运行于Win32平台得体系结构,就是用于网络封包抓取得一套工具,包括一个内核级别得packetfilter,一个底层得DLL(packet、dl l)与一个高级得独立于系统得DLL(Wpcap、dll), packet、dll提供一个底层得API,可以直接访问网络设备驱动,Wpcap、dll就是一个强大得捕获程序库。
它为win32应用程序提供访问网络底层得能力,Winpcap不能阻塞、过滤或控制其她应用程序数据报得发收,它仅仅只就是监听共享网络上传送得数据包.本实验利用WinPcap提供得函数来设置网卡模式并捕获响应得数据包,进行解析.
四、实验内容及步骤
步骤(1):安装WinPcap驱动与DLL程序.在VC++中配置WinPcap,Tools—>optio ns->Directories,添加WinPcap得Include与Lib文件。如下:
图2:添加WinPcap库
步骤(2):新建MFCAppwizard(exe)工程,在打开得工程下,选择Project-〉Setti ngs得C/C++选项卡,选择Link选项卡,在Object/library modules中添加wpcap、
lib 、ws2_32、lib与packet、lib三个库文件(三者之间用空格隔开),使工程在编译连接得时候将WinPcap得响应得库模块加载进去.
步骤(3):在Microsoft VisualC++6、0环境下设计界面,界面如下:
图3:界面设计
View-->ClassWizard定义控件变量。
步骤(4):在CapturePacket1Dialog、h添加头文件,把相应得库文件添加到工程里。
#include<winsock2、h>
#include "pcap、h"
#include "remote-ext、h”
步骤(5):在OnInitDialog()中添加初始化界面得代码。获取控件得句柄,对窗口进行设计,如:对Listbox得初始化:
//初始化Listbox:
DWORD dwStyle;
dwStyle =m_list、GetStyle();//列表类型
dwStyle |= LVS_EX_GRIDLINES |LVS_EX_FULLROWSELECT |LVS_SHOW SELALWAYS ; //绘制表格选择整行
m_list、SetExtendedStyle(dwStyle);//扩展类型
m_list、InsertColumn(0,”时间");//插入一列:
m_list、SetColumnWidth(0,80);//下面可以根据自己得需要插入列
步骤(6):定义相关得结构体
typedef struct ip_address
{
?u_char byte1;
u_char byte2;
u_char byte3;
u_charbyte4;
}
ip_address;
/* IPv4 header */
typedef structip_header{
u_char ver_ihl; // Version (4 bits) + Internet header length(4 bits)
?u_chartos; //Type of service
u_short tlen;//Total length
u_shortidentification; // Identification
u_short flags_fo; // Flags (3bits)+Fragment offset (13 bits)
u_char ttl;// Time to live
?u_char proto;//Protocol
?u_short crc; // Header checksum
?ip_address saddr; // Source address
?ip_address daddr; // Destination address
?u_int op_pad; // Option + Padding
?}ip_header;
typedef struct udp_header{
u_short sport; // Source port
u_shortdport; // Destination port
?u_short len; // Datagram length
?u_short crc; // Checksum
?}udp_header;
//mac头部结构
typedef struct
{
BYTE DesMacAddr[6];
?BYTE SrcMacAddr[6];
WORD LengthOrType;//数据长度或类型
}MAC_HEADER;
//MAC帧类型定义
constu_short MAC_TYPE_IP=0x0800;
const u_short MAC_TYPE_ARP=0x0806;
const u_shortMAC_TYPE_RARP=0x08035;
步骤(7):在OnInitDialog()获取网络设备列表,调用函数原型如下
int pcap_findalldevs_ex(
char *source,
struct pcap_rmthauth auth,
pcap_if_t **addevs,
char*errbuf
)
alldevs参数指向获取得网络接口列表得第一个元素,网络接口链表中每一个元素都就是pcap_if_t结构,在pcap、h中都已经定义。本程序实现得具体代码如下:在获得了网络设备列表后,下一步就要获取网络接口卡得IP地址、MAC地址、网络掩码、广播地址。获取Ip地址得具体实现代码如下(仅供参考):
for( i = 0; pHost!=NULL &&pHost-〉h_addr_list[i]!= NULL; i++ )
{
?char str[100];
?char addr[20];??
?LPCSTR psz=inet_ntoa (*(struct in_addr *)pHost->h_addr_list[i]);
??str3=”IP地址就是:”;
str3=str3+psz;
?m_list3、InsertItem(m_list3、GetItemCount(),str3);//加入列表项
?}
图4:获取网络适配器窗口
步骤(8):双击“捕获”按钮,构造函数,在此过程中要打开网络接口,为了捕获到网络经过某网络接口设备得所有数据包,所以把网卡设置为混杂模式。调用函数pcap_open()(此函数可以在MSDN中查找此函数得具体使用方法)(仅供参考)
pcap_if_t *d;
pcap_t *adhandle;
/* Open the device*/
if ((adhandle= pcap_open(d—>name, //设备名
65536,
PCAP_OPENFLAG_PROMISCUOUS, //
混杂模式
1000, // 超时时间
NULL;//在远程设备中捕获数据包时使用,在本实
验中不适用,设置为NULL
errbuf //error buffer
) ) == NULL)
打开网络适配器后,下一步就就是编辑与设置过滤器,可以根据自己得需要选择性得捕获网络数据包.本实验选择IP协议,定义
char packet_filter[]=”ip”;
if(pcap_pile(adhandle,&fcode, packet_filter,1, netmask)<0)
{//add your code
pcap_freealldevs(alldevs);
}
//setthe filter 设置过滤器
if(pcap_setfilter(adhandle,&fcode)〈0)
{add your code;
pcap_freealldevs(alldevs);
}
步骤(9):前期工作做完,就开始获取数据包,在本实验中通过创建线程来实现抓包得过程,实现代码(仅供参考):
/* start the capture 抓包线程*/
?DWORD nThreadId=0;
? handle=(HANDLE)::CreateThread(NULL,0,mythread,(LPVOID)this,CREATE_SUSPENDED,&nThreadId);
?SetThreadPriority(handle,THREAD_PRIORITY_NORMAL);
ResumeThread(handle);
其中mythread为在CapturePacket1Dlg、cpp自定义得线程名称
DWORD WINAPI mythread(LPVOID lParam)
{
CWinpcapdialogDlg*p=(CWinpcapdialogDlg*)lParam;
time_t local_tv_sec;
?struct tm *ltime;
char timestr[16];
ip_header *ih;
udp_header *uh;
?u_int ip_len;
}
步骤(10):在mythread()中分析捕获得数据包,实现代码(仅供参考,有省略): while((res=pcap_next_ex(p->adhandle,&p->header,&p->pkt_data))>=0)
{
?if(res==0)
??continue;
else
{
?//处理捕获得包
local_tv_sec = p—>header->ts、tv_sec;
ltime=localtime(&local_tv_sec);
strftime( timestr, sizeof timestr, "%H:%M:%S", ltime); //获取时间
ih = (ip_header *)(p-〉pkt_data +14); //ih 指向IP报文得首部
ip_len = (ih—>ver_ihl & 0xf)* 4;
uh = (udp_header *) ((u_char*)ih + ip_len); // uh 指向UDP报文得首部
sport=ntohs(uh—>sport); //网络序转化为主
机序
dport=ntohs(uh->dport);
}
处理完捕获得数据就关闭线程
DWORD m;
GetExitCodeThread(handle,&m);
?::ExitThread(m);
五、实验结果
图5:结果图
经过上述步骤得设计后,执行VC++程序,可以清楚得瞧到数据包被分析后得结果。六、实验心得
通过本次试验虽然软件安装及配置等方面花费了很多时间(对这方面得知识了解不足),但就是让我进一步得了解了捕获以及网络协议等,也让我初步认识了关于网络安全。对于一些不了解得代码,可以通过网络查询来弥补自己得不足。
广州大学学生实验报告 开课学院及实验室:计算机学院 2015年月11日10日 一、实验目的 理解上述知识点所涉及的基本概念并学会使用这些工具测试网络的状态及从网上获取信息。 二、实验环境 安装了TCP/IP协议的Windows系统的计算机 三、实验内容 1、检测本机的MAC地址 2、检测本机网关的MAC地址 3、检测本地域名服务器的IP地址 4、检测DHCP服务器的MAC地址(考虑两种网络环境:实验室网络环境和宿舍网络环境) 5、检测去往https://www.doczj.com/doc/0817365869.html,的路径MTU 6、检测本机的路由表 7、检测去往https://www.doczj.com/doc/0817365869.html,n网络的可用性、回程响应时间及经过的路由器个数。 8、检测本机的所有有效连接,及各连接的端口号 9、往路由表添加一条路由,去往主机https://www.doczj.com/doc/0817365869.html,的路由,经过邻居同学的主机转发 10、课后实验并写入实验报告: ●为了确定你所在组织的路由是否稳定,使用路由跟踪程序来找到去往每一网络中 的一条路由,重复测试一次,再连续测试几天,看看路由有变化吗? ●挑选10个Internet中较远的目的地,进行前一练习中的实验,看看路由变化的频 度。 ●上网收集网络测试工具并测试使用方法。 四、实验步骤、记录和结果 实验1:检测本机的MAC地址 用ipconfig/all命令可以查看到本机的信息,包括MAC地址、IP地址等
实验2:检测本机网关的MAC地址:从上述可知网关ip为202.192.33.254,再输入Arp –a 202.192.33.254 由ipconfig/all命令可得到本机网关的IP地址为:172.18.36.254,通过ping网关的IP 地址后用arp -a命令可得到本机网关的MAC地址为:00-0c-db-c9-71-c0 实验3:检测本地域名服务器的IP地址:直接输入ping https://www.doczj.com/doc/0817365869.html, 由ipconfig/all命令可得到本地域名服务器的IP地址为:202.192.18.10
苏州市职业大学 计算机网络与WebGIS实验报告 姓名: 学号: 学院: 班级:
实验一利用HTML制作表单 1.实验目的 了解掌握HTML语言:基础知识、编辑文档、超链接;图像与多媒体、表格、框架和表单 2.实验要求 硬件:GIS机房配置已达到要求; 软件:Win2000/WIN XP、记事本 3.实验内容 利用所学HTML语言完成表单制作,界面可参考图1,在制作过程中了解HTML文档的基本格式,尤其是表单标签