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

📄 common.pas

📁 一个SNOOP控件,各位看看可以对网络包进行分析.
💻 PAS
📖 第 1 页 / 共 2 页
字号:
			ListColumn.Caption := 'Window';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;
			if ListViewField <> TCP_FIELD then
				ListColumn.Width := 0;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Checksum(x)';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;
			if ListViewField <> TCP_FIELD then
				ListColumn.Width := 0;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'UrgPoint';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;
			if ListViewField <> TCP_FIELD then
				ListColumn.Width := 0;
		end;
		UDP_FIELD: begin
			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Src Port';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Dst Port';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Length';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;
			if ListViewField <> UDP_FIELD then
				ListColumn.Width := 0;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Checksum(x)';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;
			if ListViewField <> UDP_FIELD then
				ListColumn.Width := 0;
		end;
		TCPDATA_FIELD: begin
			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'TCPDataLength';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Data';
			ListColumn.Width := 100;
			ListColumn.Tag := 100;
		end;
		UDPDATA_FIELD: begin
			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'UDPDataLength';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;

			ListColumn := ListView.Columns.Add;
			ListColumn.Caption := 'Data';
			ListColumn.Width := 50;
			ListColumn.Tag := 50;
		end;
	end;
end;

procedure LoadListColumnWidth(Form: TForm; IniFileName: String);
var
	i, j, ColumnWidth: Integer;
	IniFile: TIniFile;
	ListView: TListView;
	ListColumn: TListColumn;
begin
	IniFile := TIniFile.Create(IniFileName);
	for i := 0 to Form.ComponentCount - 1 do
	begin
		if not (Form.Components[i] is TListView) then continue;
		ListView := Form.Components[i] as TListView;
		for j := 0 to ListView.Columns.Count - 1 do
		begin
			ColumnWidth := IniFile.ReadInteger(ListView.Name, 'Width' + IntToStr(j), -1);
			if ColumnWidth <> -1 then
			begin
				ListColumn := ListView.Columns.Items[j];
				ListColumn.Width := ColumnWidth;
			end;
		end;
	end;
	IniFile.Free;
end;

procedure SaveListColumnWidth(Form: TForm; IniFileName: String);
var
	i, j, ColumnWidth: Integer;
	IniFile: TIniFile;
	ListView: TListView;
	ListColumn: TListColumn;
begin
	IniFile := TIniFile.Create(IniFileName);
	try
		for i := 0 to Form.ComponentCount - 1 do
		begin
			if not (Form.Components[i] is TListView) then continue;
			ListView := Form.Components[i] as TListView;
			for j := 0 to ListView.Columns.Count - 1 do
			begin
				ListColumn := ListView.Columns.Items[j];
				ColumnWidth := ListColumn.Width;
				IniFile.WriteInteger(ListView.Name, 'Width' + IntToStr(j), ColumnWidth);
			end;
		end;
	finally
		IniFile.Free;
	end;
end;

procedure ShowColumn(ListView: TListView; StartIndex: Integer; EndIndex: Integer);
var
	i: Integer;
	ListColumn: TListColumn;
begin
	for i := StartIndex to EndIndex do
	begin
		ListColumn := ListView.Columns.Items[i];
		ListColumn.Width := ListColumn.Tag;
	end;
end;

procedure HideColumn(ListView: TListView; StartIndex: Integer; EndIndex: Integer);
var
	i: Integer;
	ListColumn: TListColumn;
begin
	for i := StartIndex to EndIndex do
	begin
		ListColumn := ListView.Columns.Items[i];
		ListColumn.Tag := ListColumn.Width;
		ListColumn.Width := 0;
	end;
end;

procedure AddPacketHeader(ListItem: TListItem; PacketHeader: PPCAP_PKTHDR);
var
	Hour: LongWord;
	Min: LongWord;
	Sec: LongWord;
	TimeStr: String;
begin
	Sec := PacketHeader.ts.tv_sec;
	Sec := Sec mod 86400; // Remove day
	Hour := Sec div 3600;
	Sec := Sec mod 3600;
	Min := Sec div 60;
	Sec := Sec mod 60;

	TimeStr := TimeStr + Format('%2d:%2d:%2d:%6d', [Hour, Min, Sec, PacketHeader.ts.tv_usec]);
	ListItem.Caption := TimeStr;
	ListItem.SubItems.Add(IntToStr(PacketHeader.caplen));
	ListItem.SubItems.Add(IntToStr(PacketHeader.len));
end;

procedure AddEthernet(ListItem: TListItem; EthernetHeader: PETHERNET_HDR);
begin
	ListItem.SubItems.Add(snoopMac2Str(EthernetHeader^.Destination));
	ListItem.SubItems.Add(snoopMac2Str(EthernetHeader^.Source));
	ListItem.SubItems.Add(IntToHex(ntohs(EthernetHeader^.Protocol), 4));
end;

procedure AddIP(ListItem: TListItem; IPHeader: PIP_HDR);
begin
	ListItem.SubItems.Add(IntToStr(IPHeader.Verlen));
	ListItem.SubItems.Add(IntToStr(IPHeader.Service));
	ListItem.SubItems.Add(IntToStr(ntohs(IPHeader.Length)));
	ListItem.SubItems.Add(IntToStr(ntohs(IPHeader.Ident)));
	ListItem.SubItems.Add(IntToStr(ntohs(IPHeader.FlagOff)));
	ListItem.SubItems.Add(IntToStr(IPHeader.TimeLive));
	ListItem.SubItems.Add(IntToHex(IPHeader.Protocol, 2));
	ListItem.SubItems.Add(IntToHex(ntohs(IPHeader.Checksum), 4));
	ListItem.SubItems.Add(snoopIP2Str(ntohl(IPHeader.Source)));
	ListItem.SubItems.Add(snoopIP2Str(ntohl(IPHeader.Destination)));
end;

procedure AddARP(ListItem: TListItem; ARPHeader: PARP_HDR);
begin
	ListItem.SubItems.Add(IntToStr(ntohs(ARPHeader.HardwareType)));
	ListItem.SubItems.Add(IntToStr(ntohs(ARPHeader.ProtocolType)));
	ListItem.SubItems.Add(IntToStr(ARPHeader.HLen));
	ListItem.SubItems.Add(IntToStr(ARPHeader.PLen));
	ListItem.SubItems.Add(IntToStr(ntohs(ARPHeader.Operation)));
	ListItem.SubItems.Add(snoopMac2Str(ARPHeader.SenderHA));
	ListItem.SubItems.Add(snoopIP2Str(ntohl(ARPHeader.SenderIP)));
	ListItem.SubItems.Add(snoopMac2Str(ARPHeader.TargetHA));
	ListItem.SubItems.Add(snoopIP2Str(ntohl(ARPHeader.TargetIP)));
end;

procedure AddICMP(ListItem: TListItem; ICMPHeader: PICMP_HDR);
var
	i: Integer;
	s: String;
begin
	ListItem.SubItems.Add(IntToStr(ICMPHeader.VerPrio));
	s := '';
	for i := 0 to 2 do
		s := s + Chr(ICMPHeader.FlowLabel[i]);
	ListItem.SubItems.Add(s);
	ListItem.SubItems.Add(IntToStr(ntohs(ICMPHeader.Length)));
	ListItem.SubItems.Add(IntToStr(ICMPHeader.NextHadr));
	ListItem.SubItems.Add(IntToStr(ICMPHeader.HopLimit));
	s := '';
	for i := 0 to 15 do
		s := s + Chr(ICMPHeader.Source[i]);
	ListItem.SubItems.Add(s);
	s := '';
	for i := 0 to 15 do
		s := s + Chr(ICMPHeader.Destination[i]);
	ListItem.SubItems.Add(s);
end;

procedure AddTCP(ListItem: TListItem; TCPHeader: PTCP_HDR);
begin
	ListItem.SubItems.Add(IntToStr(ntohs(TCPHeader.Source)));
	ListItem.SubItems.Add(IntToStr(ntohs(TCPHeader.Destination)));
	ListItem.SubItems.Add(IntToStr(DWORD(ntohl(TCPHeader.Seq))));
	ListItem.SubItems.Add(IntToStr(DWORD(ntohl(TCPHeader.Ack))));
	ListItem.SubItems.Add(IntToHex(TCPHeader.Off_Rsvd, 2));
	ListItem.SubItems.Add(IntToHex(TCPHeader.Rsvd_Flags, 2));
	ListItem.SubItems.Add(IntToStr(ntohs(TCPHeader.Window)));
	ListItem.SubItems.Add(IntToHex(ntohs(TCPHeader.Checksum), 4));
	ListItem.SubItems.Add(IntToStr(ntohs(TCPHeader.UrgPoint)));
end;

procedure AddUDP(ListItem: TListItem; UDPHeader: PUDP_HDR);
begin
	ListItem.SubItems.Add(IntToStr(ntohs(UDPHeader.Source)));
	ListItem.SubItems.Add(IntToStr(ntohs(UDPHeader.Destination)));
	ListItem.SubItems.Add(IntToStr(ntohs(UDPHeader.Length)));
	ListItem.SubItems.Add(IntToHex(ntohs(UDPHeader.Checksum), 4));
end;

procedure AddTCPData(ListItem: TListItem; TCPData: PChar; TCPDataLen: Integer);
var
	i: Integer;
	s: String;
begin
	ListItem.SubItems.Add(IntToStr(TCPDataLen));
	s := '';
	for i := 0 to TCPDataLen - 1 do
	begin
		s := s + TCPData^;
		inc(TCPData);
	end;
	ListItem.SubItems.Add(s);
end;

procedure AddUDPData(ListItem: TListItem; UDPData: PChar; UDPDataLen: Integer);
var
	i: Integer;
	s: String;
begin
	ListItem.SubItems.Add(IntToStr(UDPDataLen));
	s := '';
	for i := 0 to UDPDataLen - 1 do
	begin
		s := s + UDPData^;
		inc(UDPData);
	end;
	ListItem.SubItems.Add(s);
end;

end.

⌨️ 快捷键说明

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