ping实验报告
沈 阳 工 程 学 院
学 生 实 验 报 告
实验室名称:信息工程系软件实验室
实验课程名称:计算机网络
实验项目名称:ICMP协议应用——Ping解析
班 级:
姓 名:
学 号:
实验日期:2012年04月28日 实验台编号:23
指导教师:
批阅教师(签字): 成绩:
一.实验目的
1) 掌握ICMP原理,体会网络层编程的不同;
2) 理解ICMP报文的作用,了解基本的网络编程框架。
二.实验内容
1) 解析Ping程序的基本实现过程。
2) 体会ICMP协议在Ping程序中的应用。
3) 体会基本的C/S编程框架。
三.实验前的准备
1) 掌握ICMP原理及相关概念。
2) 掌握C语言编程知识。
3) 掌握基本的网络编程内容
四.实验要求及实验软硬件环境
【基本要求】
对Ping程序进行调试并运行实现。
解析ping程序的主要部分,从而体会ICMP协议的应用。
完成此项实验,完成实验报告。
【实验组织方式】
小组实验
【实验条件】
局域网环境下微机二台,编程软件。
五.实验步骤
1.熟悉IP以及ICMP协议的工作机制2.熟悉3.体会ICMP协议的作用与特点;
4.调试ICMP协议的Ping实现程序;
5.参加答辩,并撰写实验报告#include
#include
#include
#define SEND_SIZE 32
#define PACKET_SIZE 4096
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0
#pragma comment(lib,"Ws2_32.lib")
struct icmp
{
unsigned char icmp_type;
//类型
unsigned char icmp_code;
//编码
unsigned short icmp_chksum;
//校验和
unsigned short icmp_id;
//标示符
unsigned short icmp_seq;
//顺序号
unsigned long icmp_data;
//数据
};
struct ip
{
unsigned char ip_hl:4;
//报头长度
unsigned char ip_v:4;
//版本号
unsigned char ip_tos;
//服务类型
unsigned short ip_len;
//总长度
unsigned short ip_id;
//标识
unsigned short ip_off;
//标志
unsigned char ip_ttl;
//生存时间
unsigned char ip_p;
//协议号
unsigned short ip_sum;
//报头校验和
unsigned long ip_src;
//源IP地址
unsigned long ip_dst;
//目的IP地址
};
char sendpacket[PACKET_SIZE];
char recvpacket[PACKET_SIZE];
struct sockaddr_in dest_addr;
struct sockaddr_in from_addr;
int sockfd;
int pid;
unsigned short cal_chksum(unsigned short *addr,int len);
int pack(int pack_no);
int unpack(unsigned char *buf,int len);
void send_packet(void);
void recv_packet(void);
int main(int argc, CHAR* argv[])
{
struct hostent *host;
struct protoent *protocol;
int timeout=1000;
int SEND_COUNT=4;
int i;
char *par_host;
char m_Input[100];
printf("Input IP: ");
gets(m_Input);
par_host=m_Input;
WORD wVersionRequested;
WSADATA wsaData;
int err