使用套接字实现ICMP协议

本文详细介绍了如何通过套接字编程技术来实现ICMP协议。内容包括IP协议头部结构的定义,以及相关的源代码实现,涉及到数据结构和多线程的知识。

//ip协议 结构头部定义


#pragma once
#include "stdafx.h"
#ifdef  USING_IP_HEADER
typedef struct   _ipheader
	{  
#if LITTLE_ENDIAN  
	unsigned char ihl:4;     //首部长度  
	unsigned char version:4; //版本   
#else  
	unsigned char version:4 ;//版本  
	unsigned char ihl:4 ;    //首部长度  
#endif  
	unsigned char tos;       //服务类型  
	unsigned short tot_len;  //总长度  
	unsigned short id;       //标志  
	unsigned short frag_off; //分片偏移  
	unsigned char ttl;       //生存时间  
	unsigned char protocol;  //协议  
	unsigned short chk_sum;  //检验和  
//	struct in_addr src_addr;  //源IP地址   /*unsigned int srcaddr;/*减少导入库,需要在引用的地方 转换为in_addr*/	  
	//struct in_addr dest_addr;  //目的IP地址   /*unsigned int destaddr;/*减少导入库,需要在引用的地方 转换为in_addr*/
    unsigned long src_addr;
    unsigned long dest_addr;
}IP_HEADER,*PIP_HEADER;
#endif //USING_IP_HEADER
#ifdef USING_IP_ICMP_HEADER
//ICMP 结构头
typedef struct _icmp_header{
	/*类型*/
	unsigned char icmp_type;
	/*代码*/
	unsigned char icmp_code;
	/*校检和*/
	unsigned short icmp_checksum;
	/*标识符,一般以进程号作为标识*/
	unsigned short icmp_id;
	/*序列号*/
	unsigned short icmp_seq;
    /*时间戳*/
	unsigned long  icmp_timestamp;
	}ICMP_HEADER,*PICMP_HEADER;

//ICMP 协议函数定义 头文件

 //解析ICMP协议包数据
  BOOL __stdcall Nw_ParseIcmp4PacketData(
	  /*ICMP协议数据包*/
	  __in void* pIcmpData,
	  /*pIcmpData的长度,长度必须匹配pIcmpData,否则导致内存访问越界*/
	  __in size_t IcmpDataLen,
	  /*ip结构*/
	  /*
#ifdef USING_IP_HEADER
	  __out_opt IP_HEADER* pIpHdr,
#else*/
	  __out_opt void** ppIpHdr,
//#en
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值