我想从端口514上的UDP中读取系统日志。
我正在使用delphi2010。我放置了一个IdUDPServer,并将DefaultPort设置为514,将BuffeSize设置为1024。
此系统日志由Cisco防火墙5505生成。
我正在像此命令一样将ping发送到我的防火墙。 Ping 192.168.1.100 -t
当我运行kiwi(监视syslog消息的软件)时,每次ping都会收到2条消息,如下所示。

%ASA-6-302021:对于faddr 192.168.1.4/1 gaddr 192.168.1.100/0 laddr 192.168.1.100/0的拆卸ICMP连接
%ASA-6-302020:为faddr 192.168.1.4/1 gaddr 192.168.1.100/0 laddr 192.168.1.100/0建立了入站ICMP连接

但是在我的侦听器中,每次ping我只会收到一条消息。像这样
%ASA-6-302020:为faddr 192.168.1.4/1 gaddr 192.168.1.100/0 laddr 192.168.1.100/0建立了入站ICMP连接

我不知道为什么我听不到第一条消息。
我在IdUDPServer的OnRead事件上编写了这样的代码

procedure TMyTestOnSyslog.Listener514UDPRead(
  AThread: TIdUDPListenerThread; AData: TBytes; ABinding: TIdSocketHandle);
var S:string;
    i:Integer;
begin
  S:='';
  for i := 0 to High(AData) do
    S:=S+chr(Adata[i]);
  ...
end;


我该怎么办? :D

最佳答案

当我打电话给我的一位朋友并询问此事时,我感到很失望。他说最好不要在delphi中使用Indy,因为它有错误。所以我搜索了其他组件。有一个开源的。 ICS(Internet组件套件)效果很好。您可以为任何delphi版本或C ++ Builder获得此开放源码!

看到这个:http://www.overbyte.be/

在产品部分中,选择ICS,然后可以下载最新版本。
幸运的是,它具有许多组件,并且具有TSysLogServer。它不会丢失任何UDP数据包。
UDP不能保证不会丢失数据包。但是,当我看到其他程序(例如奇异果和电线叉)正确获取数据包时,我应该知道程序中问题的根源是组件。

因此,我的问题的答案是:请勿使用印版!

我不知道Indy只是在delphi中有这样的问题,或者在其他语言中是一样的。 :|

关于delphi - 如何完全在delphi中从Cisco防火墙获取syslog消息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17442764/

10-16 11:10