站长手记 - 站长手记
打印】【收藏此页
修改arpwatch使通知邮件主题显示IP地址(我的CentOS 源码包修改实例)
作者:本站:苏信东  来源:WaveCN.com 世纪音频  发布日期:2014-11-19  最后修改日期:2014-11-19  

一直在用arpwatch这个服务,但它发通知邮件时只有在IP地址能解释为主机名时才在邮件主题中出现,对于不能解释为主机名的IP地址则不显示。这样实在不方便。因为对于内网,并不一定允许客户端自动登记到DNS。于是着手进行小修改。

1、准备一套CentOS的开发环境。这个不啰嗦了。

2、下载源码包。需要注意,对于CentOS 5,arpwatch是和tcpdump、libpcap的源码放在一个包里面的。因此,我们首先要下载tcpdump 的源码包:

wget ftp://frisal.switch.ch/pool/4/mirror/redhat/linux/enterprise/5Server/en/os/SRPMS/tcpdump-3.9.4-15.el5.src.rpm

3、安装源码包:

rpm -ivh  tcpdump-3.9.4-15.el5.src.rpm

4、转到临时文件夹,解压arpwatch的源码包

cd /tmp
tar zxf /usr/src/redhat/SOURCES/arpwatch-2.1a13.tar.gz

5、修改代码,文件名是report.c。修改前先备份。假设备份文件名为report.old.c,修改完后通过如下命令生成patch文件。

diff -Naur report.old.c report.c > arpwatch-report.patch

6、复制 arpwatch-report.patch 文件到/usr/src/redhat/SOURCES

cp arpwatch-report.patch /usr/src/redhat/SOURCES

7、修改patch文件,最后得到如下:

[root@centos5builder SOURCES]# cat arpwatch-report.patch
--- arpwatch-2.1a10/report.c    2014-11-16 22:17:40.000000000 +0800
+++ arpwatch-2.1a10/report.c    2014-11-16 22:18:08.000000000 +0800
@@ -306,7 +306,7 @@
        if (!isdigit(*hn))
                (void)fprintf(f, "Subject: %s (%s)\n", title, hn);
        else {
-               (void)fprintf(f, "Subject: %s\n", title);
+               (void)fprintf(f, "Subject: %s (%s)\n", title, intoa(a));
                hn = unknown;
        }
        (void)putc('\n', f);

8、修改/usr/src/redhat/SPECS/tcpdump.spec,加入arpwatch-report.patch的处理。注意是两个地方,前面的定义和后面的执行。修改前后的比较结果如下:

--- tcpdump.spec        2009-11-11 23:28:34.000000000 +0800
+++ tcpdump.spec     2014-11-19 22:20:20.000000000 +0800
@@ -57,6 +57,7 @@
 Patch41: arpwatch-addr.patch
 Patch42: arpwatch-dir-man.patch
 Patch43: arpwatch-ethcodes.patch.bz2
+Patch44: arpwatch-report.patch

 Patch50: libpcap-shared.patch
 Patch52: tcpdump-3.7.2-s390.patch
@@ -189,6 +190,7 @@
 %patch41 -p1 -b .mailuser
 %patch42 -p1 -b .dirman
 %patch43 -p1
+%patch44 -p1 -b .report
 popd

 pushd tcpslice

9、重建包,等候重建过程完成。

rpmbuild -ba ./tcpdump.spec

10、安装。

rpm -ev arpwatch-2.1a13-22.el5.x86_64
cd /usr/src/redhat/RPMS/x86_64
rpm -ivh  arpwatch-2.1a13-22.x86_64.rpm

11、还原rpm备份的配置文件,其中,arp.dat是运行记录,不还原也会重新生成;arpwatch是运行参数,如果之前自己改动过就要还原。

cd /var/lib/arpwatch/
mv arp.dat.rpmsave  arp.dat
提示覆盖选择是。

cd /etc/sysconfig
mv arpwatch.rpmsave arpwatch
提示覆盖选择是。

12、启用和启动服务

chkconfig arpwatch on
service arpwatch start

CentOS 6 大同小异。差异点:

1、source rpm 安装后位置在/root/rpmbuild下,创建的包也会放在这个位置下面。

2、arpwatch有独立的src包,不再和tcpdump捆绑。

3、由于有独立的src包,因此配置文件名是arpwatch.spec而不是tcpdump.spec,但修改的内容基本相同。