• 大小: 11.16MB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2023-07-29
  • 语言: Java
  • 标签:

资源简介

广东工业大学网络课程设计ping程序设计和实现 1.已知参数:目的节点IP地址或主机名 2.设计要求:通过原始套接字编程,实现Ping的基本功能 2.1初始化Windows Sockets网络环境; 2.2解析命令行参数,构造目的端socket地址; 2.3定义IP、ICMP报文; 2.4接收ICMP差错报文并进行解析。 3. Java环境为MyEclipse, C++环境为Visual C++ 文件包含源代码,报告,可执行文件,直接更改名字就可以上交

资源截图

代码片段和文件信息

#include 
#include 
#include 
#pragma comment(lib “ws2_32.lib“)
#define ICMP_ECHOREPLY 0 //ICMP回应答复
#define ICMP_ECHOREQ 8 //ICMP回应请求
#define REQ_DATASIZE 32 //请求数据报大小

//定义IP首部格式
typedef struct _IPHeader
{
u_char VIHL; //版本和首部长度
u_char ToS; //服务类型
u_short TotalLen; //总长度
u_short ID; //标识号
u_short Frag_Flags; //片偏移量
u_char TTL; //生存时间
u_char Protocol; //协议
u_short Checksum; //首部校验和
struct in_addr SrcIP; //源IP地址
struct in_addr DestIP; //目的地址
}IPHDR *PIPHDR;


//定义ICMP首部格式
typedef struct _ICMPHeader
{
u_char Type; //类型
u_char Code; //代码
u_short Checksum; //首部校验和
u_short ID; //标识
u_short Seq; //序列号
char Data; //数据
}ICMPHDR *PICMPHDR;


//定义ICMP回应请求
typedef struct _ECHOREQUEST
{
ICMPHDR icmpHdr;
DWORD dwTime;
char cData[REQ_DATASIZE];
}ECHOREQUEST *PECHOREQUEST;


//定义ICMP回应答复
typedef struct _ECHOREPLY
{
IPHDR ipHdr;
ECHOREQUEST echoRequest;
char cFiller[256];
}ECHOREPLY *PECHOREPLY;

//计算校验和
u_short checksum(u_short *buffer int len)
{
register int nleft = len;
register u_short *w = buffer;
register u_short answer;
register int sum = 0;
//使用32位累加器进行16位的反馈计算
while ( nleft > 1 )
{
sum += *w++;
nleft -= 2;
}
//补全奇数位
if ( nleft == 1 )
{
u_short u = 0;
*(u_char *)(&u) = *(u_char*)w;
sum += u;
}
//将反馈的16位从高位移到低位
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
answer = ~sum;
return (answer);
}

//发送回应请求函数
int SendEchoRequest(SOCKET s struct sockaddr_in *lpstToAddr)
{
static ECHOREQUEST echoReq;
static  int nId = 1;
static int nSeq = 1;
int nRet;
//填充回应请求消息
echoReq.icmpHdr.Type = ICMP_ECHOREQ;
echoReq.icmpHdr.Code = 0;
echoReq.icmpHdr.Checksum = 0;
echoReq.icmpHdr.ID = nId++;
echoReq.icmpHdr.Seq = nSeq++;
//填充要发送的数据
for (nRet = 0; nRet < REQ_DATASIZE; nRet++)
{
echoReq.cData[nRet] = ‘1‘ + nRet;
}
//存储发送的时间
echoReq.dwTime = GetTickCount();
//计算回应请求的校验和
echoReq.icmpHdr.Checksum = checksum((u_short*)&echoReq sizeof(ECHOREQUEST));
//发送回应请求
nRet = sendto(s(LPSTR)&echoReqsizeof(ECHOREQUEST)
  0(struct sockaddr*)lpstToAddrsizeof(SOCKADDR_IN));
if (nRet == SOCKET_ERROR)
{
printf(“send to() error:%d\n“ WSAGetLastError());
}
return (nRet);
}

//接收应答回复并进行解析
DWORD RecvEchoReply(SOCKET s LPSOCKADDR_IN lpsaFrom u_char *pTTL)
{
ECHOREPLY echoReply;
int nRet;
int nAddrLen = sizeof(struct sockaddr_in);
//接收应答回复
nRet = recvfrom(s(LPSTR)&echoReplysizeof(ECHOREPLY)
0(LPSOCKADDR)lpsaFrom&nAddrLen);
//检验接收结果

if (nRet == SOCKET_ERROR)
{
printf(“recvfrom() error:%d\n“WSAGetLastError());
}
//记录返回的TTL
*pTTL = echoReply.ipHdr.TTL;
//返回应答时间
return(echoReply.echoRequest.dwTime);
}

//等待回应答复使用select模型
int WaitForEchoReply(SOCKET s)
{
struct timeval timeout;
fd_set readfds;
readfds.fd_count = 1;
readfds.fd_array[0] = s;
timeout.tv_sec = 1;
timeout.tv_usec = 0;
return(select(1 &readfds NULL NULL &timeout));
}

//PING功能实现
void Ping(char *pstrHost)
{
SOCKET rawSocket;
LP

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

     文件        891  2011-12-27 21:51  李志鹏网络课程设计报告3109005985pingtest\pingtest.sln

    ..A..H.     11264  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest.suo

     文件      30720  2011-12-28 21:56  李志鹏网络课程设计报告3109005985pingtest\可执行程序.exe

     文件       5860  2011-12-28 21:56  李志鹏网络课程设计报告3109005985pingtest\源代码.cpp

     文件   23875584  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest.sdf

     文件   32768000  2011-12-28 21:49  李志鹏网络课程设计报告3109005985pingtest\ipch\pingtest-976f476e\pingtest-d2d0b45a.ipch

     文件     335240  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\Debug\pingtest.ilk

     文件     445440  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\Debug\pingtest.pdb

     文件      30720  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\Debug\pingtest.exe

     文件       3226  2011-12-27 21:52  李志鹏网络课程设计报告3109005985pingtest\pingtest\pingtest.vcxproj

     文件        143  2011-12-27 21:51  李志鹏网络课程设计报告3109005985pingtest\pingtest\pingtest.vcxproj.user

     文件        946  2011-12-27 21:52  李志鹏网络课程设计报告3109005985pingtest\pingtest\pingtest.vcxproj.filters

     文件       5860  2011-12-28 21:56  李志鹏网络课程设计报告3109005985pingtest\pingtest\pingtest.cpp

     文件        937  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\pingtest.log

     文件       1385  2011-12-28 21:56  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\pingtest.Build.CppClean.log

     文件         96  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\pingtest.lastbuildstate

     文件     617472  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\vc100.idb

     文件     118784  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\vc100.pdb

     文件      24644  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\CL.read.1.tlog

     文件        972  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\CL.write.1.tlog

     文件       1330  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\cl.command.1.tlog

     文件        381  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\pingtest.exe.intermediate.manifest

     文件       4764  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\link.read.1.tlog

     文件       1656  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\link.write.1.tlog

     文件       2750  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\link.command.1.tlog

     文件       1514  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\mt.read.1.tlog

     文件        726  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\mt.write.1.tlog

     文件       1082  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\mt.command.1.tlog

     文件      38327  2012-01-04 17:49  李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\pingtest.obj

     文件     533504  2012-04-09 22:11  李志鹏网络课程设计报告3109005985pingtest\计算机网络课程设计报告.doc

............此处省略9个文件信息

评论

共有 条评论

相关资源