ntrip客户端C语言实现,[原创]C语言模拟Ping

本文介绍了如何使用C语言模拟实现Ping命令,通过原始套接字操作,详细展示了发送和接收ICMP数据包的过程。同时,文章也提到了ntrip客户端的C语言实现,涉及TCP/IP协议和网络通信技术。
摘要由CSDN通过智能技术生成

[原创]C语言模拟Ping

最近在学习TCP/IP协议。在以前套接字基础上又学习了原始套接字的使用。并喜欢上了这个东西-因为它功能太强大了。

下面是我用原始套接字实现的Ping.exe命令

//Ping模拟  By RedIce

//E-mail:redice@see.xidian.

//http://redice.1.

#include //Winsock API头文件

#include

#include

#pragma comment(lib,"ws2_32.lib") //Winsock API连接库文件

/*IP头 结构*/

//BYTE<=>unsigned char,自定义类型

//USHORT<=>unsigned short,自定义类型

//UINT<=>unsigned int,自定义类型

//ULONG<=>unsigned long,自定义类型

typedef struct iphdr{

BYTE  h_len:4;    //首部长度指的是IP层头部占32 bit字的数目

//(也就是IP层头部包含多少个4字节,实际字节数4*hlen),

BYTE  version:4; //IP版本号

BYTE  tos;      //服务类型TOS

USHORT total_len; //IP包总长度

USHORT ident;     //标识

USHORT frag_and_flags;  //标志位

BYTE ttl;      //生存时间

BYTE proto;    //协议

USHORT checksum; //IP首部校验和

UINT  sourceIP; //源IP地址(32位)

UINT  destIP;  //目的IP地址(32位)

}IpHeader;

/*ICMP头 结构*/

typedef struct _ihdr{

BYTE i_type;   //类型 发出的ICMP为8(ICMP_ECHO_REQUEST),接受到的ICMP为0

BYTE i_code;   //代码

USHORT i_cksum; //ICMP包校验和

USHORT i_id;    //识别号(一般用进程号作为标识号)

USHORT i_seq;   //报文序列号(一般设置为0)

ULONG timestamp;//时间戳

}IcmpHeader;

USHORT checksum(USHORT *,int); //函数声明:计算ICMP包校验和

void usage();//函数声明:使用帮助

void main(int argc,char *argv[])

{

char *ICMP_DEST_IP;//目标主机IP

WSADATA wsaData;

struct sockaddr_in dest,from;//地址结构

int datasize; //ICMP报文大小

int ret;//API函数 返回值

int i;//循环计数器

int attachsize=32;//ICMP数据包附加字节数,本程序默认为32字节

int n=4;//发送数据包个数,本程序默认发送4个ICMP数据包

int timeout;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值