ICMP協議應用Ping解析

2021-03-04 09:58:14 字數 2968 閱讀 7131

瀋陽工程學院

學生實驗報告

實驗室名稱:

實驗課程名稱:計算機網路

實驗專案名稱: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協議,...