#include <stdio.h>
#include <WINSOCK2.H>
#include <windows.h>
#include <ws2tcpip.h> //IP_TTL
#pragma comment(lib,"ws2_32.lib")
//ICMP首部结构体
typedef struct tagICMPHEADER
{
unsigned char type;//类型
unsigned char code;//代码
unsigned short checknum;//检验和
unsigned short id;//标识符
unsigned short seq_num;//序列号
}ICMPHEADER;
//IP首部结构体
typedef struct _ip_hdr
{
unsigned char ihl:4; //首部长度
unsigned char version:4, //版本
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 srcaddr; //源IP地址
struct in_addr dstaddr; //目的IP地址
}IPHEADER;
//计算检验和
unsigned short checksum(unsigned short *buffer, int size)
{
unsigned long cksum = 0; // 将所有的16数相加
while (size > 1)
{
cksum += *buffer++;
size -= sizeof(unsigned short);
}
if (s
ping 程序(vc6.0 原始套接字实现)
最新推荐文章于 2021-05-20 15:38:45 发布
该博客介绍了如何在VC6.0环境下,利用原始套接字(SOCK_RAW)和ICMP协议实现一个简单的ping程序。通过设置ICMP头部信息,计算校验和,并发送到指定的目标IP地址。程序还会接收并解析回应报文,判断是否成功收到ICMP回应。
摘要由CSDN通过智能技术生成