-
大小: 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\li
文件 1656 2012-01-04 17:49 李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\li
文件 2750 2012-01-04 17:49 李志鹏网络课程设计报告3109005985pingtest\pingtest\Debug\li
文件 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个文件信息
- 上一篇:Android高仿QQ扫描二维码功能实现
- 下一篇:VideoGo.zip
评论
共有 条评论