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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sniffer.cpp

?? 監(jiān)聽分析流量中的http流量
?? CPP
字號:
// Sniffer.cpp: implementation of the CSniffer class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Sniffer.h"
#include <winsock2.h>
#include <WS2TCPIP.H>
#include <MSTcpIP.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSniffer::CSniffer()
{
	WSADATA wsaData;

	if(WSAStartup(0x202, &wsaData) == 0)
	{
		m_bWSAStartup = TRUE;
	}
	else
	{
		m_bWSAStartup = FALSE;
	}

	//初始化臨界區(qū)對象
	InitializeCriticalSection(&m_ls);


	memset(m_szProto, 0, 16);
	memset(m_strAddr, 0, 64);

	memset(m_szDestPort, 0, 16);
	memset(m_szSourcePort, 0, 16);
	memset(m_szTTL, 0, 16);
	memset(m_szDestIP, 0, 16);
	memset(m_szSourceIP, 0, 16);
	memset(m_szProtocol, 0, 16);

	m_bIsRun = FALSE;
	m_IsAllPort = false;
	m_IsAllIp = TRUE;
	m_IsAllProto = TRUE;
}

CSniffer::~CSniffer()
{
	//銷毀臨界區(qū)對象
	DeleteCriticalSection(&m_ls);
	DelListBuf();
}

BOOL CSniffer::SnifferInit(LPSTR lpStrAddr, UINT uPort)
{
	DWORD	dwThreadID;
	strcpy(m_strAddr, lpStrAddr);
	m_uPort = uPort;
	m_HostIp = GetIp(); //得到本機IP
	//開始監(jiān)聽

	if(!CreateSock()) //建立
	{
		//"WinSock設(shè)置失敗
		return false;
	}
	else
	{
		m_bIsRun = TRUE;
		m_hThread = CreateThread( NULL, NULL, RecvIpPro, (PVOID)this, NULL, &dwThreadID);
	}

	return true;
}

void CSniffer::StopSniffer()
{
	m_bIsRun = FALSE;
	if(m_hThread)
	{
		TerminateThread(m_hThread, 0);
		CloseHandle(m_hThread);
	}

	if(m_RawSock)
		closesocket(m_RawSock);
}

//建立原始套接字
BOOL CSniffer::CreateSock()
{
	char name[56] = {0};
	hostent *pHostent;
	int port = 8310;	//監(jiān)聽端口
	int err;
	SOCKADDR_IN sockaddr;
	
	m_RawSock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
	if(m_RawSock == INVALID_SOCKET)
	{
		return WSAGetLastError(); //socket創(chuàng)建失敗
	}
	
	err= ::gethostname(name, 56);
	if(err==SOCKET_ERROR)
	{
		return WSAGetLastError(); //取本機用戶名失敗
	}

	pHostent = gethostbyname (name);

	sockaddr.sin_family = AF_INET;
	sockaddr.sin_port = htons(port);
	memcpy(&sockaddr.sin_addr.s_addr, pHostent->h_addr_list[0],
		pHostent->h_length);

	//free(pHostent);
	
	err = bind(m_RawSock,(SOCKADDR *)&sockaddr, sizeof(sockaddr));//綁定
	if(err == SOCKET_ERROR)
	{
		return WSAGetLastError(); //取本機用戶名失敗
	}
	BOOL bOptval = TRUE;

	//設(shè)置套節(jié)字選項
	setsockopt(m_RawSock, SOL_SOCKET,SO_REUSEADDR, (char*)&bOptval, sizeof(bOptval));
	err = setsockopt(m_RawSock, IPPROTO_IP,IP_HDRINCL, (char*)&bOptval, //IP_HDRINCL該選項使之能操作IP頭
		sizeof(bOptval));
	if(err == SOCKET_ERROR)
	{
		return WSAGetLastError(); //設(shè)置套節(jié)字選項失敗
	}

	//把網(wǎng)卡置于混雜模式。獲取IO操作的相關(guān)信息
	DWORD dwBufferLen[10] ;
	DWORD dwBufferInLen = 1 ;
	DWORD dwBytesReturned = 0 ;
	err=WSAIoctl (
		m_RawSock,                                               
		SIO_RCVALL,       //設(shè)置SOCK_RAW為SIO_RCVALL,以便接收所有的IP包                           
		&dwBufferInLen,                                     
		sizeof(dwBufferInLen),                                       
		&dwBufferLen,                                    
		sizeof(dwBufferLen),                                      
		&dwBytesReturned,                              
		NULL,                           
		NULL  
		);//最后兩參數(shù)設(shè)置非阻塞


	if(err == SOCKET_ERROR)
	{
		return WSAGetLastError(); //設(shè)置套節(jié)字選項失敗
	}

	return true;
}

