2

我想在端口 514 上从 UDP 读取 syslog。我使用的是 delphi 2010。我放置了一个 IdUDPServer 并将 DefaultPort 设置为 514,将 BuffeSize 设置为 1024。此 syslog 由 Cisco 防火墙 5505 生成。我正在向我的防火墙发送 ping 命令,如下所示. Ping 192.168.1.100 -t 当我运行 kiwi(一个监控系统日志消息的软件)时,每次 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 构建入站 ICMP 连接。 1.100/0 梯形图 192.168.1.100/0

但在我的 Listener 中,每次 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

4

1 回答 1

0

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

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

在产品部分选择ICS,您可以下载最新版本。幸运的是它有很多组件并且它有 TSysLogServer。它不会丢失任何UDP数据包。确实,UDP 不能保证数据包不会丢失。但是当我看到 kiwi 和 wiresharks 等其他程序正确获取数据包时,我应该知道我的程序中问题的根源是组件。

所以我的问题的答案是:不要使用 INDY !!!

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

于 2013-07-04T13:16:58.123 回答