📄 dumppacket.cpp
字号:
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 + -