我最初的问题描述如下:https://serverfault.com/questions/958571/what-these-dns-queries-means。这是关于 UDP 数据包的,我无法确定其来源。为了解决这个问题,我遵循了用户 @AB 的建议,即:https://serverfault.com/questions/192893/how-i-can-identify-which-process-is-making-udp-traffic-on-linux/193088#193088根据这个建议我已经安装了auditd
,显然是成功的:
auditctl -l
No rules
但是当我运行auditctl
命令时,出现错误:
auditctl -a exit,always -F arch=b32 -F a0=2 -F a1\&=2 -S socket -k SOCKET
Syscall name unknown: socket
你能帮助我解决我的问题吗?
答案1
某些架构(主要是 32 位 Intel x86)没有使用单独的系统调用进行套接字操作,而是使用单个多路复用socket调用(2)入口点。
因此当一个程序调用时socket(...)
,libc 会将其翻译为socketcall(SYS_SOCKET, ...)
。
单独的套接字系统调用(包括套接字 (2))已添加到内核 4.3.0 中 - 但您的 auditctl 太旧而无法了解这一点(其自己的系统调用列表仅在 auditd v2.5.0 中更新),同样,您的 libc 可能太旧而无法使用单独的系统调用(此支持已添加到 glibc v2.23 中)。
为了匹配 socket() 调用,您可能需要-S socketcall -F a0=1 -F a1=2 ...
,因为第 0 个参数实际上是被调用的函数(SYS_SOCKET=1),而真正的参数从 a1 开始。