一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

【TCP/IP】C語(yǔ)言實(shí)現(xiàn)Ping小程序

Ping程序一般用來(lái)測(cè)試一臺(tái)主機(jī)是否可達(dá),該程序發(fā)送一份ICMP回顯請(qǐng)求報(bào)文給主機(jī),并等待返回ICMP回顯 應(yīng)答。愛(ài)掏網(wǎng) - it200.com

一般來(lái)說(shuō),如果不能Ping到某主機(jī),那么就不能Telnet或者FTP到那臺(tái)主機(jī)。愛(ài)掏網(wǎng) - it200.com反過(guò)來(lái),如果不能Telnet到某臺(tái)主機(jī),那么通常可以用Ping程序來(lái)確定問(wèn)題出在哪里。愛(ài)掏網(wǎng) - it200.comPing程序還可以檢測(cè)出到這臺(tái)主機(jī)的往返時(shí)間,以表明該主機(jī)里我們有“多遠(yuǎn)”。愛(ài)掏網(wǎng) - it200.com大多數(shù)的TCP/IP實(shí)現(xiàn)都在內(nèi)核中直接支持Ping服務(wù)器。愛(ài)掏網(wǎng) - it200.com

?

ICMP回顯請(qǐng)求和回顯應(yīng)答報(bào)文如下所示

?/****************************************************************/
/* ? ? ? ?類型(0或8)| ? ? ? ?代碼(0)| ? ? ? ? ? ?校驗(yàn)和 ? ? ? ?|*/
/****************************************************************/
/* ? ? ? ? ? ? ? ?標(biāo)識(shí)符 ? ? ? ? ? ?| ? ? ? ? ? ? ? ?序號(hào) ? ? ? ?|*/
/****************************************************************/
/* ? ? ? ? ? ? ? ? ? ? ? ? ? ?選項(xiàng)數(shù)據(jù) ? ? ? ? ? ? ? ? ? ? ? ? ? |*/
/****************************************************************/


定義ICMP報(bào)頭數(shù)據(jù)結(jié)構(gòu)

typedef struct _ICMP_HEADER{
? ? BYTE nType;
? ? BYTE nCode;
? ? USHORT nCheckSum;
? ? USHORT nId;
? ? USHORT nSequence;
? ? UINT nTimeStamp;
}ICMP_HEADER,*PICMP_HEADER;


下面使用Socket實(shí)現(xiàn)Ping小程序。愛(ài)掏網(wǎng) - it200.com

// PingSock.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。愛(ài)掏網(wǎng) - it200.com
//
#include "stdafx.h"
#include
#pragma comment(lib,"ws2_32.lib")
#include


//定義默認(rèn)緩沖區(qū)長(zhǎng)度
#define DEF_BUF_SIZE 1024
#define IP_HEADER_SIZE 20
#define ICMP_HEADER_SIZE (sizeof(ICMP_HEADER))
#define ICMP_DATA_SIZE 32
#define ICMP_PACK_SIZE (ICMP_HEADER_SIZE + ICMP_DATA_SIZE)


typedef struct _ICMP_HEADER{
? ? BYTE nType;
? ? BYTE nCode;
? ? USHORT nCheckSum;
? ? USHORT nId;
? ? USHORT nSequence;
? ? UINT nTimeStamp;
}ICMP_HEADER,*PICMP_HEADER;
?
char szInfo[DEF_BUF_SIZE] = {0};


USHORT GetCheckSum(LPBYTE lpBuf, DWORD dwSize);
BOOL Ping(char* lpDestIp);


int _tmain(int argc, _TCHAR* argv[])
{
? ? char szDestIp[DEF_BUF_SIZE] = {0} ;
? ? while ( scanf ( "%s", szDestIp) )
? ? ? ? Ping ( szDestIp ) ;
? ? ?
? ? return 0;
}


USHORT GetCheckSum(LPBYTE lpBuf, DWORD dwSize)
{
? ? DWORD dwCheckSum = 0;
? ? USHORT* lpWord = (USHORT*)lpBuf;


? ? while( dwSize > 1)
? ? {
? ? ? ? dwCheckSum += *lpWord++;
? ? ? ? dwSize -= 2;
? ? }


? ? if(1 == dwSize)
? ? ? ? dwCheckSum += *((USHORT*)lpBuf);


? ? dwCheckSum = ( dwCheckSum >> 16) + ( dwCheckSum & 0xffff);
? ? return (USHORT)(~dwCheckSum);
}


