-
大小: 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?{
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
評論
共有 條評論