LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1542|回复: 2

请教:如何找到发送ARP报文的进程

[复制链接]
发表于 2011-6-10 00:54:05 | 显示全部楼层 |阅读模式
REDHAT EL 5.4,DNS和MAIL,对外开25,53,80,110。

该计算机工作正常,就是一直发送APR报文(装好后没有测试,我接手后发现的),就是:
who is x.x.x.x, please tell x.x.x.x

ARP报文都是通过kernel发送的,而且工作在链路层,用iptables不行。arptables呢,这个好象没有日志。

我现在是想找到发送ARP报文的进程。
谢谢先。
发表于 2011-6-10 15:48:39 | 显示全部楼层
可以考虑使用auditd.
auditd可以监控系统调用.通常,发送ARP数据包的程序,需要直接操作数据链数层数据.它们一般会包含如下的系统调用:
  1. socket(PF_PACKET, SOCK_DGRAM, 0)
复制代码
然后使用sendto,recvfrom等套接字函数处理数据.
我们可以编写一个简单的audit规则来监视上面这个系统调用. 这里,PF_PACKET对应的协议族号码是17,SOCK_DGRAM对应的套接字类型是2.

编辑/etc/audit/audit.rules(如果不存在这个文件,请先安装audit. yum install audit)
  1. #64位系统
  2. -a entry,always -F arch=b64 -F a0=17 -F a1=2 -S socket -k SOCKET
  3. #32位系统上,请使用这个
  4. #-a entry,always -F arch=b32 -F a0=17 -F a1=2 -S socket -k SOCKET
复制代码
然后,重启auditd
/etc/init.d/auditd restart
然后,可以启动一些程序来测试。注意,通常程序只有启动时才会创建socket。所以,为了检测出可疑进程,可能需要reboot,然后才能看到它启动后所作的socket调用。
之后,可以看看audit报告:
  1. ausearch -i -ts today -k SOCKET
复制代码
如下是我在我系统上一个输出的样本
  1. type=SYSCALL msg=audit(2011年06月10日 15:03:17.876:74) : arch=x86_64 syscall=socket success=yes exit=3 a0=11 a1=2 a2=0 a3=0 items=0 ppid=2191 pid=11553 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=arping exe=/sbin/arping key=SOCKET
  2. ----
  3. type=SYSCALL msg=audit(2011年06月10日 15:05:36.326:75) : arch=x86_64 syscall=socket success=yes exit=3 a0=11 a1=2 a2=300 a3=0 items=0 ppid=2191 pid=11588 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=arpspoof exe=/usr/sbin/arpspoof key=SOCKET
  4. ----
  5. type=SYSCALL msg=audit(2011年06月10日 15:13:52.843:76) : arch=x86_64 syscall=socket success=yes exit=3 a0=11 a1=2 a2=300 a3=0 items=0 ppid=2191 pid=11604 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=tcpdump exe=/usr/sbin/tcpdump key=SOCKET
复制代码
从上面的输出,可以看到我运行过arping, arpspoof, tcpdump,它们都直接操作底层套接字。进程的pid等信息,也包含在输出中。可以从这些日志中,再进一步分析出可疑进程。

实际上,通常只有root能够操作原始套接字.可以ps找出所有以root身份运行的进程。然后对可疑的进程作strace,监控他们的socket通信
  1. strace -p process_id -e trace=network
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-6-11 11:30:41 | 显示全部楼层
非常感谢楼上的朋友。
不过,这台计算机不能进行你所说的操作,因为这是当前唯一的邮件服务器,且不能中断。

但你的话给了我很多启发。
再次感谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表