//在線程中不斷接受IP包
DWORD CALLBACK CSniffer::RecvIpPro(LPVOID lpParam)
{
	int err = 0;
	int recvLen;
	CSniffer* pSniffer = (CSniffer*)lpParam;
	char *recvBuf = new char[MAX_PACK_LEN];
	while(pSniffer->m_bIsRun)
	{
		memset(recvBuf, 0, MAX_PACK_LEN);
		recvLen = recv(pSniffer->m_RawSock,recvBuf, MAX_PACK_LEN, 0);//接受數(shù)據(jù)
		
		if(err==SOCKET_ERROR)
		{
			if(WSAGetLastError() == WSAEWOULDBLOCK) //如果錯誤為阻塞那么將繼續(xù)接受
				continue;
			break;
		}
		//處理已經(jīng)接受到的IP包
		EnterCriticalSection(&pSniffer->m_ls);
		pSniffer->SplitIpPack(recvBuf, recvLen); //分解IP包
		//pSniffer->ShowIpInfo(recvBuf,recvLen); //分析并處理IP數(shù)據(jù)包
		LeaveCriticalSection(&pSniffer->m_ls);
	}
	return 0;

}

//分解IP包
void CSniffer::SplitIpPack(char *pData, int len)
{
	IP_HEADER* pIpHead;

	memset(m_szDestPort, 0, 16);
	memset(m_szSourcePort, 0, 16);
	memset(m_szTTL, 0, 16);
	memset(m_szDestIP, 0, 16);
	memset(m_szSourceIP, 0, 16);
	memset(m_szProtocol, 0, 16);

	pIpHead = (IP_HEADER*)pData; //轉(zhuǎn)為IP頭結(jié)構(gòu)
	SOCKADDR_IN saSource, saDest; //中間變量分別為源IP地址結(jié)構(gòu)和目標IP地址結(jié)構(gòu) 

	//得到包中協(xié)議
	int iProtocol;
	iProtocol = pIpHead->proto;
	//得到協(xié)議字符形式表示m_szProtocol
	strncpy(m_szProtocol,CheckProtocol(iProtocol), MAX_PROTO_TEXT_LEN);


	//得到源IP
	saSource.sin_addr.s_addr = pIpHead->sourceIP;
	strncpy(m_szSourceIP, inet_ntoa(saSource.sin_addr), MAX_ADDR_LEN);

	//得到目標IP
	saDest.sin_addr.s_addr=pIpHead->destIP;
	strncpy(m_szDestIP, inet_ntoa(saDest.sin_addr), MAX_ADDR_LEN);

	//得到TTL
	int ttl;
	ttl=pIpHead->ttl;
	wsprintf(m_szTTL, "%d", ttl);

	//得到頭長度
	int ihLen = sizeof(unsigned long)*(pIpHead->h_lenver & 0xf);

	m_ihLen = ihLen;
	unsigned short srcPort = 0, destPort = 0;
	switch(iProtocol) 
	{
	case IPPROTO_TCP:
		{
		
		TCP_HEADER* pTcpHead;
		pTcpHead = (TCP_HEADER*)(pData+ihLen);
		srcPort = ntohs(pTcpHead->th_sport);
		destPort = ntohs(pTcpHead->th_dport);
		wsprintf(m_szSourcePort, "%d", srcPort);
		wsprintf(m_szDestPort, "%d", destPort);
		int nLen = ihLen + sizeof(TCP_HEADER);
		//基于TCP/IP協(xié)議之上的協(xié)議的解析
		TCPProtocolParse(pData + nLen, len - nLen);
		}
		break;
	case IPPROTO_UDP:
		UDP_HEADER* pUdpHead;
		pUdpHead = (UDP_HEADER*)(pData+ihLen);
		srcPort = ntohs(pUdpHead->uh_sport);
		destPort = ntohs(pUdpHead->uh_dport);	
		wsprintf(m_szSourcePort, "%d", srcPort);
		wsprintf(m_szDestPort, "%d",destPort);
		break;
	case IPPROTO_ICMP:
		ICMP_HEADER* pIcmpHead;
		pIcmpHead=(ICMP_HEADER*)(pData + ihLen);
		wsprintf(m_szSourcePort, "%s", "");
		wsprintf(m_szDestPort, "%s", "");
		break;
	default:
		wsprintf(m_szSourcePort, "%s", "");
		wsprintf(m_szDestPort, "%s", "");
	}
		
}

