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

📄 dumppacket.cpp

📁 DES算法及其在VC++6.0下的实现,编译时需要WinPcap开发包,您可以从http://www.vckbase.com/tools下载 WinPcap Developer s pack
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			OutPut(buffer);
			sprintf(szProtocolName,"ICMP Time Exceeded");
			break;
		case  12: //Parameter Problem
			sprintf(buffer,"\nICMP: Type = Parameter Problem");
			OutPut(buffer);
			sprintf(buffer,"\nICMP: Code =[%d]",MsgCode);
			OutPut(buffer);
			sprintf(szProtocolName,"ICMP Parameter Problem");
			break;
		case  13: //Time Stamp
			sprintf(buffer,"\nICMP: Type = Time Stamp Request");
			OutPut(buffer);
			sprintf(buffer,"\nICMP: Code =[%d]",MsgCode);
			OutPut(buffer);
			sprintf(szProtocolName,"ICMP Time Stamp Request");
			break;
		case  14: //Time Stamp Reply
			sprintf(buffer,"\nICMP: Type = Time Stamp Reply");
			OutPut(buffer);
			sprintf(buffer,"\nICMP: Code =[%d]",MsgCode);
			OutPut(buffer);
			sprintf(szProtocolName,"ICMP Time Stamp Reply");
			break;
		case  15: //Information Request
		case  16: //Information Reply
			{
				unsigned int ID = (unsigned int)lpFrameBuffer[Pointer+4]*0x100+
					    			(unsigned int)lpFrameBuffer[Pointer+5];
				unsigned int SEQ = (unsigned int)lpFrameBuffer[Pointer+6]*0x100+
					    			(unsigned int)lpFrameBuffer[Pointer+7];
				if( Type == 15  ) {
					sprintf(buffer,"\nICMP: Type = Information Request");
				} else {
					sprintf(buffer,"\nICMP: Type = Information Reply");
				}
				OutPut(buffer);
				sprintf(buffer,"\nICMP: Code =[%u] ID = [%04x] Seq = [%u]",MsgCode,ID,SEQ);
				OutPut(buffer);
			}
			sprintf(szProtocolName,"ICMP Information");
			return(Pointer+8);
		case  17: //Address Mask Request
		case  18: //Address Mask Reply
			{
				unsigned int ID = (unsigned int)lpFrameBuffer[Pointer+4]*0x100+
					    			(unsigned int)lpFrameBuffer[Pointer+5];
				unsigned int SEQ = (unsigned int)lpFrameBuffer[Pointer+6]*0x100+
					    			(unsigned int)lpFrameBuffer[Pointer+7];
				if( Type  ) {
					sprintf(buffer,"\nICMP: Type = Address Mask Request");
				} else {
					sprintf(buffer,"\nICMP: Type = Address Mask Reply");
				}
				OutPut(buffer);
				sprintf(buffer,"\nICMP: Code =[%u] ID = [%04x] Seq = [%u]",MsgCode,ID,SEQ);
				OutPut(buffer);
				sprintf(buffer,"\nICMP: Mask = [%03u.%03u.%03u.%03u]",
					lpFrameBuffer[Pointer+8] & 0x00ff,
					lpFrameBuffer[Pointer+9] & 0x00ff,
					lpFrameBuffer[Pointer+10] & 0x00ff,
					lpFrameBuffer[Pointer+11] & 0x00ff);
				OutPut(buffer);
			}
			sprintf(szProtocolName,"ICMP Address Mask");
			return(Pointer+12);
		default:
			sprintf(buffer,"\nICMP: Type = Unkwon");
			OutPut(buffer);
			sprintf(buffer,"\nICMP: Code =[%d]",MsgCode);
			OutPut(buffer);
			sprintf(szProtocolName,"ICMP Unkwon");
	}
	return(Pointer+4);
}


char * GetProtName(int sp,int dp);

int	UDPHeader(char far *lpFrameBuffer,int Pointer,int FrameLength,FILE *OutFp,int *ProtocolType)
{
	int	HeaderLength = 8;

	int SourcePort = ((int)lpFrameBuffer[Pointer] * 0x100 )
                            + ((int)lpFrameBuffer[Pointer+1] & 0x00ff) ;
	int DestPort = ((int)lpFrameBuffer[Pointer+2]* 0x100 )
                            + ((int)lpFrameBuffer[Pointer+3] & 0x00ff) ;
	int	UDPDataLength = ((int) lpFrameBuffer[Pointer+4] *0x100 ) 
						+ ((int ) lpFrameBuffer[Pointer+5] & 0x00ff);
	int	UDPCheckSum =  ((int) lpFrameBuffer[Pointer+6] *0x100 ) 
						+ ((int ) lpFrameBuffer[Pointer+7] & 0x00ff);
	OutPut("\n#=== UDP Header");
	sprintf(buffer,"\nUDP: Src Port = [%5u]",SourcePort);
	OutPut(buffer);
	sprintf(buffer,"\nUDP: Dst Port = [%5u]",DestPort);
	OutPut(buffer);
	sprintf(buffer,"\nUDP: Length = [%4u]",UDPDataLength);
	OutPut(buffer);
	sprintf(buffer,"\nUDP: CheckSum = [0x%04x]",UDPCheckSum);
	OutPut(buffer);

	sprintf(szProtocolName,GetProtName(SourcePort,DestPort));
	return( Pointer+HeaderLength);

}

struct _PortList {
	int Port;
	char szName[50];
} PortList[] = {
	-1, "Unkwon",
	5,	"Remote Job Entry",
	7,  "Echo",
	9,  "Discard",
	11, "Active Users",
	13, "Daytime",
	15, "Unassigned",
	17, "Quote of the Day",
	19,	"Character Generator",
	20, "File Transfer [Default Data]",
	21, "FTP File Transfer [Control]",
	23, "Telnet",
	25, "Simple Mail Transfer",
	37,	"Time",
	42, "Host Name Server",
	43, "Who Is",
	49, "Login Host Protocol",
	53, "Domain Name Server",
	67,	"Bootstrap Protocol Server",
	68,	"Bootstrap Protocol Client",
	69, "Trivial File Transfer",
	109,"Post Office Protocol - Ver 2",
	110,"Post Office Protocol - Ver 3",
	111,"SUN Remote Procedure Call",
	119,"Network News Transfer",
	123,"Network Time Protocol",
	137,"NETBIOS Name Service",
	138,"NETBIOS Datagram Service",
	139,"NETBIOS Session Service",
	153,"SGMP",
	160,"SGMP-TRAPS",
	161,"SNMP",
	162,"SNMPTRAP",
	  0,""
};



char * GetProtName(int sp,int dp)
{
	int  i;
	for(i = 0; PortList[i].Port;i++ ) {
		if( sp == PortList[i].Port ) return(PortList[i].szName);
		if( dp == PortList[i].Port ) return(PortList[i].szName);
	}
	return(PortList[0].szName);
}


