亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pingsimulator.cpp

?? 用rawsocket實現簡單的ping程序
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
	// 類型字段設置成Ping Request
	pIcmpHeader->type = ICMP_ECHO_REQUEST;

	// 代碼字段設置為0
	pIcmpHeader->code = 0;

	// 校驗和暫時置為0
	pIcmpHeader->checksum = 0;

	// id字段為當前進程的id
	pIcmpHeader->id = htons((unsigned short) GetCurrentProcessId());

	// 填充序號字段
	pIcmpHeader->sequenceNumber = htons(sequenceNumber);

	// 填充數據段
	memset(pIcmpPacket + sizeof (ICMPHeader), 'E', DEFAULT_ICMP_DATA_SIZE);

	// 計算校驗和
	pIcmpHeader->checksum = getIcmpChecksum((unsigned short*) pIcmpPacket, size);
}



// ************************************************************************************
// 計算校驗和
//		功	能:計算ICMP報文的校驗和字段
//		參	數:1. pData : 存放ICMP報文的緩沖區
//				2. size : 緩沖區的大小
//		返回值:整個ICMP報文的校驗和
// ************************************************************************************

unsigned short getIcmpChecksum(unsigned short* pData, int size)
{
	// 首先將校驗和置為0
	unsigned long checksum = 0;

	// 以2字節為單位反復累加
	while (size > 1)
	{
		checksum += * (pData++);
		size -= sizeof (unsigned short);
	}

	// 如果總字節數為奇數,則加上最后一個字節
	if (size > 0)
	{
		checksum += * (unsigned char*) pData;
	}

	// 將高16位(進位)與低16位累加
	checksum = (checksum >> 16) + (checksum & 0xFFFF);

	// 將上一步中可能產生的高16位進位再次與低16位累加
	checksum += (checksum >> 16);

	// 返回16位的網際校驗和
	return (unsigned short) (~checksum);
}



// *****************************************************************************
// 顯示目標主機的信息
//		功	能:顯示待Ping主機的IP地址、主機名等信息
//		參	數:無
//		返回值:void
// *****************************************************************************

void showDestHostInfo()
{
	// 如果指定了"-a"選項,則獲取主機名
	if (hasParam_a && 0 == strlen(destHostName))
	{
		// 根據IP地址獲取主機
		hostent* pDestHost = gethostbyaddr((char*) &destIP, sizeof (destIP), AF_INET);

		// 獲取主機名
		if (pDestHost != NULL && pDestHost->h_name != NULL)
		{
			strcpy(destHostName, pDestHost->h_name);
		}
	}

	// 將IP地址轉換成字符串
	char ipstr[16] = {0};
	ipToString(htonl(destIP), ipstr);

	// 輸出主機名和IP地址等信息
	cout << "\n--------------------------------------------------------------------------------";
	if (strlen(destHostName) != 0)
	{
		cout << "Pinging " << destHostName << " [" << ipstr << "] with " << sendBufferSize << " bytes of data :\n\n";
		memset(destHostName, 0, sizeof (destHostName));
	}
	else
	{
		cout << "Pinging " << ipstr << " with " << sendBufferSize << " bytes of data :\n\n";
	}
}



// *******************************************************************************
// 將ip地址轉換成點分十進制的形式
//		功	能:將unsigned long型的IP地址轉換成點分十進制形式的字符串
//		參	數:1. ip : 待轉換的IP地址
//				2. ipstr : 字符緩沖區,用來保存轉換后的字符串
//		返回值:void
// *******************************************************************************

void ipToString(unsigned long ip, char* ipstr)
{
	sprintf(ipstr, "%d.%d.%d.%d", (ip >> 24) & 0xFF, (ip >> 16) & 0xFF, (ip >> 8) & 0xFF, ip & 0xFF);
}



// *******************************************************************************
// 顯示Ping的統計信息
//		功	能:顯示對某一臺主機的Ping操作的統計信息
//		參	數:statisticsRecord : 待顯示的統計信息,包括發包數、收包數、往返時間等
//		返回值:void
// *******************************************************************************

