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

资源简介

RAW模式的SOCKET编程 PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等; 2、具体内容 1) 定义数据结构需要定义好IP数据报、ICMP包等相关的数据结构; 2) 程序实现在WINDOWS环境下实现PING程序; 3) 程序要求在命令提示符下输入: PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4次响应。返回

资源截图

代码片段和文件信息

// ping.cpp : 定义控制台应用程序的入口点。
#include
#include
#include

#define SEND_SIZE 32 
#define PACKET_SIZE 4096
#define ICMP_ECHO 8
#define ICMP_ECHOREPLY 0

#pragma comment(lib“Ws2_32.lib“)

struct icmp
{
unsigned char icmp_type;    //类型
unsigned char icmp_code;    //编码
unsigned short icmp_chksum; //校验和
unsigned short icmp_id;     //标示符
unsigned short icmp_seq;    //顺序号
unsigned long icmp_data;    //数据
};

struct ip
{
unsigned char ip_hl:4;       //报头长度
unsigned char ip_v:4;        //版本号
unsigned char ip_tos;        //服务类型
unsigned short ip_len;       //总长度
unsigned short ip_id;        //标识
unsigned short ip_off;       //标志
unsigned char ip_ttl;        //生存时间
unsigned char ip_p;          //协议号
unsigned short ip_sum;       //报头校验和
unsigned long ip_src;        //源IP地址
unsigned long ip_dst;        //目的IP地址
};

char sendpacket[PACKET_SIZE];
char recvpacket[PACKET_SIZE];
struct sockaddr_in dest_addr;   
struct sockaddr_in from_addr;
int sockfd;
int pid;

unsigned short cal_chksum(unsigned short *addrint len);
int pack(int pack_no);
int unpack(unsigned char *bufint len);
void send_packet(void);
void recv_packet(void);

int main(int argc CHAR* argv[])
{
struct hostent *host;
struct protoent *protocol;
int timeout=1000;
int SEND_COUNT=4;
int i;
char *par_host;
char m_Input[100];
printf(“Input IP: “);
gets(m_Input);
par_host=m_Input;

WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2 2 );
err = WSAStartup( wVersionRequested &wsaData );
if ( err != 0 )  return;
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return; 
}                                                                     

if( (protocol=getprotobyname(“icmp“) )==NULL)    //返回对应于给定协议名的包含名字和协议号

printf(“getprotobyname error\n“);           //的protoent结构指针
exit(1);
}
if( (sockfd=socket(AF_INETSOCK_RAWprotocol->p_proto) )<0)
{   
printf(“socket error\n“);
exit(1);
}                                                                         

if(setsockopt(sockfdSOL_SOCKETSO_RCVTIMEO(char*)&timeoutsizeof(timeout))<0)  //设置套接口的选项
fprintf(stderr“failed to set recv timeout: %d\n“WSAGetLastError());
if(setsockopt(sockfdSOL_SOCKETSO_SNDTIMEO(char*)&timeoutsizeof(timeout))<0)
fprintf(stderr“failed to set send timeout: %d\n“WSAGetLastError());       

memset(&dest_addr0sizeof(dest_addr));
dest_addr.sin_family=AF_INET; 
if(host=gethostbyname(par_host) )        // 返回对应于给定主机名的主机信息                            
{
     memcpy( (char *)&dest_addr.sin_addrhost->h_addrhost->h_length);
//resolve address to hostname
if(host=gethostbyaddr(host->h_addr4PF_INET))                      
par_host=host->h_name;          
}
else if( dest_addr.sin_addr.s_addr=inet_addr(par_host)==INADDR_NONE)
{
printf(“Unkown host %s\n“par

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

     文件     196695  2009-12-30 10:51  Ping\Debug\Ping.exe

     文件     209128  2009-12-30 10:51  Ping\Debug\Ping.ilk

     文件      21349  2009-12-30 10:51  Ping\Debug\Ping.obj

     文件    3644536  2009-12-30 10:51  Ping\Debug\Ping.pch

     文件     377856  2009-12-30 10:51  Ping\Debug\Ping.pdb

     文件     148480  2009-12-30 10:51  Ping\Debug\vc60.idb

     文件      77824  2009-12-30 10:51  Ping\Debug\vc60.pdb

     文件       5627  2009-12-30 10:51  Ping\Ping.cpp

     文件       3377  2009-12-30 10:51  Ping\Ping.dsp

     文件        516  2009-12-30 10:51  Ping\Ping.dsw

     文件      33792  2009-12-30 10:51  Ping\Ping.ncb

     文件      48640  2009-12-30 10:51  Ping\Ping.opt

     文件        736  2009-12-30 10:51  Ping\Ping.plg

     文件     275968  2009-12-31 20:25  Ping\报告.doc

     目录          0  2009-12-30 10:51  Ping\Debug

     目录          0  2009-12-31 20:33  Ping

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

              5044524                    16


评论

共有 条评论