3

我已经使用以下代码在 Python 中实现了一个基本的远程系统日志服务器:

self.UDPsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.UDPsock.bind(self.addr)
self.UDPsock.settimeout(1)
while self.carryOn:
  try: 
    data = self.UDPsock.recv(self.buf)
    print data
  except socket.timeout:
    pass

我正在使用它从我的路由器(Tomato Shibby v108)接收日志消息。我对截获来自我的手机的消息特别感兴趣,这样我就可以创建一个“存在”脚本。

我最初尝试了以下 iptable 条目进行测试:

iptables -I FORWARD -s 192.168.2.54 -m limit --limit 1/minute --limit-burst 1 -j LOG

这按预期工作,我会收到如下消息:

<12>Apr  1 21:51:47 kernel: IN=br0 OUT=ppp0 SRC=192.168.2.54 DST=17.158.8.77 LEN=70 TOS=0x00 PREC=0x00 TTL=63 ID=23055 DF PROTO=TCP SPT=60779 DPT=993 WINDOW=65535 RES=0x00 ACK PSH URGP=0 MARK=0x5

但是,我不想依赖静态 IP,因此更改了 iptable 过滤器以在 MAC 地址上触发:

iptables -t raw -A PREROUTING -m mac --mac-source SOURCE_MAC -m limit --limit 1/minute --limit-burst 1 -j LOG --log-ip-options

这里的问题是我现在每个日志条目收到 >50 条消息,所有重复的表单:

<12>Apr  1 19:54:00 kernel: IN=br0 OUT= MAC=DEST_MAC:SOURCE_MAC:08:00 SRC=192.168.2.54 DST=224.0.0.251 LEN=101 TOS=0x00 PREC=0x00 TTL=255 ID=36530 PROTO=UDP SPT=5353 DPT=5353 LEN=81 

当我将过滤器更改为:

iptables -t raw -A PREROUTING -m mac --mac-source SOURCE_MAC -m limit --limit 1/minute --limit-burst 1 -j LOG

它将重复的数量减少到 4 个:

<12>Apr  2 12:21:55 kernel: IN=br0 OUT= MAC=DEST_MAC:SOURCE_MAC:08:00 SRC=192.168.2.54 DST=224.0.0.251 LEN=101 TOS=0x00 PREC=0x00 TTL=255 ID=1384 PROTO=UDP SPT=5353 DPT=5353 LEN=81 

任何人都可以提供任何关于为什么会发生这种情况的见解吗?我假设有某种“有趣”的角色导致了这种情况。我可以将 iptable 条目或 Python 程序更改为每条消息只接收一个日志条目吗?

4

0 回答 0