一直在用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,但修改的内容基本相同。
本站微信订阅号:
本页网址二维码: