📄 icmp.lst
字号:
C51 COMPILER V7.06 ICMP 12/07/2004 08:46:35 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE ICMP
OBJECT MODULE PLACED IN icmp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE icmp.c DEBUG OBJECTEXTEND
stmt level source
1 /*********************************************************************
2 *文件名称: icmp.c
3 *文件标识:
4 *摘 要: 测试主机的可达性,其中主要的操作是ping
5 *
6 *********************************************************************/
7 #define ICMP_GLOBALS
8 #include "net_cfg.h"
9
10 /**********************************************************************
11 **函数原型: void Ping_Request( )
12 **入口参数: 无
13 **出口参数: 无
14 **返 回 值: 无
15 **说 明: 发送PING请求报文,测试对方主机的可达性
16 ************************************************************************/
17 void Ping_Request()
18 {
19 1 TxdNetBuff.EtherFrame.DestMacId[0]=Ping_MAC.words[0]; //填充以太网协议目的物理地址字段
20 1 TxdNetBuff.EtherFrame.DestMacId[1]=Ping_MAC.words[1];
21 1 TxdNetBuff.EtherFrame.DestMacId[2]=Ping_MAC.words[2];
22 1 TxdNetBuff.EtherFrame.NextProtocal=0x0800; //以太网协议的下层协议为IP协议
23 1 TxdNetBuff.IpFrame.VerandIphLen=0x45; //IP版本和首部长度各占VerandIphLen字段的4位,版本4
-,占用高4位
24 1 //首部长度5*4=20,单位字节
25 1 TxdNetBuff.IpFrame.ServerType=0x00; //服务类型,默认为0
26 1 TxdNetBuff.IpFrame.TotalLen=60; //IP数据报总长度40字节,其中由总长度
27 1 //减去首部长度即可得数据报长度
28 1 TxdNetBuff.IpFrame.ttl=0x80; //IP生存时间
29 1 TxdNetBuff.IpFrame.FrameIndex=FrameIndex; //帧序号
30 1 FrameIndex++; //
31 1 TxdNetBuff.IpFrame.Segment=0x0000; //标志及段偏移都为0
32 1 TxdNetBuff.IpFrame.NextProtocal=0x0001; //IP的下层协议为ICMP协议:TCP
33 1 TxdNetBuff.IpFrame.Crc=0;
34 1 TxdNetBuff.IpFrame.DestId[0]=Ping_Ip_Address.words[0]; //填充目的IP地址
35 1 TxdNetBuff.IpFrame.DestId[1]=Ping_Ip_Address.words[1];
36 1 TxdNetBuff.IpFrame.SourceIp[0]=My_Ip_Address.words[0]; //填充源IP地址
37 1 TxdNetBuff.IpFrame.SourceIp[1]=My_Ip_Address.words[1];
38 1 TxdNetBuff.IpFrame.Crc=CreateIpHeadCrc(); //产生IP数据报首部检验和,CreateIpHeadCrc()在gl
-obal.c中定义
39 1 TxdNetBuff.IcmpFrame.type=0x08; //表示该ICMP数据帧为PING请求
40 1 TxdNetBuff.IcmpFrame.Crc=0;
41 1 TxdNetBuff.IcmpFrame.id=0x0300; //标识符
42 1 TxdNetBuff.IcmpFrame.seq=FrameIndex; //ICMP报文序号
43 1 TxdNetBuff.IcmpFrame.Crc=CreateIcmpCrc(); //产生ICMP报文的校验和,CreatIcmpCrc()在global.
-c中定义
44 1 Send_Packet(&TxdNetBuff,74); //发送数据包
45 1 }
46 //==========================================================
47 /**********************************************************************
48 **函数原型: void Ping_Answer( )
49 **入口参数: 无
50 **入口参数: 无
51 **返 回 值:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -