瀋陽工程學院
學生實驗報告
實驗室名稱:
實驗課程名稱:計算機網路
實驗專案名稱:icmp協議應用——ping解析
班級指導教師:
實驗日期:2023年12月06日試驗台編號:
批閱教師(簽字):
姓名學號成績:
一.實驗目的
1.掌握icmp原理,體會網路層程式設計的不同;
2.理解icmp報文的作用,了解基本的網路程式設計框架。
二.實驗內容
1. 解析ping程式的基本實現過程。
2. 體會icmp協議在ping程式中的應用。
3. 體會基本的c/s程式設計框架。
三.實驗前的準備
● 掌握icmp原理及相關概念。
● 掌握c語言程式設計知識。
● 掌握基本的網路程式設計內容
四.實驗要求及實驗軟硬體環境
【基本要求】
● 對ping程式進行除錯並執行實現。
● 解析ping程式的主要部分,從而體會icmp協議的應用。
● 完成此項實驗,完成實驗報告。
【實驗組織方式】
● 小組實驗
【實驗條件】
● 區域網環境下微機二台,程式設計軟體。
五.實驗步驟
1.熟悉ip以及icmp協議的工作機制;
2.熟悉建立原始套接字、ip報頭和icmp報頭;
3.體會icmp協議的作用與特點;
4.除錯icmp協議的ping實現程式;
5.參加答辯,並撰寫實驗報告
六.主要程式部分(c++語言實現)
#define win32_lean_and_mean
#include
#include
#include
#include
#define icmp_echo 8
#define icmp_echoreply 0
#define icmp_min 12
packet (just header)
typedef struct iphdr ipheader;
typedef struct _ihdr icmpheader;
#define status_failed 0xffff
#define max_packet 1024
#definexmalloc(s) (char*)heapalloc(getprocessheap(),heap_zero_memory,(s))
#define xfree(p) heapfree(getprocessheap(),0,(p))
ushort checksum(ushort *, int);
void fill_icmp_head(char *);
void decode_resp(char *,int ,struct sockaddr_in *);
void usage(char *progname)
int main(int argc, char **argv)
if (argc >1 )
strcpy(host,argv[1]);
else
if((sockraw=socket(af_i***,sock_raw,ipproto_icmp))==invalid_socket)
memset(&dest,0,sizeof(dest));
hp = gethostbyname(host/*argv[1]*/);
if (hp!=null)
else
fprintf(stderr,"unable to resolve %s\n",argv[1]);
exitprocess(status_failed);
}datasize=sizeof(icmpheader);
icmp_data = xmalloc(max_packet);
recvbuf = xmalloc(max_packet); if (!icmp_data
fprintf(stderr,"heapalloc failed %d\n",getlasterror());
exitprocess(status_failed);
}memset(icmp_data,0,max_packetfill_icmp_head(icmp_data);
while(1)
if (bwrote < datasizefprintf(stdout,"wrote %d bytes\n",bwrote);
bread=recvfrom(sockraw,recvbuf,max_packet,0,(structsockaddr*)&from,&fromlen);
if (bread == socket_error)
fprintf(stderr,"recvfrom failed: %d\n",wsagetlasterrorperror("revffrom failed.");
exitprocess(status_failed);
}decode_resp(recvbuf,bread,&from);
sleep(2000
closesocket(sockrawxfree(icmp_dataxfree(recvbufwsacleanup();
return 0;
}void fill_icmp_head(char * icmp_data
icmpheader *icmp_hdr;
icmp_hdr = (icmpheader*)icmp_data;
icmp_hdr->i_type = icmp_echoicmp_hdr->i_code = 0;
icmp_hdr->i_cksum = 0;
icmp_hdr->i_id= (ushort)getcurrentprocessidicmp_hdr->i_seq = 0;
}void decode_resp(char *buf, int bytes,struct sockaddr_in *from) {
實驗四ICMP報文格式及協議分析
1 分析icmp報文的格式 2 了解icmp報文的各種型別及其作用 3 通過觀察icmp報文的互動了解差錯和異常情況報告的實現過程。1 分析icmp報文的結構,熟悉各個欄位的內容 功能 格式和取值範圍 2 編輯icmp報文首部各字段的內容 3 單個或批量傳送已經編輯好的icmp報文 4 觀察icmp...
TCPIP詳解 卷一 協議 9 6ICMP路由器發現報文
在本章前面已提到過一種初始化路由表的方法,即在配置檔案中指定靜態路由。這種方法經常用來設定預設路由。另一種新的方法是利用icmp路由器通告和請求報文。一般認為,主機在引導以後要廣播或多播傳送乙份路由器請求報文。一台或更多台路由器響應乙份路由器通告報文。另外,路由器定期地廣播或多播傳送它們的路由器通告...
PELCO協議解析
pelco 派爾高 的監控器材在我國有很廣泛的應用。pelco有自己的傳輸控制協議,當它的產品配套使用時,可以互相相容。但在某些情況下,由於工程的需要,要求用其它裝置 比如電腦 來控制pelco的矩陣或鏡頭,這就要求充分了解pelco的傳輸協議。誒諾基數碼科技 的 解碼軟體可完全相容pelco協議,...