void showStatisticsInfo(const StatisticsRecord& statisticsRecord)
{
	// 將目標主機的IP地址轉換成點分十進制的形式
	char ipstr[16] = {0};
	ipToString(ntohl(destIP), ipstr);

	// 獲得總發包數、總收包數
	unsigned long sent = statisticsRecord.totalRequests;
	unsigned long received = statisticsRecord.totalResponses;
	unsigned long lost = sent - received;

	// 輸出收發包的統計信息
	cout << "\nPing statistics for " << ipstr << " :\n";
	cout << "    Packets : Sent = " << sent << ", Received = " << received 
		 << ", Lost = " << lost << " (" << (unsigned long) (((double) lost / sent) * 100) << "% loss).\n";

	// 輸出時間統計信息
	if (received > 0)
	{
		cout << "Approximate round trip times in milli-seconds :\n";
		cout << "    Minimum = " << statisticsRecord.minTime << "ms, Maximum = " 
			 << statisticsRecord.maxTime << "ms, Average = " 
			 << (statisticsRecord.totalTime / received) << "ms.\n";
	}
	cout << "--------------------------------------------------------------------------------\n";
}



// **************************************************************************************
// 對接收到的數據包進行解析
//		功	能:解析接收到的數據包,判斷是否為正確的Ping響應報文,如果是,則提取相關字段的值
//		參	數:1. pRecvBuffer : 接收緩沖區
//				2. pingRecord : 保存有待Ping主機的IP、Ping請求報文的id、序號,以及ttl等參數
//		返回值:如果接收到的是正確的Ping響應報文,則返回true;否則返回false
// **************************************************************************************

bool parseReceivedPacket(const char* pRecvBuffer, PingRecord& pingRecord)
{
	IPHeader* pIPHeader = (IPHeader*) pRecvBuffer;

	// 如果不是IPv4報文,或者上層協議不是ICMP,則返回false
	if ((pIPHeader->versionAndHeaderLength >> 4) != 4 || (pIPHeader->protocol != 1))
	{
		return false;
	}

	// 如果不是正在Ping的主機的IP地址,則返回false
	if (pIPHeader->srcIP != pingRecord.ipToPing)
	{
		return false;
	}

	// 計算IP報頭的長度
	int ipHeaderLength = (pIPHeader->versionAndHeaderLength & 0x0F) * 4;

	// 得到ICMP報頭
	ICMPHeader* pIcmpHeader = (ICMPHeader*) (pRecvBuffer + ipHeaderLength);

	// 如果不是ICMP回顯響應報文,則返回false
	if (pIcmpHeader->type != ICMP_ECHO_REPLY)
	{
		return false;
	}

	// 如果id和序號不正確,則返回false
	if (pIcmpHeader->id != pingRecord.id || pIcmpHeader->sequenceNumber != pingRecord.sequenceNumber)
	{
		return false;
	}

	// 記錄往返時間,保存TTL
	pingRecord.roundTripTime = GetTickCount() - pingRecord.roundTripTime;
	pingRecord.ttl = pIPHeader->timeToLive;

	// 接收到了正確的Ping響應報文,返回true
	return true;
}



// **************************************************************************************
// 顯示響應信息
//		功	能:當收到正確的Ping響應報文時,調用該函數來顯示響應信息,如往返時間、ttl等
//		參	數:pingRecord : 保存有往返時間、ttl等參數的結構體變量
//		返回值:void
// **************************************************************************************

void showReply(const PingRecord& pingRecord)
{
	// 將ip地址轉換成點分十進制的形式
	char ipstr[16] = {0};
	ipToString(ntohl(pingRecord.ipToPing), ipstr);

	// 輸出相關信息
	cout << "Reply from " << ipstr << " : bytes=" << sendBufferSize << " ";
	if (pingRecord.roundTripTime < 1)
	{
		cout << "time<1ms ";
	}
	else
	{
		cout << "time=" << pingRecord.roundTripTime << "ms ";
	}
	cout << "TTL=" << (int) pingRecord.ttl << endl;
}



// **************************************************************************************
// 更新Ping的統計信息
//		功	能:當收到正確的Ping響應報文時,更新統計信息,如收包數、往返時間等
//		參	數:1. statisticsRecord : 保存統計信息的結構體變量
//				2. pingRecord : 保存有往返時間、ttl等值的結構體變量
//		返回值:void
// **************************************************************************************