//將IP記錄存放到鏈表中
void CSniffer::ShowIpInfo(char *pData, int len)
{
	if(len<0)
		return;
	char szSourceIP[32] = {0};
	char szDestIP[32] = {0};

	char szSourcePort[16] = {0}; //截取到的源端口
	char szDestPort[16] = {0}; //截取到的目標端口

	char szSourceIPt[32] = {0}; //截取到源IP
	char szDestIPt[32] = {0}; //截取到目標IP
	
	char szWprot[5] = {0}; //取得輸入端口
	char szIP[32] = {0}; //取得輸入IP
	char szProto[16] = {0}; //取得輸入?yún)f(xié)議
	


	if(strcmp(m_HostIp, m_szSourceIP) == 0)
	{
		strcat(szSourceIP, "(本機)");
		strcat(szSourceIP, m_szSourceIP);
	}
	else
		strncpy(szSourceIP, m_szSourceIP, 16);

	if(strcmp(m_HostIp, m_szDestIP) == 0)
	{
		strcat(szDestIP, "(本機)");
		strcat(szDestIP, m_szDestIP);
	}
	else
		strncpy(szDestIP, m_szDestIP, 16);

	strncpy(szSourcePort, m_szSourcePort, 5);
	strncpy(szDestPort, m_szDestPort, 5);
	strncpy(szDestIPt, m_szSourceIP, 32);
	strncpy(szSourceIPt, m_szDestIP, 32);
	strncpy(szProto, m_szProtocol, 16);

	wsprintf(szWprot, "%d", m_uPort);
	//取得輸入IP
	strcpy(szIP, m_strAddr);
	
	BOOL bProt = m_IsAllPort | (strcmp(szSourcePort, szWprot) == 0) |
		(strcmp(szDestPort, szWprot) == 0); //判斷端口規(guī)則
	BOOL bIp = m_IsAllIp | (strcmp(szSourceIPt, szIP) == 0) |
		(strcmp(szDestIPt, szIP) == 0); //判斷IP規(guī)則
	BOOL bProto = m_IsAllProto | (strcmp(szProto, m_szProto) == 0); //判斷協(xié)議規(guī)則
	
	if(bProt && bIp && bProto)
	{
			char sNowTime[18] = {0};
			GetNowTime(sNowTime);

			char str[512] = {0};
			wsprintf(str, "[%s] %s:%s->%s:%s 包大小(頭/總)%d/%d %s", m_szProtocol, szSourceIP,
				m_szSourcePort, szDestIP, m_szDestPort,
				m_ihLen, len, sNowTime);

			int nCount = m_strIPInfoList.size();
			if (nCount >= 1000)
				m_strIPInfoList.clear();
			//放入鏈表
			string strData(str);
			m_strIPInfoList.push_back(strData);
			//綁定數(shù)據(jù)
			IPDATA *pIpData = new IPDATA();
			pIpData->len = len;
			pIpData->buf = new char[len];
			memcpy(pIpData->buf, pData, len);
			m_strIPDataList.push_back((DWORD)pIpData);
	}
}

//清除和ListBox綁定的數(shù)據(jù)和列表
void CSniffer::DelListBuf()
{
}


//格式化顯示IP包
void CSniffer::ShowIpData(char *pData, int len)
{


}

//協(xié)議分析統(tǒng)一在此處理
void CSniffer::TCPProtocolParse(char *pData, int nLen)
{
	for(int i=0; i<nLen; i++)
	{
		if(pData[i] == 0)
			pData[i] = '\n';
	}

		UINT nPort = GetPort();

	m_HttpParse.Perform(pData, nLen, nPort, m_szSourceIP, "",
				 m_szSourcePort, m_szDestIP, "", m_szDestPort);
	
}



void CSniffer::ConfigProtocolParsePack(vector<DWORD> &Parse_List)
{

	int nTelnetLen = Parse_List.size();
	int nLen = sizeof(TELNET_IAC_PACK) * nTelnetLen;
	char *config = new char[nLen];

	
	for (int i = 0; i < nTelnetLen; i++)
	{
		DWORD Node = Parse_List.at(i);

		if (Node != 0)
		{
			TELNET_IAC_PACK* pNode = (TELNET_IAC_PACK*)Node;
			memset(config, 0, nLen + 1);
			wsprintf(config, 
				"[時間]%s\r\n[源IP]%s\r\n[目的IP]%s\r\n[源MAC]%s\r\n[目的MAC]%s\r\n[命令]\r\n%s\r\n[數(shù)據(jù)域]\r\n%s%\r\n",
				pNode->date,
				pNode->src_ip,
				pNode->des_ip,
				pNode->src_mac,
				pNode->des_mac,
				pNode->cmd,
				pNode->data);
		}
	}
		
	

	//存放到文件中去
	char path[1024] ={0};
	//GetCurrentDirectory(1024, path);
	//strcat(path, "\\網(wǎng)絡(luò)抓包日志(Telent).log");

	strcpy(path, "c:\\網(wǎng)絡(luò)抓包日志(Telent).log");
	nLen = strlen(config);
	WriteLogFile(config, nLen, path);
}

//////////////////////////////////////////////////////////////////////////
//將協(xié)議int轉(zhuǎn)為字符串
char* CSniffer::CheckProtocol(int iProtocol)
{
	for(int i=0; i < MAX_PROTO_NUM; i++)
	{
		if(ProtoMap[i].ProtoNum == iProtocol)
		{
			return ProtoMap[i].ProtoText;
		}
	}
		return "";
}

//得到本機IP
char* CSniffer::GetIp()
{
	WORD wVersionRequested;
	WSADATA wsaData;
	char name[255];
	char *ip;
	PHOSTENT hostinfo;
	wVersionRequested = MAKEWORD( 2, 0 );
	if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
	{
		
		if( gethostname ( name, sizeof(name)) == 0)
		{
			if((hostinfo = gethostbyname(name)) != NULL)
			{
				ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
			}
		}
		
		WSACleanup();
	} 
	return ip;
}

//得到當前時間,格式:%Y-%m-%d %H:%M:%S
void CSniffer::GetNowTime(char *pCurTime)
{
	_SYSTEMTIME Curtime;
	GetSystemTime(&Curtime);
	wsprintf(pCurTime, "%4d-%2d-%2d %2d:%2d:%2d",
		Curtime.wYear,
		Curtime.wMonth,
		Curtime.wDay,
		Curtime.wHour,
		Curtime.wMinute,
		Curtime.wSecond);
}


//寫入日志文件
bool CSniffer::WriteLogFile(char *strInfo, int nBuffer, char *strFileName)
{
	if (lstrlen(strInfo)<1)
		return FALSE;

	int nLen = sizeof(strInfo);
	FILE *lpfile;
	lpfile = fopen(strFileName, "aw+");
	//fseek(lpfile, 0, SEEK_END);

	char *temp =  new char[nBuffer];
	memset(temp, 0, nBuffer);
	strcpy(temp, strInfo);
	strcat(temp, "\r\n");
	fwrite(temp, nBuffer, 1, lpfile);
	fclose(lpfile);
	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区在线免费观看| 亚洲视频电影在线| 日本中文字幕一区二区有限公司| 色综合网色综合| 亚洲综合图片区| 欧美精品在线一区二区三区| 蜜桃久久av一区| 久久九九久久九九| av亚洲精华国产精华精华| 亚洲免费毛片网站| 51精品视频一区二区三区| 蜜桃视频第一区免费观看| 国产亚洲欧美激情| 一本在线高清不卡dvd| 久久成人久久鬼色| 精品久久久久久无| 成人精品视频一区二区三区| 一区二区三区四区高清精品免费观看| 欧美吻胸吃奶大尺度电影| 日本中文字幕一区二区有限公司| 精品久久久久久久久久久久久久久久久| 国产成人自拍网| 亚洲最大成人网4388xx| 欧美成人a在线| av在线播放不卡| 秋霞电影一区二区| 国产精品久久久久久一区二区三区| 色综合久久99| 久久精品国产99| 亚洲免费观看在线观看| 日韩写真欧美这视频| 成人一区二区视频| 日韩有码一区二区三区| 国产精品少妇自拍| 色综合久久综合中文综合网| 毛片基地黄久久久久久天堂| 国产精品久久久久久亚洲伦| 在线播放/欧美激情| 波多野结衣一区二区三区| 丝袜美腿高跟呻吟高潮一区| 欧美国产精品一区二区三区| 欧美日产在线观看| 成人av网站在线观看| 麻豆精品视频在线| 亚洲柠檬福利资源导航| 国产亚洲欧美日韩在线一区| 8x8x8国产精品| 不卡的av中国片| 国产美女精品一区二区三区| 亚洲电影视频在线| 亚洲蜜桃精久久久久久久| 国产午夜精品一区二区三区视频| 欧美亚洲另类激情小说| 高清成人在线观看| 精品亚洲porn| 偷窥国产亚洲免费视频| 亚洲免费电影在线| 亚洲国产精品成人综合色在线婷婷| 欧美电影一区二区| 欧美图区在线视频| 日本乱人伦aⅴ精品| 成人动漫一区二区在线| 久久99精品久久久久| 青青草精品视频| 日韩电影在线观看一区| 亚洲影视资源网| 亚洲激情第一区| 亚洲色图都市小说| 国产精品乱码久久久久久| 国产日韩v精品一区二区| 精品免费99久久| 欧美成人乱码一区二区三区| 欧美一区二区三区在线观看视频| 在线观看一区二区精品视频| 91丨porny丨最新| 成人动漫在线一区| 99久久久国产精品免费蜜臀| 99久久免费精品高清特色大片| 成人中文字幕合集| 99在线热播精品免费| voyeur盗摄精品| 不卡一区二区在线| 91视频com| 色8久久人人97超碰香蕉987| 91国产免费看| 欧美日韩一区二区电影| 欧美日韩大陆在线| 欧美一级视频精品观看| 日韩一区二区三区视频在线 | 天天综合网天天综合色| 丝袜亚洲另类欧美| 开心九九激情九九欧美日韩精美视频电影| 午夜a成v人精品| 免费看日韩精品| 激情图区综合网| 岛国av在线一区| 色哟哟国产精品| 欧美日韩www| 欧美大黄免费观看| 国产精品伦理一区二区| 一区二区三区国产精品| 天天色图综合网| 激情综合色综合久久| 高清国产午夜精品久久久久久| 97se亚洲国产综合自在线| 欧美日韩精品专区| 久久综合久久综合亚洲| 亚洲欧洲av色图| 日韩经典一区二区| 成人一级片网址| 欧美婷婷六月丁香综合色| 精品久久国产97色综合| 国产精品久久久99| 丝袜a∨在线一区二区三区不卡| 精品一区二区免费| 色域天天综合网| 精品少妇一区二区三区在线播放| 国产精品丝袜黑色高跟| 日一区二区三区| 成人午夜私人影院| 欧美日韩国产一二三| 久久免费国产精品| 一区二区理论电影在线观看| 麻豆精品一区二区综合av| 99re热这里只有精品视频| 欧美一级在线免费| 亚洲精品国产无天堂网2021| 激情五月婷婷综合| 欧美日韩在线免费视频| 国产亚洲人成网站| 五月激情六月综合| 99久久精品国产网站| 精品欧美黑人一区二区三区| 亚洲蜜臀av乱码久久精品| 国产一区二区三区免费看| 欧美色网站导航| 国产精品欧美极品| 激情综合五月婷婷| 欧美色手机在线观看| 欧美激情在线一区二区三区| 天天影视涩香欲综合网| 91亚洲精品乱码久久久久久蜜桃| 精品国产a毛片| 亚洲韩国一区二区三区| 不卡av电影在线播放| 日韩一区二区三区免费看| 亚洲国产精品久久人人爱蜜臀 | 国产精品人人做人人爽人人添| 亚洲国产精品精华液网站| 97久久精品人人爽人人爽蜜臀| 日韩久久久久久| 日韩和欧美一区二区三区| 欧美色精品在线视频| 亚洲视频你懂的| 99久久99久久精品免费看蜜桃| 久久久久久一级片| 狠狠色综合播放一区二区| 日韩一区二区三区精品视频| 亚洲主播在线观看| 91国内精品野花午夜精品| 亚洲乱码一区二区三区在线观看| 成人免费视频视频| 国产亚洲一区二区三区在线观看| 国产一区视频导航| 久久免费看少妇高潮| 国产精品自产自拍| 国产日韩欧美a| 成人黄动漫网站免费app| 亚洲欧洲精品一区二区三区不卡| 岛国精品在线播放| 亚洲欧洲国产日韩| 日本国产一区二区| 亚洲制服丝袜av| 欧美人xxxx| 裸体一区二区三区| 欧美成人精品3d动漫h| 国产乱码精品一区二区三区av| 久久免费美女视频| 成人黄色大片在线观看| 亚洲精品成人天堂一二三| 91麻豆精品在线观看| 亚洲愉拍自拍另类高清精品| 欧美裸体一区二区三区| 日本女优在线视频一区二区| 日韩免费视频一区二区| 国产伦精品一区二区三区免费| 欧美—级在线免费片| 91麻豆国产在线观看| 亚洲成人av一区二区三区| 日韩一级片在线观看| 国产九九视频一区二区三区| 国产精品日韩成人| 欧美亚一区二区| 久久99最新地址| 欧美国产精品中文字幕| 欧美午夜一区二区| 久久精工是国产品牌吗| 亚洲欧洲精品成人久久奇米网| 欧美日韩一区二区三区免费看 | 日韩精品一区二区三区在线播放|