c语言网络抓包程序代码,基于C语言实现的Ping程序

本文介绍了基于C语言实现的Ping程序,通过发送ICMP回声请求消息来测试网络连接。程序首先解释了ICMP协议的基本概念,然后提供了C语言的源代码实现,包括报文填充、校验和计算以及发送和接收ICMP报文的函数。通过编译和运行,该程序可以显示网络延迟统计信息。
摘要由CSDN通过智能技术生成

【前言】Ping 是用于测试网络连接量的程序,利用它可以检查网络是否能够连通。Ping程序的实现原理非常简单,即发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。本文采用C语言编写一个ing功能的程序。

0.ICMP协议简介

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP协议是一种面向连接的协议,用于传输出错报告控制信息。它是一个非常重要的协议,它对于安全具有极其重要的意义。

它是族的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。

ICMP提供一致易懂的出错报告信息。发送的出错报文返回到发送原数据的设备,因为只有发送设备才是出错报文的逻辑接受者。发送设备随后可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报。但是ICMP唯一的功能是报告问题而不是纠正错误,纠正错误的任务由发送方完成。

我们在网络中经常会使用到ICMP协议,比如我们经常使用的用于检查网络通不通的命令(Linux和Windows中均有),这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如的Tracert命令也是基于ICMP协议的。

ICMP报文分为两种,一是错误报告报文,二是查询报文。每个ICMP报头均包含类型、编码和校验和这三项内容,长度为8位,8位和16位,其余选项则随ICMP的功能不同而不同。这两种ICMP类型报头格式如下:

a5a8ce6651048d7d41e613e2b7ed9cea.gif

1.程序源代码

/********************************************************

* 功能:实现PING功能

* 环境: GCC-4.2.4

* 作者:YSQ-NJUST,yushengqiangyu@163.com

* 备注:自由软件,主要用于学习、交流、共享。

*******************************************************/

#include #include #include #include #include #include #include #include #include #include #include #include

#define E_FAILD_FD -1

#define ICMP_DATA_LEN 20  /* ICMP负载长度 */

#define ICMP_ECHO_MAX 4  /* ECHO-REQUEST报文发送次数 */

#define ICMP_REQUEST_TIMEOUT 2  /* 超时时间间隔 */

/* ICMP报文发送与接收缓存 */

static unsigned char aucSendBuf[1024 * 1024] = {0};

static unsigned char aucRecvBuf[1024 * 1024] = {0};

/* 结构体定义 */

typedef struct tagIcmpStatic

{

unsigned int uiSendPktNum;

unsigned int uiRcvPktNum;

float fMinTime;

float fMaxTime;

float fArgTime;

}ICMP_STATIC_S;

/* 全局数据结构 */

ICMP_STATIC_S g_stPktStatic;      /* ICMP报文统计 */

struct timeval stSendTime = {0};  /* ECHO-REQUEST报文发送时间 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值