void setStatisticsRecord(StatisticsRecord& statisticsRecord, const PingRecord& pingRecord)
{
	// 將接收到的Ping響應報文的數目加1
	statisticsRecord.totalResponses++;

	// 更新總的往返時間
	statisticsRecord.totalTime += pingRecord.roundTripTime;

	// 更新最大往返時間
	if (statisticsRecord.maxTime < 0)
	{
		statisticsRecord.maxTime = pingRecord.roundTripTime;
	}
	else
	{
		statisticsRecord.maxTime = ((pingRecord.roundTripTime > statisticsRecord.maxTime) ? pingRecord.roundTripTime : statisticsRecord.maxTime);
	}
	
	// 更新最小往返時間
	if (statisticsRecord.minTime < 0)
	{
		statisticsRecord.minTime = pingRecord.roundTripTime;
	}
	else
	{
		statisticsRecord.minTime = ((pingRecord.roundTripTime < statisticsRecord.minTime) ? pingRecord.roundTripTime : statisticsRecord.minTime);
	}
}



// *************************************************************************************
// Ctrl-C和Ctrl-Break的消息處理函數
//		功	能:自定義Ctrl-C和Ctrl-Break的處理方法
//		參	數:dwCtrlType : 快捷鍵的類型
//		返回值:如果只想自己處理,而不由系統加以干涉,則返回TRUE;否則返回FALSE
// *************************************************************************************