BOOL Ping(char* lpDestIp)
{
? ? SOCKADDR_IN DestAddr;
? ? DestAddr.sin_family = AF_INET;
? ? DestAddr.sin_addr.S_un.S_addr = inet_addr(lpDestIp);
? ? DestAddr.sin_port = htons(0);


? ? //創(chuàng)建ICMP請(qǐng)求包
? ? char ICMPPack[ICMP_PACK_SIZE] = {0};
? ? PICMP_HEADER pICMPHeader = (PICMP_HEADER)ICMPPack;
? ? pICMPHeader->nType = 8;
? ? pICMPHeader->nCode = 0;
? ? pICMPHeader->nId = (USHORT)::GetCurrentProcessId();
? ? pICMPHeader->nCheckSum = 0;
? ? pICMPHeader->nTimeStamp = 0;
? ? memset(&(ICMPPack[ICMP_HEADER_SIZE]),'E',ICMP_DATA_SIZE);


? ? //初始化WinSock
? ? WORD wVersionRequested = MAKEWORD(2,2);
? ? WSADATA wsaData;
? ? if(WSAStartup(wVersionRequested,&wsaData) != 0)
? ? {
? ? ? ? return FALSE;
? ? }


? ? //創(chuàng)建初始套接字
? ? SOCKET RawSock = socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
? ? if(INVALID_SOCKET == RawSock)
? ? {
? ? ? ? printf("create raw socket error\n");
? ? ? ? return FALSE;
? ? }


? ? int nTime = 1000;
? ? int nRet = ::setsockopt( RawSock, SOL_SOCKET, SO_RCVTIMEO,(char*)(&nTime),sizeof(nTime));


? ? char szRecvBuf [ DEF_BUF_SIZE] ;
? ? SOCKADDR_IN ? ?SourSockAddr ;


? ? for(int i = 0; i ? ? {
? ? ? ? pICMPHeader->nCheckSum = 0;
? ? ? ? pICMPHeader->nTimeStamp = ::GetTickCount();
? ? ? ? pICMPHeader->nSequence = i;


? ? ? ? pICMPHeader->nCheckSum = GetCheckSum ( (LPBYTE)ICMPPack, ICMP_PACK_SIZE ) ;


? ? ? ? int nRet = ::sendto( RawSock, ICMPPack, ICMP_PACK_SIZE, 0, (SOCKADDR*)&DestAddr, sizeof(DestAddr));
? ? ? ? if ( nRet == SOCKET_ERROR )
? ? ? ? {
? ? ? ? ? ? printf ( "sendto error!\n" ) ;
? ? ? ? ? ? return FALSE ;
? ? ? ? }


? ? ? ? // 接收ICMP響應(yīng)
? ? ? ? int nLen = sizeof(SourSockAddr) ;
? ? ? ? nRet = ::recvfrom ( RawSock, szRecvBuf, DEF_BUF_SIZE,0,(SOCKADDR*)&SourSockAddr, &nLen ) ;
? ? ? ? if ( nRet == SOCKET_ERROR )
? ? ? ? {
? ? ? ? ? ? if ( ::WSAGetLastError() == WSAETIMEDOUT )
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf ( "Request Timeout\n" ) ;
? ? ? ? ? ? ? ? continue ;
? ? ? ? ? ? }
? ? ? ? ? ? else
? ? ? ? ? ? {
? ? ? ? ? ? ? ? printf ( "recvfrom error!\n" ) ;
? ? ? ? ? ? ? ? return FALSE ;
? ? ? ? ? ? }
? ? ? ? }


? ? ? ? int nTime = ::GetTickCount() - pICMPHeader->nTimeStamp ;


? ? ? ? int nRealSize = nRet - IP_HEADER_SIZE - ICMP_HEADER_SIZE ;
? ? ? ? if ( nRealSize ? ? ? ? {
? ? ? ? ? ? printf ( "To less recv bytes!\n" ) ;
? ? ? ? ? ? continue ;
? ? ? ? }


? ? ? ? // 檢測(cè)是否當(dāng)前所發(fā)出的ICMP響應(yīng)包
? ? ? ? PICMP_HEADER pRecvHeader = (PICMP_HEADER)(szRecvBuf+IP_HEADER_SIZE) ;
? ? ? ? if ( pRecvHeader->nType != 0 )
? ? ? ? {
? ? ? ? ? ? printf ( "Not ICMP respond type!\n" ) ;
? ? ? ? ? ? return FALSE ;
? ? ? ? }


? ? ? ? if ( pRecvHeader->nId != ::GetCurrentProcessId () )
? ? ? ? {
? ? ? ? ? ? printf ( "not valid id!\n" ) ;
? ? ? ? ? ? return FALSE ;
? ? ? ? }


? ? ? ? printf ( "%d bytes replay from %s : bytes=%d time=%dms\n", \
? ? ? ? ? ? nRet, inet_ntoa(SourSockAddr.sin_addr), nRealSize, nTime ) ;


? ? ? ? ::Sleep ( 1000 ) ;
? ? }


? ? closesocket ( RawSock ) ;
? ? WSACleanup () ;


? ? return TRUE ;
}


聲明:所有內(nèi)容來(lái)自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
發(fā)表評(píng)論
更多 網(wǎng)友評(píng)論0 條評(píng)論)
暫無(wú)評(píng)論

返回頂部

主站蜘蛛池模板: 精品视频免费 | 五月婷婷深深爱 | 日韩精品久久久 | a一级黄色片 | 黄色片一级片 | 国产精品99久久久久久久久 | 野外(巨肉高h) | 伦一理一级一a一片 | 张津瑜国内精品www在线 | 亚洲少妇一区 | 日韩免费一区二区三区 | 成人免费激情视频 | 一区二区免费视频 | 人人干人人看 | 毛茸茸性猛交xxxx | 欧美久久网 | 日韩视频一区二区 | 久久免费网 | 一级黄色免费视频 | 国产区一区二区 | 中文字幕欧美在线 | 国产亚洲一区二区三区 | 台湾av在线| 伊人网综合| av在线免费网站 | 久久性生活视频 | 免费啪视频 | av不卡在线观看 | 9999精品视频| 白白色免费视频 | 黄色三级小说 | 欧美成人一级片 | a视频在线观看 | 综合在线视频 | 亚洲性天堂 | 婷婷狠狠 | 中文字幕精品一区久久久久 | 欧美一区二| av一级在线 | 天天狠狠 | 男人午夜影院 |