//丂俿俠俹僿僢僟傪弌椡偡傞丅
int	TCPHeader(char far *lpFrameBuffer,int Pointer,int FrameLength,FILE *OutFp,int *ProtocolType)
{

	int SourcePort = ((int)lpFrameBuffer[Pointer] * 0x100 )
                            + ((int)lpFrameBuffer[Pointer+1] & 0x00ff) ;
	int DestPort = ((int)lpFrameBuffer[Pointer+2]* 0x100 )
                            + ((int)lpFrameBuffer[Pointer+3] & 0x00ff) ;

	unsigned long SEQNumber
 					  = ((unsigned long) lpFrameBuffer[Pointer+4] * 0x01000000L)
			  + ((unsigned long) lpFrameBuffer[Pointer+5] * 0x00010000L)
			  + ((unsigned long) lpFrameBuffer[Pointer+6] * 0x00000100L)
			  + ((unsigned long) lpFrameBuffer[Pointer+7] );
	unsigned long ACKNumber
			  = ((unsigned long) lpFrameBuffer[Pointer+8] * 0x01000000L)
			  + ((unsigned long) lpFrameBuffer[Pointer+9] * 0x00010000L)
			  + ((unsigned long) lpFrameBuffer[Pointer+10] * 0x00000100L)
			  + ((unsigned long) lpFrameBuffer[Pointer+11] );

	int	DataOffset;

	int	ControlFlag = (int) lpFrameBuffer[Pointer+13] & 0x003f;

	int	Window = ((int) lpFrameBuffer[Pointer+14] * 0x100)
                                   + ( (int) lpFrameBuffer[Pointer+15] );
	int	TCPCheckSum = ((int) lpFrameBuffer[Pointer+16] * 0x100)
                                   + ( (int) lpFrameBuffer[Pointer+17] );
	int	UrgentPointer = ((int) lpFrameBuffer[Pointer+18] * 0x100)
                                 + ( (int) lpFrameBuffer[Pointer+19] );


	int HeaderLength  = (int)lpFrameBuffer[Pointer+12];

	HeaderLength >>= 2;
	HeaderLength &= 0x3e;

	DataOffset = HeaderLength;


	OutPut("\n#=== TCP Header");
	sprintf(buffer,"\nTCP: Src Port = [%5u]",SourcePort);
	OutPut(buffer);
	sprintf(buffer,"\nTCP: Dst Port = [%5u]",DestPort);
	OutPut(buffer);
	sprintf(buffer,"\nTCP: SEQ Number = [%12lu]",SEQNumber);
	OutPut(buffer);
	sprintf(buffer,"\nTCP: ACK Number = [%12lu]",ACKNumber);
	OutPut(buffer);
	sprintf(buffer,"\nTCP: Data Offset    = [%4u]",DataOffset);
	OutPut(buffer);

	sprintf(buffer,"\nTCP: Control Flags =  [%s %s %s %s %s %s]",
		ControlFlag & 0x0020 ? "URG" : "",
		ControlFlag & 0x0010 ? "ACK" : "",
		ControlFlag & 0x0008 ? "PSH" : "",
		ControlFlag & 0x0004 ? "RST" : "",
		ControlFlag & 0x0002 ? "SYN" : "",
		ControlFlag & 0x0001 ? "FIN" : "");

	OutPut(buffer);

	sprintf(buffer,"\nTCP: Window = [%4u] ",Window);
	OutPut(buffer);
	sprintf(buffer,"\nTCP: Check Sum = [0x%04x] ",TCPCheckSum);
	OutPut(buffer);
	sprintf(buffer,"\nTCP: Urgent Pointer = [%4u] ",UrgentPointer);
	OutPut(buffer);
	if( HeaderLength > 20 ) {
		int	i;
		char	wk[10];
		sprintf(buffer,"\nTCP: Option         = ");
		for(i = Pointer+20; i < Pointer + HeaderLength;i++ ) {
			sprintf(wk,"%02x",(int)lpFrameBuffer[i] & 0x00ff);
			strcat(buffer,wk);
		}
		OutPut(buffer);
	}
	sprintf(szProtocolName,GetProtName(SourcePort,DestPort));
	return( Pointer+HeaderLength);
}





void DumpPacket(char *pPacket, int paketLen)
{

	int		EtherType;
	int		ProtType;

	char	*lpFrameBuffer;
	
	int		j;
	int		len;
	
	lpFrameBuffer = pPacket;
	len = paketLen;

	sprintf(szProtocolName,"");
	
	j = 0;
	
	j = EtherHeader(lpFrameBuffer,0,len,stdout,&EtherType);
	
	if( EtherType == SNAP_PKT_TYPE ) 
	{
		j = SNAPHeader(lpFrameBuffer,j,len,stdout,&EtherType);
	}
	
	if( EtherType == ARP_PKT_TYPE ) 
	{
		j = ARPHeader(lpFrameBuffer,j,len,stdout);
		sprintf(szProtocolName,"ARP");
	} 
	else if ( EtherType == IP_PKT_TYPE ) 
	{
		j = IPHeader(lpFrameBuffer,j,len,stdout,&ProtType);
		
		if( ProtType == TCP_PKT_TYPE ) 
		{
			j = TCPHeader(lpFrameBuffer,j,len,stdout,&ProtType);
		} 
		else if ( ProtType == UDP_PKT_TYPE ) 
		{
			j = UDPHeader(lpFrameBuffer,j,len,stdout,&ProtType);
		} 
		else if ( ProtType == ICMP_PKT_TYPE ) 
		{
			j = ICMPHeader(lpFrameBuffer,j,len,stdout,&ProtType);
		}
	} 
	else 
	{
		sprintf(szProtocolName,"Other");
	}
}

⌨️ 快捷键说明

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