BOOL WINAPI ctrlHandler(DWORD dwCtrlType)
{
	// 如果是Ctrl-C,則終止對當前主機的Ping;如果有多臺目標主機,則繼續Ping下一臺
	if (CTRL_C_EVENT == dwCtrlType)
	{
		pingRequestsToSend = 0;
		return TRUE;
	}

	// 如果是Ctrl-Break,則終止對所有主機的Ping操作
	if (CTRL_BREAK_EVENT == dwCtrlType)
	{
		pingRequestsToSend = 0;
		numberOfHostsToPing = 0;
		return TRUE;
	}

	// 如果不是Ctrl-C或者Ctrl-Break,則交由系統來處理
	return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国一区二区三区| 午夜久久电影网| 精品伦理精品一区| 欧美高清视频不卡网| 制服丝袜激情欧洲亚洲| 欧美日韩日日摸| 91精品国产综合久久久蜜臀粉嫩| 精品久久国产97色综合| 日韩视频在线一区二区| 日韩一区二区三区免费看| 日韩亚洲电影在线| 国产午夜精品久久久久久久 | 欧美日本一道本| 91女神在线视频| 色婷婷亚洲一区二区三区| 色视频成人在线观看免| 欧美日韩国产精品成人| 日韩一级免费观看| 久久久久久麻豆| 国产精品成人一区二区艾草| 亚洲猫色日本管| 免费成人av在线| 成人黄色在线看| 欧美羞羞免费网站| 欧美不卡一区二区| 亚洲欧美色图小说| 蜜臀av一区二区在线免费观看 | 国产黄色91视频| 播五月开心婷婷综合| 色国产综合视频| 日韩一区二区影院| 中国av一区二区三区| 亚洲福利视频导航| 国产精品资源在线| 日韩午夜电影av| 国产日韩精品一区二区三区 | 成人亚洲精品久久久久软件| 91视频一区二区三区| 日韩三级免费观看| 国产精品乱码人人做人人爱| 午夜精品免费在线观看| 国产成人免费视频一区| 欧美精品电影在线播放| 国产精品久久久久桃色tv| 水野朝阳av一区二区三区| 成人永久看片免费视频天堂| 欧美老女人在线| 亚洲欧美乱综合| 国产麻豆精品theporn| 欧美三级韩国三级日本一级| 国产性做久久久久久| 视频一区二区中文字幕| 色国产精品一区在线观看| 久久久久久亚洲综合| 日韩影院免费视频| 在线亚洲一区观看| 国产精品美女久久久久久久网站| 天堂午夜影视日韩欧美一区二区| 91老师片黄在线观看| 国产亚洲精品超碰| 久久精品久久综合| 欧美日韩国产系列| 亚洲美女淫视频| 91在线观看一区二区| 国产日产欧产精品推荐色| 蜜桃av一区二区| 5858s免费视频成人| 亚洲一区二区美女| 在线观看国产91| 亚洲欧美在线视频观看| www.欧美色图| 国产精品初高中害羞小美女文| 国产 欧美在线| 欧美激情一区二区三区不卡 | 亚洲成人在线免费| 欧美日韩一二三区| 亚洲国产中文字幕在线视频综合| 色婷婷av一区二区三区软件| 亚洲精品videosex极品| 欧美日韩高清影院| 五月激情六月综合| 日韩一区二区三区免费观看| 美女视频网站黄色亚洲| 精品国产乱码久久久久久图片| 极品尤物av久久免费看| 久久精品日韩一区二区三区| 福利一区福利二区| 亚洲美女视频在线| 678五月天丁香亚洲综合网| 日本不卡123| 精品成人一区二区| 暴力调教一区二区三区| 亚洲一区在线视频| 欧美一卡在线观看| 国产高清在线精品| 自拍视频在线观看一区二区| 欧美日韩在线观看一区二区 | 午夜久久久久久| 精品久久久久久亚洲综合网 | 日日噜噜夜夜狠狠视频欧美人 | 欧美一级日韩不卡播放免费| 奇米在线7777在线精品| 久久久久成人黄色影片| 成人app下载| 午夜视黄欧洲亚洲| 国产欧美一区二区在线| 在线免费观看日本一区| 九九九久久久精品| 亚洲免费观看高清完整| 欧美变态tickling挠脚心| 99久久婷婷国产综合精品电影| 亚洲综合一区二区| 久久久久久久av麻豆果冻| 91国产视频在线观看| 韩国女主播一区| 亚洲电影在线播放| 欧美国产激情一区二区三区蜜月| 欧美怡红院视频| 菠萝蜜视频在线观看一区| 日本三级亚洲精品| 一区二区三区不卡视频在线观看 | 日本vs亚洲vs韩国一区三区| 日本一区二区三区dvd视频在线| 日本乱人伦一区| 国产综合色产在线精品| 婷婷激情综合网| 亚洲理论在线观看| 国产精品美女一区二区在线观看| 日韩欧美一区二区久久婷婷| 欧美亚洲高清一区二区三区不卡| 国产成人精品免费看| 美女免费视频一区| 亚洲高清不卡在线| 亚洲少妇30p| 中文字幕中文字幕在线一区 | 久久久久久免费毛片精品| 欧美精品在线一区二区| 色婷婷av一区二区三区大白胸| 国产精品综合一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 伊人夜夜躁av伊人久久| 自拍偷拍欧美精品| 国产精品久久久久精k8| 国产精品色婷婷| 国产亚洲成aⅴ人片在线观看| 日韩久久久久久| 欧美一级片在线观看| 欧美日韩夫妻久久| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| www.激情成人| 91在线视频18| 91视频xxxx| 欧美专区在线观看一区| 欧美视频一区在线| 欧美午夜理伦三级在线观看| 日本乱码高清不卡字幕| 91国产福利在线| 欧美精三区欧美精三区| 51午夜精品国产| 日韩免费性生活视频播放| 91精品在线一区二区| 欧美电影免费观看高清完整版在线观看| 7777精品伊人久久久大香线蕉经典版下载 | 国产麻豆9l精品三级站| 国产精品综合视频| 懂色av一区二区夜夜嗨| 大尺度一区二区| 波多野结衣的一区二区三区| 91小视频在线免费看| 欧美三级日韩在线| 91精品视频网| 久久久国产一区二区三区四区小说 | 欧美日韩一区二区三区在线| 欧美日韩国产另类一区| 精品久久久久久综合日本欧美| 久久精品夜色噜噜亚洲aⅴ| 欧美激情一区二区三区不卡| 亚洲视频一区二区在线观看| 午夜精品福利在线| 国产一区二区在线影院| 91网址在线看| 日韩欧美久久久| 中文字幕乱码一区二区免费| 一级做a爱片久久| 激情综合网天天干| av网站免费线看精品| 欧美日韩高清一区| 国产欧美一二三区| 舔着乳尖日韩一区| 成人性生交大片免费看在线播放| 欧美视频日韩视频在线观看| 精品国产乱码久久久久久蜜臀| 亚洲欧美福利一区二区| 麻豆高清免费国产一区| av激情成人网| 欧美成人国产一区二区| 亚洲精选视频免费看| 国产精品主播直播| 欧美日韩大陆在线| 中文字幕亚洲精品在线观看|