• 大小: 1.1MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-30
  • 语言: 其他
  • 标签: ping  socket  

资源简介

基于socket的网络编程技术,用到SOCK_RAW的原始套接字类型。里面对简单ICMP协议和IP协议有着很完整的诠释和定义。可以交流zhaquanmin@163.com

资源截图

代码片段和文件信息

// SOCK_RAW.cpp : Defines the entry point for the console application.
// 在project->setting->Debug中program arguments输入IP地址   测试程序:127.0.0.1

#include 
#include 
#include 
#include “PING.h“


//函数声明
void Ping(LPCSTR pstrHost);
void ReportError(LPCSTR pstrFrom);
int WaitForEchoReply(SOCKET s);
u_short in_cksum(u_short *addrint len);



//ICMP回送请求和应答函数声明
int SendEchoRequest(SOCKETLPSOCKADDR_IN);
DWORD RecvEchoReply(SOCKETLPSOCKADDR_INu_char*);



//主程序
void main(int argcchar **argv)
{
  WSADATA wsaData;
  WORD wVersionRequested=MAKEWORD(11);   //Winsock1.1
  int nRet;
  
  //命令行参考检查
  if(argc!=2)
  {
  fprintf(stderr“\nUsage:ping hostname\n“);
  return;
  }
  
  //初始化Winsock
  nRet=WSAStartup(wVersionRequested&wsaData);
  if(nRet)
  {
  fprintf(stderr“\nError initializing Winsock\n“);
  }
  
  //Winsock版本检查
  if(wsaData.wVersion!=wVersionRequested)
  {
  fprintf(stderr“\nWinsock version not supported\n“);
  return;
  }

  //调用Ping函数
  Ping(argv[1]);

  //释放Winsock
  WSACleanup();
}



///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//Ping()函数
//调用SendEchoRequest()和RecvEchoReply()函数并输出结果
void Ping(LPCSTR pstrHost)
{
SOCKET rawSocket;
LPHOSTENT lpHost;
struct sockaddr_in saDest;
struct sockaddr_in saSrc;
DWORD dwTimeSent;
DWORD dwElapsed;
u_char cTTL;
int nLoop;
int nRet;

//创建一个原始套接口
rawSocket=socket(AF_INETSOCK_RAWIPPROTO_ICMP);
    if(rawSocket==SOCKET_ERROR)
{
        ReportError(“socket()“);
        return;
}

    //根据主机名查询主机地址
// lpHost=gethostbyname(pstrHost);
saDest.sin_addr.s_addr = inet_addr(pstrHost);
    //根据主机地址查询主机名
lpHost=gethostbyaddr((char *)&saDest.sin_addr4AF_INET);
if(lpHost==NULL)
    {
fprintf(stderr“\nHost not found:%\n“pstrHost);
return;
}


//设置目标套接口地址
saDest.sin_addr.s_addr=*((u_long FAR*)(lpHost->h_addr));
saDest.sin_family=AF_INET;
saDest.sin_port=0;


//输出Ping程序的提示信息例如进行本机Ping时,输出:Pinging localhost [127.0.0.1] with 32 bytes of data:
printf(“\nPinging  localhost srvhostname %s to desthostIp %s [$s] with %d bytes of data:\n“
      lpHost->h_name
  inet_ntoa(saDest.sin_addr)
  REQ_DATASIZE);


//控制Ping执行的次数
for(nLoop=0;nLoop<4;nLoop++)
{

//发送ICMP回送请求
SendEchoRequest(rawSocket&saDest);

//使用select()等待接收回送的数据
nRet=WaitForEchoReply(rawSocket);
if(nRet==SOCKET_ERROR)
{
ReportError(“select()“);
break;
}
if(!nRet)
{
    printf(“\nTimeOut“);     //输出超时提示
break;
}

//接收应答
dwTimeSent=RecvEchoReply(rawSocket&saSrc&cTTL);

//计算传输时间,并输出提示信息。如:Reply from:127.0.0.1:bytes=32time=0ms TTL=128
        dwElapsed=GetTickCount()-dwTimeSent;
printf(“\nReply from: %s: bytes=%d time=%ldms TTL=%d“
    inet_ntoa(saSrc.sin_addr)
REQ_DATASIZE
dwElapsed
cTTL);
}

pri

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     155742  2009-08-10 17:19  ping\Debug\ping.exe

     文件     177612  2009-08-10 17:19  ping\Debug\ping.ilk

     文件      20888  2009-08-10 17:19  ping\Debug\ping.obj

     文件    3570220  2009-08-10 17:19  ping\Debug\ping.pch

     文件     328704  2009-08-10 17:19  ping\Debug\ping.pdb

     文件     140288  2009-08-10 17:19  ping\Debug\vc60.idb

     文件      77824  2009-08-10 17:19  ping\Debug\vc60.pdb

     目录          0  2009-08-10 17:19  ping\Debug

     文件       5639  2009-07-30 21:21  ping\ping.cpp

     文件       3416  2009-08-10 17:18  ping\ping.dsp

     文件        533  2009-08-10 17:18  ping\ping.dsw

     文件       1509  2009-07-30 22:27  ping\PING.H

     文件      41984  2009-08-10 17:19  ping\ping.ncb

     文件      53760  2009-08-10 17:19  ping\ping.opt

     文件       1163  2009-08-10 17:19  ping\ping.plg

     文件       1220  2008-01-14 20:53  ping\ReadMe.txt

     文件        295  2008-01-14 20:53  ping\StdAfx.cpp

     文件        769  2008-01-14 20:53  ping\StdAfx.h

     目录          0  2009-08-10 17:19  ping

----------- ---------  ---------- -----  ----

              4581566                    19


评论

共有 条评论