资源简介
这是一个用C语言写的简单的ping 程序,基本实现了ping程序的功能,程序结构简洁,各个模块都有说明,我想应该很容易明白,希望对大家有点帮助。开发环境是VC++6.0~~
代码片段和文件信息
// ping.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include
#include
#include
#include
#include
#pragma comment(lib“WS2_32“)
typedef struct IPHeader {
UCHAR iph_verlen; // Version and length
UCHAR iph_tos; // Type of service
USHORT iph_length; // Total datagram length
USHORT iph_id; // Identification
USHORT iph_offset; // Flags fragment offset
UCHAR iph_ttl; // Time to live
UCHAR iph_protocol; // Protocol
USHORT iph_xsum; // Header checksum
ULONG iph_src; // Source address
ULONG iph_dest; // Destination address
} IPHeader;
USHORT checksum(USHORT *buffint size)
{
unsigned long cksum = 0;
//将数据以字单位累加到cksum 中
while(size > 1)
{
cksum += *buff++;
size -= sizeof(USHORT);
}
//如果为奇数,将最后一个字节扩展为双字,再累加到cksum中
if(size)
{
cksum += *(UCHAR*) buff;
}
//将cksum的高16位和低16位相加,去反后得到校验和
cksum = (cksum >> 16)+(cksum & 0xffff);
cksum += (cksum >> 16);
return (USHORT)(~cksum);
}
//定义ICMP头的数据结构
typedef struct icmp_hdr
{
unsigned char icmp_type; //消息类型
unsigned char inmp_code; //代码
unsigned short icmp_checksum; //校验和
//回显头
unsigned short icmp_id; //标志请求的ID号
unsigned short icmp_sequence; //序列号
unsigned long icmp_timestamp; //时间戳
} ICMP_HDR*PICMP_HDR;
int main()
{
printf(“please input IP address:\n“);
char szDestIp[20];
scanf(“%s“szDestIp);
// SOCKET sRaw = ::socket(PF_INETSOCK_RAWIPPROTO_IP);
WSADATA wsaData;
if(WSAStartup(MAKEWORD(22)&wsaData)!=0)
{
printf(“启动失败!\n“);
return 0;
}
//创建原始套接字
SOCKET sRaw = WSASocket(AF_INET SOCK_RAW IPPROTO_ICMP NULL 0WSA_FLAG_OVERLAPPED);
//设置接收超时
int timeout=2000;
if(setsockopt(sRaw SOL_SOCKET SO_RCVTIMEO (char*)&timeout sizeof(timeout))== SOCKET_ERROR)
{
printf(“Setting Socket Wrong“);
return 0;
}
//设置目的地址
SOCKADDR_IN dest;
dest.sin_family = AF_INET;
dest.sin_port = htons(0);
if(INADDR_NONE==(dest.sin_addr.S_un.S_addr = inet_addr(szDestIp)))
{
printf(“ip address wrong“);
}
//创建一个 ICMP 封包
char buff[sizeof(ICMP_HDR)+32];
ICMP_HDR*pIcmp = (ICMP_HDR*)buff;
pIcmp->icmp_type = 8;
pIcmp->inmp_code = 0;
pIcmp->icmp_id = (USHORT)::GetCurrentProcessId();
pIcmp->icmp_checksum = 0;
pIcmp->icmp_sequence = 0;
memset(&buff[sizeof(ICMP_HDR)]‘E‘32); //填充数据部分,可以任意 void *memset( void *dest int c size_t count );Sets buffers to a specified character.
//开始发送和接收ICMP封包
USHORT nSeq = 0;
char recvBuf[1024];
SOCKADDR_IN from; //一个结构体
int nLen = sizeof(from);
while (TRUE)
{
static int nCount = 0;
int nRet;
nCount++;
if(nCount == 4) break;
pIcmp->icmp_checksum = 0;
pIcmp->icmp_timestamp = ::GetTickCount();
pIcmp->icmp_sequence = nSeq++;
pIcmp->icmp_checksum = checksum((USHORT*)buffsizeof(ICMP_HDR)+32);
nRet = ::sendto (sRawbuffsizeof(ICMP_HD
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 731 2008-12-08 16:43 ping\ping.h
文件 667 2008-12-26 18:24 ping\StdAfx.h
文件 1196 2008-12-26 18:24 ping\ReadMe.txt
文件 4512 2008-12-26 18:24 ping\ping.dsp
文件 533 2008-12-26 18:24 ping\ping.dsw
文件 58368 2009-01-02 17:20 ping\ping.ncb
文件 1308 2008-12-29 13:32 ping\ping.plg
文件 311 2008-12-26 18:40 ping\StdAfx.cpp
文件 3676 2008-12-29 13:32 ping\ping.cpp
文件 53760 2009-01-02 17:20 ping\ping.opt
文件 164864 2009-01-02 16:38 ping\Debug\vc60.idb
文件 187100 2008-12-26 18:40 ping\Debug\ping.pch
文件 258048 2008-12-29 13:32 ping\Debug\vc60.pdb
文件 167984 2008-12-29 13:32 ping\Debug\ping.exe
文件 443392 2008-12-29 13:32 ping\Debug\ping.pdb
文件 11439 2008-12-26 18:40 ping\Debug\StdAfx.obj
文件 198044 2008-12-29 13:32 ping\Debug\ping.ilk
文件 50290 2008-12-29 13:32 ping\Debug\ping.obj
目录 0 2009-01-03 15:37 ping\Debug
目录 0 2009-01-03 15:37 ping
----------- --------- ---------- ----- ----
1606223 20
- 上一篇:lcd12684显示程序
- 下一篇:DICOM图像读取以及窗宽,窗位调整
相关资源
- 操作系统实验综合设计【附代码】
- VC 编程实现活动主机扫描源代码
- vc 编写的基于TCP协议的客户/服务器
- 树状导航菜单的制作
- window ping命令加时间并记录日志
- VC工程转Qt工程文件的工具
- Exact Conditions of Blow-up and Global Existen
- Orientation-resolved 3d5/2 energy shift of Rh
- Photoluminescence and photoabsorbance blue shi
- Coordination-resolved 4f binding energy shift
- API实现ping测试源码通信测试_API测试源
- Co-doping effect on the martensitic transforma
- 自动获取本机网关并自动ping网管的
- 赤裸裸的统计学_Naked_Statistics_Strippi
- 二进制方式打包和解包文件
- Shopping+在线购物商城的实现Spring+Spr
- vc写的一个游戏里面三维场景漫游
- 依据ICMP协议实现网络工具ping,并将时
- Adaptive Back-Stepping Sliding Mode Attitude T
- 手把手 网络抓包学习视频 跟着pingi
- 学生成绩档案管理系统—保证可用
- springmvc_2020.rar
- 快递单邮政编码识别系统的实现
- 学生信息管理系统,非常详细
- turtlebot上hokuyo和gmapping建图和amcl导航
- Lidar Odometry and mapping in real time
- ping程序的设计与实现.pdf
- 人脸识别系统设计-毕业设计
- [Damelio_Robert]_The_Basics_of_Process_Mapping
- Simulating planar reflection using two-pass re
评论
共有 条评论