1、准备工作。从Lazarus安装目录中找到pcap.pp。加到工程中,并引用它。win下要安装WinPcap。

2、写一个读取数据的回调

function htons(hostshort: word): word;
begin
Result := ((hostshort and $00FF) shl 8) or ((hostshort and $FF00) shr 8);
end;

procedure PacketHandler(para1: pansichar; Header: PPcap_Pkthdr; Data: pansichar); cdecl;
begin
//是访问80号端口
if (PWord(Data + 36)^ = htons(80)) or (PWord(Data + 38)^ = htons(80)) then

begin

//数据处理

end;

end;

3、加载网卡设备

var

AllDevs: PPcap_If;

FHandle: ppCap;
ErrBuf: array[0..PCAP_ERRBUF_SIZE - 1] of char;

begin

FillChar(ErrBuf, SizeOf(ErrBuf), 0);
AllDevs := nil;
if pcap_findalldevs(@AllDevs, @ErrBuf) = 0 then //找到网络设备
begin

{$IfDef UNIX}
temp:=Dev^.name;
{$Else}
temp:=Dev^.description;
{$IfEnd}

FHandle := pcap_open_live(pansichar(temp), 65536, 1, 1000, @ErrBuf); //打开网络设备

pcap_loop(FHandle, 0, @PacketHandler, nil);//设置数据回调

//退出程序  

pcap_freealldevs(AllDevs);

if FHandle <> nil then
pcap_close(FHandle);

end;

end;

 

以上程序有个问题,在Linux下可以得到网页的数据包。在win下只能得到Html头信息包。不知道为什么。

 

posted on 2024-01-27 11:48  禁卫军  阅读(97)  评论(0编辑  收藏  举报