在维护DNS服务器时,偶们希望知道到底是哪些用户在使用偶们的DNS服务器,同时也希望能对DNS查询做一个统计。一般情况下,偶们可以使用tcpdump –i eth0 port 53来查看DNS查询包,不过tcpdump的输出可不是那么友好,尤其是当访问量大的时候,偶就头晕了 :( ~~当然了可以把输出重定向到文件,如果熟悉shell编程的话还可以做个脚本来分析;至于查询统计嘛,可以使用rndc stats(bind9)来获取,但是这可不是实时的,当然了你也可以使用at,cron来自动运行,不幸的事,这些偶都不太会 :oops: ,because 偶是菜鸟 of linux/unix。没关系,今天偶来介绍一款超强统计DNS查询的工具。(不好意思废话有点多,就当热身嘛,呵呵 :) )BTW:多谢bbgun网友提供信息 :!: 。
刚才装了一下DNSTOP,还是有一点麻烦,好了,要上洗手间赶快去;冲咖啡的搞快点了啰。各就各位,Let’s go! :arrow:
首先申明一下,偶是在redhat8+bind9下实现的,如果你的系统不是linux的话,请参考源代码包里的相关说明。
1、下载源代码
打开浏览器,进入http://dnstop.measurement-factory.com/,可以看到DNSTOP的相关介绍。如果你的系统没有libpcap库的话(用find / -name “libpcap*”搜一下就知道有没有了),在安装DNSTOP前还需要安装libpcap库。不管三七二十一,先把这两个源码包下载下来再说:
libpcap-0.7.2.tar.gz
http://www.tcpdump.org/release/libpcap-0.7.2.tar.gz
dnstop-20030929.tar.gz
http://dnstop.measurement-factory.com/src/dnstop-20030929.tar.gz
2、编译安装libpcap库
假设libpcap-0.7.2.tar.gz是放置在/home/andy目录下的。步骤如下:
[root@t113 /]# cd /home/andy
[root@t113 andy]#gunzip libpcap-0.7.2.tar.gz
[root@t113 andy]# tar -xvf libpcap-0.7.2.tar
[root@t113 andy]# cd libpcap-0.7.2
[root@t113 libpcap-0.7.2]#
注意了(大声的说~~),在这儿编译时是编译成静态函数库,但是等会儿你编译DNSTOP时却是需要共享函数库(动态函数库)。所以偶们要修改一下libpcap-0.7.2目录下的Makefile.in文件,打开文件找到如下语句:
all: libpcap.a(第96行)
libpcap.a: $(OBJ)
@rm -f $@
ar rc $@ $(OBJ)
$(RANLIB) $@
修改为:
all: libpcap.so
libpcap.so: $(OBJ)
@rm -f $@
# ar rc $@ $(OBJ)
gcc $(OBJ) -shared -o libpcap.so
# $(RANLIB) $@
再找到如下语句:
install:(第139行)
[ -d $(DESTDIR)$(libdir) ] || \
(mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
$(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
$(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
修改为:
install:
# [ -d $(DESTDIR)$(libdir) ] || \
# (mkdir -p $(DESTDIR)$(libdir); chmod 755 $(DESTDIR)$(libdir))
# $(INSTALL_DATA) libpcap.a $(DESTDIR)$(libdir)/libpcap.a
# $(RANLIB) $(DESTDIR)$(libdir)/libpcap.a
cp libpcap.so /usr/lib/
搞定!开始编译:
[root@t113 libpcap-0.7.2]# ./configure --prefix=/usr
[root@t113 libpcap-0.7.2]# make
[root@t113 libpcap-0.7.2]# make install
到这儿,偶们可以松口气了。下面安装DNSTOP就很easy了。
3、编译DNSTOP
步骤如下:
[root@t113 libpcap-0.7.2]# cd ..
[root@t113 andy]# gunzip dnstop-20030929.tar.gz
[root@t113 andy]# tar -xvf dnstop-20030929.tar
[root@t113 andy]# make
到这一步,偶就要恭喜各位:DNSTOP已经编译完成了。
接下来look一下DNSTOP到底是什么东东(s后面的参数是需要监听的网卡接口):
[root@t113 andy]# ./dnstop -s eth0
效果如下:
0 new queries, 6 total queries Mon Nov 5 07:54:35 2007
Sources count %
---------------- --------- ------
192.168.0.113 4 66.7
192.168.0.144 1 16.7
192.168.0.40 1 16.7
不错吧^_^,在运行DNSTOP的过程中,可以敲入如下命令:
S,D,T,1,2,^R(ctrl+R),^X(ctrl+X),?
来显示不同的统计信息。比如敲入1,显示结果如下:
0 new queries, 7 total queries Mon Nov 5 07:57:17 2007
TLD count %
-------------------- --------- ------
com 4 57.1
cn 2 28.6
arpa 1 14.3
偶也是才接触DNSTOP,上面的介绍只能是给大家抛砖引玉了,有错误或者不足的地方,请发站内短信或者跟贴。觉得不错的,顶一下了^_^,多谢!!!
流星之翼 回复于:2003-11-06 15:33:35
在RH9中也这样修改么?
yfhe 回复于:2003-11-06 15:37:15
引用:在RH9中也这样修改么?
是说修改那个Makefile.in文件吧,在redhat9下也是需要改的。
流星之翼 回复于:2003-11-06 15:42:39
是这样啊,安装试试先.
阿骁 回复于:2003-11-08 01:27:30
很不错的东西,多谢 yfhe 斑竹。
不过我在 RedHat 7.2 上装 libpcap 的时候没有修改那些代码也能通过编译, dnstop 也能用。
yfhe 回复于:2003-11-10 09:41:05
引用:不过我在 RedHat 7.2 上装 libpcap 的时候没有修改那些代码也能通过编译, dnstop 也能用。
偶也不是很懂。因为偶最开始想用rpm包来装的,但出错提示需要libpcap.so,所以偶在安装libpcap时就修改了一下makefile :oops:
superjun 回复于:2003-11-10 16:22:13
我也试着装了一下。在solaris上装真是麻烦阿。居然装了一天。:(
superjun 回复于:2003-11-10 16:37:51
不知道老大能否在提供一下,这个分析出来的具体的参数意思?我看官方网站上说的也不是很详细阿。
yfhe 回复于:2003-11-10 17:01:26
引用:原帖由 "superjun"]不知道老大能否在提供一下,这个分析出来的具体的参数意思?我看官方网站上说的也不是很详细阿。 发表:
“参数”--那些参数啊,偶也是刚学这个,很多也不是很清楚 :oops: 是下面这些吗?
TLD--记录查询的顶级域名
SLD--记录查询的二级域名
Source--记录发送dns查询的客户端ip地址
Destinations--记录dns查询的目的服务器的ip地址
Query Type--记录查询类型
雨杉 回复于:2003-11-10 17:14:18
很不错顶一下!
yuanchangmeng 回复于:2003-11-10 23:36:26
引用:原帖由 "superjun"]我也试着装了一下。在solaris上装真是麻烦阿。居然装了一天。:( 发表:
请问在SOALRIS上编译,需要修改哪些配置,哪些注意的地方?
superjun 回复于:2003-11-11 09:11:58
引用:原帖由 "yuanchangmeng" 发表:
请问在SOALRIS上编译,需要修改哪些配置,哪些注意的地方?
我在solaris上测试libpcap,都能过去了。就是make编译不了。费了好多时间,最后只好装了一个二进制的包。
编译dnstop需要把一个“#”去掉。老大提供的那个网址上有介绍。总之是不太顺利。:(
superjun 回复于:2003-11-11 10:03:41
我今天又研究了一下。还是没有想明白[option]-a和-b 是什么意思。 :(
yuanchangmeng 回复于:2003-11-11 15:05:20
引用:原帖由 "superjun" 发表:
我在solaris上测试libpcap,都能过去了。就是make编译不了。费了好多时间,最后只好装了一个二进制的包。
编译dnstop需要把一个“#”去掉。老大提供的那个网址上有介绍。总之是不太顺利。:(
谢谢,我找到原因了,我之所以编译通不过,是在makefile文件里面把那行 加了一个#号注释掉了,其实应该去掉#号,是自己没仔细读那句话。
yfhe 回复于:2003-11-11 15:09:11
引用:我今天又研究了一下。还是没有想明白[option]-a和-b 是什么意思。
-a不用带参数,表示对ip地址(源地址和目的地址)实施匿名,也就是说不显示真实的ip地址,显示出来的ip地址没有实际的意义。
-b后需要带参数,参数使用Berkeley包过滤器(BPF)的规则。这个偶不懂哦。
这是偶的理解,不知道对不对 :oops:
唉乡随 回复于:2003-11-11 16:45:53
不错。顶。
但这个工具的输出的结果,有没有办法用IE来看到适时的dnstop显示结果。
yfhe 回复于:2003-11-11 17:02:23
做成cgi的形式,应该没问题。
孤狼彦 回复于:2003-11-13 09:25:20
在AIX下安装有什么不同吗
fy2003 回复于:2003-11-13 14:45:24
在SOLARIS 7下make,报错:pcap.h:no file
怎么解决呢?
unicorncn 回复于:2003-12-11 09:43:39
freebsd 下 只需在
cd /usr/ports/dns/dnstop
make
报错后, cd work
ee Makefile
line 7: XTRALIBS= [color=red]#[/color]-lnsl -lresolv -lsocket 去掉前面那个[color=red]#[/color]就可以make install
ok :em02:
port 真方便
seabillow 回复于:2003-12-11 12:01:20
很好啊,ding一下
谢谢楼主
我的linux8已经有libpcap了,没有改什么就装好了,也能用
sylmdl 回复于:2003-12-16 12:20:08
下面是安装操作:
gcc3.2.2
1、下载源代码
libpcap-0.8.1-316.tar.gz和dnstop-20031113.tar.gz
2、放置在/export/home/syd目录下的。步骤如下:
# cd /export/home/syd/
#/gunzip libpcap-0.8.1-316.tar.gz
# tar -xvf libpcap-0.8.1-316.tar
# cd libpcap-0.8.1
#./configure //不用修改makefile文件,提示需要安装flex、bison。我装了flex-2.5.4a-sol8-sparc-local 和bison-1.35-sol8-sparc-local
#/usr/local/bin/make
#make install
3、编译DNSTOP
步骤如下:
# cd /export/home/syd/tmp
# gunzip dnstop-20031113.tar.gz
# tar -xvf dnstop-20030929.tar
修改Makefile: remove # from XTRALIBS in Makefile
# make //到这一步,DNSTOP已经编译完成了。
4、 DNSTOP启动(s后面的参数是需要监听的网卡接口):
# ./dnstop -s hme0
sylmdl 回复于:2003-12-16 12:20:55
下面是安装操作:
gcc3.2.2
1、下载源代码
libpcap-0.8.1-316.tar.gz和dnstop-20031113.tar.gz
2、放置在/export/home/syd目录下的。步骤如下:
# cd /export/home/syd/
#/gunzip libpcap-0.8.1-316.tar.gz
# tar -xvf libpcap-0.8.1-316.tar
# cd libpcap-0.8.1
#./configure //不用修改makefile文件,提示需要安装flex、bison。我装了flex-2.5.4a-sol8-sparc-local 和bison-1.35-sol8-sparc-local
#/usr/local/bin/make
#make install
3、编译DNSTOP
步骤如下:
# cd /export/home/syd/tmp
# gunzip dnstop-20031113.tar.gz
# tar -xvf dnstop-20030929.tar
修改Makefile: remove # from XTRALIBS in Makefile
# make //到这一步,DNSTOP已经编译完成了。
4、 DNSTOP启动(s后面的参数是需要监听的网卡接口):
# ./dnstop -s hme0
iamark 回复于:2003-12-22 22:29:15
俺按照版主所述,修改了libpcap0.72的Makefile.in文件,configure 成功,但是在make时failed,报错如下:
bison -y -p pcap_ -d grammar.y
/usr/ccs/bin/m4: bad option: -I
mv y.tab.c grammar.c
mv: cannot access y.tab.c
*** Error code 2
make: Fatal error: Command failed for target `grammar.c'
俺的实验环境: solaris8 (sparc). gcc3.2.2 , libpcap0.72,
还请各位大侠赐教,多谢
iamark 回复于:2003-12-29 12:34:46
up
|