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

📄 packettftp.cs

📁 一个抓包工具
💻 CS
字号:
using System;
using System.Windows.Forms;

namespace MyClasses
{

	public class PacketTFTP
	{

		public struct PACKET_TFTP
		{
			public ushort OpCode;
			public ushort Bytes;
			public ushort ErrorNo;
			public ushort BlockNo;
			public string ErrorMessage;
			public string SourceFile;
			public string DestinationFile;
			public string TransferType;
		}

		public PacketTFTP()
		{
		}


		public static bool Parser( ref TreeNodeCollection mNode, 
			byte [] PacketData , 
			ref int Index , 
			ref ListViewItem LItem )
		{
			TreeNode mNodex;
			string Tmp = "";
			int kk = 0;
			PACKET_TFTP PTftp;
			string ColumnInfo = "";
			string OptionName = "", OptionValue = "";

			mNodex = new TreeNode();
			mNodex.Text = "TFTP ( Trivial File Transfer Protocol )";
			kk = Index;
	
			try
			{
				PTftp.OpCode = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
				Tmp = "Operation Code : " + Function.ReFormatString( PTftp.OpCode , Const.GetTftpOpCodeString( PTftp.OpCode ) );
				mNodex.Nodes.Add( Tmp );
				Function.SetPosition( ref mNodex , Index - 2 , 2 , false );

				ColumnInfo = Const.GetTftpOpCodeString( PTftp.OpCode );

				switch( PTftp.OpCode )
				{
					case Const.TFTP_RRQ	:						PTftp.SourceFile = Function.FindString( PacketData , ref Index );						Tmp = "Source File Name : " + PTftp.SourceFile;
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - PTftp.SourceFile.Length - 1 , PTftp.SourceFile.Length + 1 , false );
						
						ColumnInfo += ", Source File Name : " + PTftp.SourceFile;
						PTftp.TransferType = Function.FindString( PacketData , ref Index );						Tmp = "Transfer Type : " + PTftp.TransferType;
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - PTftp.TransferType.Length - 1 , PTftp.TransferType.Length + 1 , false );
						
						ColumnInfo += ", Transfer Type : " + PTftp.TransferType;
						while( Index < PacketData.Length )						{							OptionName = Function.FindString( PacketData , ref Index );							OptionValue = Function.FindString( PacketData , ref Index );							Tmp = "Option : " + OptionName + " = " + OptionValue;
							mNodex.Nodes.Add( Tmp );
							Function.SetPosition( ref mNodex , Index - OptionName.Length - 1 - OptionValue.Length - 1 , OptionName.Length + 1 + OptionValue.Length + 1 , false );
							
							ColumnInfo += ", " + Tmp;						}						break;					case Const.TFTP_WRQ	:						PTftp.DestinationFile = Function.FindString( PacketData , ref Index );						Tmp = "Destination File Name : " + PTftp.DestinationFile;
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - PTftp.DestinationFile.Length - 1 , PTftp.DestinationFile.Length + 1 , false );
						
						ColumnInfo += ", Destination File Name : " + PTftp.DestinationFile;
						PTftp.TransferType = Function.FindString( PacketData , ref Index );						Tmp = "Transfer Type : " + PTftp.TransferType;
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - PTftp.TransferType.Length - 1 , PTftp.TransferType.Length + 1 , false );
						
						ColumnInfo += ", Transfer Type : " + PTftp.TransferType;
						while( Index < PacketData.Length )						{							OptionName = Function.FindString( PacketData , ref Index );							OptionValue = Function.FindString( PacketData , ref Index );							Tmp = "Option : " + OptionName + " = " + OptionValue;
							mNodex.Nodes.Add( Tmp );
							Function.SetPosition( ref mNodex , Index - OptionName.Length - 1 - OptionValue.Length - 1 , OptionName.Length + 1 + OptionValue.Length + 1 , false );
							
							ColumnInfo += ", " + Tmp;
						}						break;					case Const.TFTP_DATA	:						PTftp.BlockNo = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
						Tmp = "Block No : " + Function.ReFormatString( PTftp.BlockNo , null );
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - 2 , 2 , false );
						ColumnInfo += ", Block " + PTftp.BlockNo.ToString();

						PTftp.Bytes = (ushort) ( PacketData.Length - Index );
						Tmp = "Data : " + Function.ReFormatString( PTftp.Bytes , null ) + " bytes(s)";
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index , PTftp.Bytes , false );
						
						if( PTftp.Bytes < 512 ) 
							ColumnInfo += " ( Last )";
						break;					case Const.TFTP_ACK	:						PTftp.BlockNo = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
						Tmp = "Block No : " + Function.ReFormatString( PTftp.BlockNo , null );
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - 2 , 2 , false );

						ColumnInfo += ", Block " + PTftp.BlockNo.ToString();
						break;					case Const.TFTP_ERROR	:						PTftp.ErrorNo = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
						Tmp = "Error No : " + Function.ReFormatString( PTftp.ErrorNo , null );
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - 2 , 2 , false );

						ColumnInfo += ", Error No : " + PTftp.ErrorNo.ToString();
						PTftp.ErrorMessage = Function.FindString( PacketData , ref Index );						Tmp = "Error Message : " + PTftp.ErrorMessage;
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index - PTftp.ErrorMessage.Length - 1 , PTftp.ErrorMessage.Length + 1 , false );
						
						ColumnInfo += ", ErrorMessage : " + PTftp.ErrorMessage;
						break;					case Const.TFTP_OACK	:						while( Index < PacketData.Length )						{							OptionName = Function.FindString( PacketData , ref Index );							OptionValue = Function.FindString( PacketData , ref Index );							Tmp = "Option : " + OptionName + " = " + OptionValue;
							mNodex.Nodes.Add( Tmp );
							Function.SetPosition( ref mNodex , Index - OptionName.Length - 1 - OptionValue.Length - 1 , OptionName.Length + 1 + OptionValue.Length + 1 , false );
							
							ColumnInfo += ", " + Tmp;
						}						break;					default :						PTftp.Bytes = (ushort) ( PacketData.Length - Index );
						Tmp = "Data : " + Function.ReFormatString( PTftp.Bytes , " bytes(s)" );
						mNodex.Nodes.Add( Tmp );
						Function.SetPosition( ref mNodex , Index , PTftp.Bytes , false );
						
						break;
				}

				LItem.SubItems[ Const.LIST_VIEW_PROTOCOL_INDEX ].Text = "TFTP";
				LItem.SubItems[ Const.LIST_VIEW_INFO_INDEX ].Text = ColumnInfo;

				Function.SetPosition( ref mNodex , kk , Index - kk , true );
				mNode.Add( mNodex );


			}
			catch( Exception Ex )
			{
				mNode.Add( mNodex );
				Tmp = "[ Malformed TFTP packet. Remaining bytes don't fit an TFTP packet. Possibly due to bad decoding ]";
				mNode.Add( Tmp );
				Tmp = "[ Exception raised is <" + Ex.GetType().ToString() + "> at packet index <" + Index.ToString() + "> ]";
				mNode.Add( Tmp );
				LItem.SubItems[ Const.LIST_VIEW_INFO_INDEX ].Text = "[ Malformed TFTP packet. Remaining bytes don't fit an TFTP packet. Possibly due to bad decoding ]";

				return false;
			}

			return true;

		}


		public static bool Parser( byte [] PacketData , 
			ref int Index , 
			ref ListViewItem LItem )
		{
			PACKET_TFTP PTftp;
			string ColumnInfo = "";

			try
			{
				PTftp.OpCode = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
				ColumnInfo = Const.GetTftpOpCodeString( PTftp.OpCode );

				switch( PTftp.OpCode )
				{
					case Const.TFTP_RRQ	:						PTftp.SourceFile = Function.FindString( PacketData , ref Index );						ColumnInfo += ", Source File Name : " + PTftp.SourceFile;
						PTftp.TransferType = Function.FindString( PacketData , ref Index );						ColumnInfo += ", Transfer Type : " + PTftp.TransferType;
						break;					case Const.TFTP_WRQ	:						PTftp.DestinationFile = Function.FindString( PacketData , ref Index );						ColumnInfo += ", Destination File Name : " + PTftp.DestinationFile;
						PTftp.TransferType = Function.FindString( PacketData , ref Index );						ColumnInfo += ", Transfer Type : " + PTftp.TransferType;
						break;					case Const.TFTP_DATA	:						PTftp.BlockNo = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
						ColumnInfo += ", Block " + PTftp.BlockNo.ToString();

						PTftp.Bytes = (ushort) ( PacketData.Length - Index );
						if( PTftp.Bytes < 512 ) 
							ColumnInfo += " ( Last )";
						break;					case Const.TFTP_ACK	:						PTftp.BlockNo = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
						ColumnInfo += ", Block " + PTftp.BlockNo.ToString();
						break;					case Const.TFTP_ERROR	:						PTftp.ErrorNo = Function.Get2Bytes( PacketData , ref Index , Const.NORMAL );
						ColumnInfo += ", Error No : " + PTftp.ErrorNo.ToString();
						PTftp.ErrorMessage = Function.FindString( PacketData , ref Index );						ColumnInfo += ", ErrorMessage : " + PTftp.ErrorMessage;
						break;					case Const.TFTP_OACK	:						break;					default :						PTftp.Bytes = (ushort) ( PacketData.Length - Index );
						break;
				}

				LItem.SubItems[ Const.LIST_VIEW_PROTOCOL_INDEX ].Text = "TFTP";
				LItem.SubItems[ Const.LIST_VIEW_INFO_INDEX ].Text = ColumnInfo;

			}
			catch
			{
				LItem.SubItems[ Const.LIST_VIEW_INFO_INDEX ].Text = "[ Malformed TFTP packet. Remaining bytes don't fit an TFTP packet. Possibly due to bad decoding ]";
				return false;
			}

			return true;

		}

	}
}

⌨️ 快捷键说明

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