📄 common.pas
字号:
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 + -