专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Linux » linuxtcpdump:TCPDUMP入门 Linux下的网络协议分析工具 »正文

linuxtcpdump:TCPDUMP入门 Linux下的网络协议分析工具

来源: 发布时间:星期四, 2009年2月12日 浏览:58次 评论:0


  TCPDUMP介绍

  在传统网络分析和测试技术中嗅探器(snfer)是最常见也是最重要技术的snfer工具首先是为网络管理员和网络员进行网络分析而设计对于网络管理人员来说使用嗅探器可以随时掌握网络实际情况在网络性能急剧下降时候可以通过snfer工具来分析原因找出造成网络阻塞来源对于网络员来说,通过snfer工具来调试

  用过windows平台上snfer工具(例如netxray和snfer pro软件Software)朋友可能都知道在共享式局域网中采用snfer工具简直可以对网络中所有流量览无余!Snfer工具实际上就是个网络上抓包工具同时还可以对抓到包进行分析由于在共享式网络中信息包是会广播到网络中所有主机网络接口只不过在没有使用snfer工具的前主机会判断该信息包是否应该接收这样它就会抛弃不应该接收信息包snfer工具却使主机接收所有到达信息包这样就达到了网络监听效果

  Linux作为网络特别是作为器和网关时数据采集和分析是必不可少所以今天我们就来看看Linux中强大网络数据采集分析工具——TcpDump

  用简单话来定义tcpdump就是:dump the traffice _disibledevent=>   0000 0000 0080 0000 1007 cf08 0900 0000

  0e80 0000 902b 4695 0980 8701 0014 0002

  000f 0000 902b 4695 0008 00

  11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97

  ffff 0060 0004 ffff ffff ffff ffff ffff

  0452 ffff ffff 0000 e85b 6d85 4008 0002

  0640 4d41 5354 4552 5f57 4542 0000 0000

  0000 00

  ^C

  ------------------------

  首先我们注意从上面输出结果上可以看出来基本上tcpdump总输出格式为:系统时间 来源主机.端口 > 目标主机.端口 数据包参数







  TcpDump参数化支持

  tcpdump支持相当多区别参数如使用-i参数指定tcpdump监听网络界面这在计算机具有多个网络界面时非常有用使用-c参数指定要监听数据包数量使用-w参数指定将监听到数据包写入文件中保存等等

  然而更复杂tcpdump参数是用于过滤目这是网络中流量很大如果不加分辨将所有数据包都截留下来数据量太大反而不容易发现需要数据包使用这些参数定义过滤规则可以截留特定数据包以缩小目标才能更好分析网络中存在问题tcpdump使用参数指定要监视数据包类型、地址、端口等根据具体网络问题充分利用这些过滤规则就能达到迅速定位故障请使用man tcpdump查看这些过滤规则具体使用方法

  显然为了安全起见不用作网络管理用途计算机上不应该运行这网络分析软件Software为了屏蔽它们可以屏蔽内核中bpfilter伪设备般情况下网络硬件和TCP/IP堆栈不支持接收或发送和本计算机无关数据包为了接收这些数据包就必须使用网卡混杂模式并绕过标准TCP/IP堆栈才行在FreeBSD下这就需要内核支持伪设备bpfilter因此在内核中取消bpfilter支持就能屏蔽tcpdump的类网络分析工具

  并且当网卡被设置为混杂模式时系统会在控制台和日志文件中留下记录提醒管理员留意这台系统是否被用作攻击同网络其他计算机跳板

  May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

  虽然网络分析工具能将网络中传送数据记录下来但是网络中数据流量相当大如何对这些数据进行分析、分类统计、发现并报告却是更关键问题网络中数据包属于区别而区别数据包格式也区别因此对捕获数据进行解码将包中信息尽可能展示出来对于协议分析工具来讲更为重要昂贵商业分析工具优势就在于它们能支持很多种类应用层协议而不仅仅只支持tcp、udp等低层协议

  从上面tcpdump输出可以看出tcpdump对截获数据并没有进行彻底解码数据包内大部分内容是使用十 6进制形式直接打印输出显然这不利于分析网络故障通常解决办法是先使用带-w参数tcpdump 截获数据并保存到文件中然后再使用其他进行解码分析当然也应该定义过滤规则以避免捕获数据包填满整个硬盘

  TCP功能

  数据过滤

  不带任何参数TcpDump将搜索系统中所有网络接口并显示它截获所有数据这些数据对我们不定全都需要而且数据太多不利于分析所以我们应当先想好需要哪些数据TcpDump提供以下参数供我们选择数据:

  -b 在数据-链路层上选择协议包括ip、arp、rarp、ipx都是这

  例如:tcpdump -b arp 将只显示网络中arp即地址转换协议信息

  -i 选择过滤网络接口如果是作为器至少有两个网络接口通过这个选项就可以只过滤指定接口上通过数据例如:

  tcpdump -i eth0 只显示通过eth0接口上所有报头

  src、dst、port、host、net、ether、gateway这几个选项又分别包含src、dst 、port、host、net、ehost等附加选项他们用来分辨数据包来源和去向src host 192.168.0.1指定源主机IP地址是192.168.0.1dst net 192.168.0.0/24指定目标是网络192.168.0.0以此类推host是和其指定主机相关无论它是源还是目net是和其指定网络相关ether后面跟不是IP地址而是物理地址而gateway则用于网关主机可能有点复杂看下面例子就知道了:

  tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24

  过滤是源主机为192.168.0.1和目网络为192.168.0.0报头

  tcpdump ether src 00:50:04:BA:9B and dst……

  过滤源主机物理地址为XXX报头(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)

  Tcpdump src host 192.168.0.1 and dst port not telnet

  过滤源主机192.168.0.1和目端口不是telnet报头

  ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第个参数位置用来过滤数据报类型

  例如:

  tcpdump ip src……

  只过滤数据-链路层上IP报头

  tcpdump udp and src host 192.168.0.1

  只过滤源主机192.168.0.1所有udp报头

  数据显示/输入输出

  TcpDump提供了足够参数来让我们选择如何处理得到数据如下所示:

  -l 可以将数据重定向

  如tcpdump -l >tcpcap.txt将得到数据存入tcpcap.txt文件中

  -n 不进行IP地址到主机名转换

  如果不使用这当系统中存在某主机主机名时TcpDump会把IP地址转换为主机名显示就像这样:eth0 < ntc9.1165> router.do.net.telnet使用-n后变成了:eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet

  -nn 不进行端口名称转换

  上面这条信息使用-nn后就变成了:eth0 < ntc9.1165 > router.do.net.23

  -N 不打印出默认域名

  还是这条信息-N 后就是:eth0 < ntc9.1165 > router.telnet

  -O 不进行匹配代码优化

  -t 不打印UNIX时间戳也就是不显示时间

  -tt 打印原始、未格式化过时间

  -v 详细输出也就比普通多了个TTL和服务类型







  TCPDUMP安装

  在下tcpdump安装十分简单般由两种安装方式种是以rpm包形式来进行安装另外种是以源形式安装

  1.rpm包形式安装

  #rpm -ivh tcpdump-3_4a5.rpm

  这样tcpdump就顺利地安装到你系统中如何样很简单吧

  2.源安装

  #tar xvfz tcpdump-3_4a5.tar.Z

  rpm包可以使用如下命令安装:

  #rpm -ivh tcpdump-3_4a5.src.rpm

  这样就把tcpdump源代码解压到/usr/src/redhat/SOURCES目录下

  做好编译源准备活动

  在编译源的前最好已经确定库文件libpcap已经安装完毕这个库文件是tcpdump软件Software所需库文件 同样你同时还要有个标准c语言编译器在linux下标准c 语言编译器般是gcc 在tcpdump目录中个文件是Makefile.inconfigure命令就是从Makefile.in文件中自动产生Makefile文件在Makefile.in文件中可以根据系统配置来修改BINDEST 和 MANDEST 这两个宏定义缺省值是

  BINDEST = @sbindir@

  MANDEST = @mandir@

  第个宏值表明安装tcpdump 2进制文件路径名第 2个表明tcpdumpman 帮助页路径名,你可以修改它们来满足系统需求

  编译源

  使用源目录中configure脚本它从系统中读出各种所需属性并且根据Makefile.in文件自动生成Makefile文件以便编译使用.make 命令则根据Makefile文件中规则编译tcpdump使用make 命令安装编译好tcpdump 2进制文件

  整理总结下就是:

  # tar xvfz tcpdump-3_4a5.tar.Z

  # vi Makefile.in

  # . /configure

  # make

  # make

  有关tcpdump更详细信息请查看Man tcpdump



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: