⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysock.cpp

📁 这是一个关于raw socket封包分析功能的源码程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			pSHKBEGIN=(SHKBEGINHEARER*)pdata;
			if( (pSHKBEGIN->shkf1==12)&&(pSHKBEGIN->shkf2==2)&&
				(pSHKBEGIN->shkf3==0)  ){//出牌信号

				//...........................	
				pMySock->m_pDlg->m_csRecord="";
				//.........................

				pMySock->m_pDlg->m_cs14="ZZ";
				pMySock->m_pDlg->m_cs13="FF";
				pMySock->m_pDlg->m_cs12="22222222";
				pMySock->m_pDlg->m_cs11="AAAAAAAA";
				pMySock->m_pDlg->m_cs10="KKKKKKKK";
				pMySock->m_pDlg->m_cs9 ="QQQQQQQQ";
				pMySock->m_pDlg->m_cs8 ="JJJJJJJJ";
				pMySock->m_pDlg->m_cs7 ="00000000";
				pMySock->m_pDlg->m_cs6 ="99999999";
				pMySock->m_pDlg->m_cs5 ="88888888";
				pMySock->m_pDlg->m_cs4 ="77777777";
				pMySock->m_pDlg->m_cs3 ="66666666";
				pMySock->m_pDlg->m_cs2 ="55555555";
				pMySock->m_pDlg->m_cs1 ="44444444";
				pMySock->m_pDlg->m_cs0 ="33333333";

				char k=0;
				begin=pdata[40];//在2002.1.27分析,为打牌者编号0-4
				for(char   j=0;j<27;j++){//双扣共计27张牌
					//cs+=SHKIndex[*(pdata+52+j)];//51=71+8-27+1
					k=SHKIndexCPL[*(pdata+52+j)];//k为m_csK;
					if      (k==0)  pMySock->m_pDlg->m_cs0.Delete(0,1);
					else if (k==1)  pMySock->m_pDlg->m_cs1.Delete(0,1); 
					else if (k==2)  pMySock->m_pDlg->m_cs2.Delete(0,1);
					else if (k==3)  pMySock->m_pDlg->m_cs3.Delete(0,1);
					else if (k==4)  pMySock->m_pDlg->m_cs4.Delete(0,1);
					else if (k==5)  pMySock->m_pDlg->m_cs5.Delete(0,1);
					else if (k==6)  pMySock->m_pDlg->m_cs6.Delete(0,1);
					else if (k==7)  pMySock->m_pDlg->m_cs7.Delete(0,1);
					else if (k==8)  pMySock->m_pDlg->m_cs8.Delete(0,1);
					else if (k==9)  pMySock->m_pDlg->m_cs9.Delete(0,1);
					else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
					else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
					else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
					else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
					else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
				}//end for*/
				pMySock->m_pDlg->m_diaRecord.m_csLeft="";
				pMySock->m_pDlg->m_diaRecord.m_csFace="";
				pMySock->m_pDlg->m_diaRecord.m_csRigh="";
				pMySock->m_pDlg->m_diaRecord.m_csMeis="";
    			::SendMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
			}//end if( (//出牌信号结束
			pSHK=(SHKHEADER*)pdata;
			if( (pSHK->shkf1==11)&&(pSHK->shkf2==2)&& 
				(pSHK->shkf3==0)  ){//出牌信息..
				char* pd=pdata+sizeof(SHKHEADER);
				char  k,j=pSHK->count;//牌的张数..
				//if( (begin!=pSHK->begin)&&(j>0) ){
				if(j>0){
				  for(;j>0;j--,pd+=4){
					cs+=SHKIndex[*pd];
					if(begin==pSHK->begin) continue;
					k=SHKIndexCPL[*pd];//k为m_csK;
					if      (k==0)  pMySock->m_pDlg->m_cs0.Delete(0,1);
					else if (k==1)  pMySock->m_pDlg->m_cs1.Delete(0,1); 
					else if (k==2)  pMySock->m_pDlg->m_cs2.Delete(0,1);
					else if (k==3)  pMySock->m_pDlg->m_cs3.Delete(0,1);
					else if (k==4)  pMySock->m_pDlg->m_cs4.Delete(0,1);
					else if (k==5)  pMySock->m_pDlg->m_cs5.Delete(0,1);
					else if (k==6)  pMySock->m_pDlg->m_cs6.Delete(0,1);
					else if (k==7)  pMySock->m_pDlg->m_cs7.Delete(0,1);
					else if (k==8)  pMySock->m_pDlg->m_cs8.Delete(0,1);
					else if (k==9)  pMySock->m_pDlg->m_cs9.Delete(0,1);
					else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
					else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
					else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
					else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
					else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
				  }//end for(;j减去一次出的牌..
				  cs+=" ";
				  if(      (begin+1)%4==pSHK->begin){
					  pMySock->m_pDlg->m_diaRecord.m_csLeft+=cs;
				  }
				  else if( (begin+2)%4==pSHK->begin){
					  pMySock->m_pDlg->m_diaRecord.m_csFace+=cs;
				  }
					  //pMySock->m_pDlg->m_dFace.PutMs((LPCSTR)cs);
				  else if( (begin+3)%4==pSHK->begin){
					  pMySock->m_pDlg->m_diaRecord.m_csRigh+=cs;
				  }
				  else{
					  pMySock->m_pDlg->m_diaRecord.m_csMeis+=cs;
				  }	
				  ::SendMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
				  cs="";
				}//end if begin
			}//end if一次出牌结束。
			
			::SendMessage(AfxGetMainWnd()->m_hWnd,WM_SOCKTTHREAD,0,0);
			if(w==i) break;
			//调试信息.....
			//char t1[250];
			//sprintf(t1,"隔断TCP包i=%u,w=%u",(unsigned int)i,(unsigned int)w);
			//AfxMessageBox(t1);
			//........
			i-=w;//两次有效信息在一起...要分析下一次数据....
			pdata=pdata+w;
		}//end while(1);//全部数据分析完成.
		
		
		/*pShK=(SHKHEADER*)pdata;		
		static unsigned char ch;
		ch=(unsigned char)pShK->count;
		static unsigned char oldcount=ch;
		static unsigned char oldbegin=(unsigned char)pShK->begin;
		if(pShK->shkf1!=11||pShK->shkf2!=2||pShK->shkf3!=0)
			return 0;
		pdata=pdata+sizeof(SHKHEADER);
		
		if( (ch==0)&&(oldbegin!=pShK->begin) )
			for(ch=oldcount;ch>0;ch--)
				cs+=".";
		else{
			oldcount=ch;
			oldbegin=pShK->begin;
			for(;ch>0;ch--,pdata+=4)
				cs+=ShKIndex[*pdata];
		}
		*/
		//pMySock->m_pDlg->m_cs2 ="55555555";
		//pMySock->m_pDlg->m_cs1 ="44444444";
		//pMySock->m_pDlg->m_cs0 ="33333333";
		//::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SOCKTTHREAD,0,0);
		return 0;
}

int ProceDZHTcp(char* pdata,CMySock* pMySock,unsigned int i)
{
	//只能用于单幅牌..
	DZHHEADER*      pDZH=NULL;
	OURGAMEHEADER*  pOURGAME=NULL;
	DZHBEGINHEARER* pDZHBEGIN=NULL;
	DZHHAVEHEADER*  pDZHHAVE=NULL;
		CString cs="";
		unsigned int w;
		static char  begin=0;
		while(1){
			pOURGAME=(OURGAMEHEADER*)pdata;
			if( (pOURGAME->flag1==0)&&(pOURGAME->flag2==0)&&
				(pOURGAME->flag3==0) )  break;//更换游戏室的数据,退出
			else if(pOURGAME->flag4==128) 	    w=(4+4+4+pOURGAME->allbyte);
			else if(pOURGAME->flag4==0)     w=(4+4+  pOURGAME->allbyte);
			else{   
				//char szErr[50];
				//memset(szErr,0,sizeof(szErr));
				//sprintf(szErr,"%u,%u,%u,%u,%u",pdata[0],pdata[1],
				//			pdata[2],pdata[3],pdata[4]);
				//AfxMessageBox(szErr);
				break;//一个未知的数据,退出。
			}
			pDZHBEGIN=(DZHBEGINHEARER*)pdata;
			if( (pDZHBEGIN->dzhf1==12)&&(pDZHBEGIN->dzhf2==2)&&
				(pDZHBEGIN->dzhf3==0)  ){//出牌信号
				
				//...........................	
				pMySock->m_pDlg->m_csRecord="";
				//.........................

				pMySock->m_pDlg->m_cs14="Z";
				pMySock->m_pDlg->m_cs13="F";
				pMySock->m_pDlg->m_cs12="2222";
				pMySock->m_pDlg->m_cs11="AAAA";
				pMySock->m_pDlg->m_cs10="KKKK";
				pMySock->m_pDlg->m_cs9 ="QQQQ";
				pMySock->m_pDlg->m_cs8 ="JJJJ";
				pMySock->m_pDlg->m_cs7 ="0000";
				pMySock->m_pDlg->m_cs6 ="9999";
				pMySock->m_pDlg->m_cs5 ="8888";
				pMySock->m_pDlg->m_cs4 ="7777";
				pMySock->m_pDlg->m_cs3 ="6666";
				pMySock->m_pDlg->m_cs2 ="5555";
				pMySock->m_pDlg->m_cs1 ="4444";
				pMySock->m_pDlg->m_cs0 ="3333";

				char k=0;
				begin=pdata[40];//打牌者编号0-3
				for(char   j=0;j<17;j++){
					k=SHKIndexCPL[*(pdata+56+j)];//k为m_csK;
					if      (k==0)  pMySock->m_pDlg->m_cs0.Delete(0,1);
					else if (k==1)  pMySock->m_pDlg->m_cs1.Delete(0,1); 
					else if (k==2)  pMySock->m_pDlg->m_cs2.Delete(0,1);
					else if (k==3)  pMySock->m_pDlg->m_cs3.Delete(0,1);
					else if (k==4)  pMySock->m_pDlg->m_cs4.Delete(0,1);
					else if (k==5)  pMySock->m_pDlg->m_cs5.Delete(0,1);
					else if (k==6)  pMySock->m_pDlg->m_cs6.Delete(0,1);
					else if (k==7)  pMySock->m_pDlg->m_cs7.Delete(0,1);
					else if (k==8)  pMySock->m_pDlg->m_cs8.Delete(0,1);
					else if (k==9)  pMySock->m_pDlg->m_cs9.Delete(0,1);
					else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
					else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
					else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
					else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
					else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
				}//end for*/
				pMySock->m_pDlg->m_diaRecord.m_csLeft="";
				pMySock->m_pDlg->m_diaRecord.m_csFace="";
				pMySock->m_pDlg->m_diaRecord.m_csRigh="";
				pMySock->m_pDlg->m_diaRecord.m_csMeis="";
    			::PostMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
			}//end if( (//出牌信号结束
			pDZH=(DZHHEADER*)pdata;
			if( (pDZH->dzhf1==16)&&(pDZH->dzhf2==32)&&
				(pDZH->dzhf3==1) ){//出牌信息..
				char* pd=pdata+sizeof(DZHHEADER);
				pd+=4;//于双扣不一样的地方.不知道为什么?..
				char  k,j=pDZH->count;//牌的张数..
				//if(begin!=pDZH->begin){
				if(j>0){
				  for(;j>0;j--,pd+=4){
                    cs+=SHKIndex[*pd];
					if(begin==pDZH->begin) continue;
					k=SHKIndexCPL[*pd];//k为m_csK;
					if      (k==0)  pMySock->m_pDlg->m_cs0.Delete(0,1);
					else if (k==1)  pMySock->m_pDlg->m_cs1.Delete(0,1); 
					else if (k==2)  pMySock->m_pDlg->m_cs2.Delete(0,1);
					else if (k==3)  pMySock->m_pDlg->m_cs3.Delete(0,1);
					else if (k==4)  pMySock->m_pDlg->m_cs4.Delete(0,1);
					else if (k==5)  pMySock->m_pDlg->m_cs5.Delete(0,1);
					else if (k==6)  pMySock->m_pDlg->m_cs6.Delete(0,1);
					else if (k==7)  pMySock->m_pDlg->m_cs7.Delete(0,1);
					else if (k==8)  pMySock->m_pDlg->m_cs8.Delete(0,1);
					else if (k==9)  pMySock->m_pDlg->m_cs9.Delete(0,1);
					else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
					else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
					else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
					else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
					else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
				  }//end for(;j减去一个出的牌..
				  cs+=" ";
				  if(      (begin+1)%3==pDZH->begin){
					  pMySock->m_pDlg->m_diaRecord.m_csLeft+=cs;
				  }
				  else if( (begin+2)%3==pDZH->begin){
					  pMySock->m_pDlg->m_diaRecord.m_csRigh+=cs;
				  }
				  else{
					  pMySock->m_pDlg->m_diaRecord.m_csMeis+=cs;
				  }	
				  ::PostMessage(pMySock->m_pDlg->m_diaRecord.m_hWnd,WM_DIARECORD,0,0);
				  cs="";
				}//end if begin
			}//end if一次出牌结束。
			pDZHHAVE=(DZHHAVEHEADER*)pdata;//地主给谁的信号
			if( (pDZHHAVE->dzhf1==9)&&(pDZHHAVE->dzhf2==32)&& 
				(pDZHHAVE->dzhf3==1) ){
				if(begin==pDZHHAVE->dzh){//地主就是自己,减牌
					for(char j=0,k;j<=2;j++){
						if(j==0)      k=SHKIndexCPL[pDZHHAVE->pai1];//k为m_csK;
						else if(j==2) k=SHKIndexCPL[pDZHHAVE->pai2];
						else	      k=SHKIndexCPL[pDZHHAVE->pai3];
						if      (k==0)  pMySock->m_pDlg->m_cs0.Delete(0,1);
						else if (k==1)  pMySock->m_pDlg->m_cs1.Delete(0,1); 
						else if (k==2)  pMySock->m_pDlg->m_cs2.Delete(0,1);
						else if (k==3)  pMySock->m_pDlg->m_cs3.Delete(0,1);
						else if (k==4)  pMySock->m_pDlg->m_cs4.Delete(0,1);
						else if (k==5)  pMySock->m_pDlg->m_cs5.Delete(0,1);
						else if (k==6)  pMySock->m_pDlg->m_cs6.Delete(0,1);
						else if (k==7)  pMySock->m_pDlg->m_cs7.Delete(0,1);
						else if (k==8)  pMySock->m_pDlg->m_cs8.Delete(0,1);
						else if (k==9)  pMySock->m_pDlg->m_cs9.Delete(0,1);
						else if (k==10) pMySock->m_pDlg->m_cs10.Delete(0,1);
						else if (k==11) pMySock->m_pDlg->m_cs11.Delete(0,1);
						else if (k==12) pMySock->m_pDlg->m_cs12.Delete(0,1);
						else if (k==13) pMySock->m_pDlg->m_cs13.Delete(0,1);
						else if (k==14) pMySock->m_pDlg->m_cs14.Delete(0,1);
					}//end for(;j
				}//if(begin==pDZHHAVE->dzh){
			}//if( (pDZHHAVE->dzhf1).......地主给谁结束、
			if(w==i) break;
			i-=w;//两次有效信息在一起...要分析下一次数据....
			pdata=pdata+w;
		}//end while(1);//全部数据分析完成.
	
	::PostMessage(AfxGetMainWnd()->m_hWnd,WM_SOCKTTHREAD,0,0);	
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -