• 大小: 279.62 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-09-16
  • 语言: 其他
  • 标签: ping  VC++  

资源简介

这是一个用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


评论

共有 条评论