您的位置:首页 > 理论基础 > 计算机网络

TCPDUMP简单用法详解

2010-03-18 11:01 471 查看
来源于网路 作者不明


络数据采集分析工具TcpDump的简介

顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网
络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其
提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和***者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它
需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是
对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

我们用尽量简单的话来定义tcpdump,就是:dump the
traffice on a
network.,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵
活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东西之一。

第一种是关于类型的关键字,主要包括
host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明
202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host.

第二种是确定传输方向
的关键字,主要包括src , dst ,dst or src, dst and src ,这些关键字指明了传输的方向。举例说明,src
210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0
指明目的网络地址是202.0.0.0 。如果没有指明方向关键字,则缺省是src or dst关键字。

第三种是协议的关键字,主要包
括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI(分布式光纤数据接口网络)上的特定
的网络协议,实际上它是"ether"的别名,fddi和ether具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和
分析。其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包。
除了这三种
类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,greater,还有三种逻辑运算,取非运算是 'not '
'! ', 与运算是'and','&&';或运算 是'or'
,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
普通情况下,直接启动tcpdump将
监视第一个网络界面上所有流过的数据包。
# tcpdump
tcpdump: listening on fxp0
11:58:47.873028
202.102.245.40.netbios-ns > 202.102.245.127.netbios-ns: udp 50
11:58:47.974331
0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43

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
使用-i参数指定
tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,
使用-c参数指定要监听的数据包数量,
使用-w参数指定将监听到
的数据包写入文件中保存

A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:
#tcpdump
host 210.27.48.1

B想要截获主机210.27.48.1 和主机210.27.48.2
或210.27.48.3的通信,使用命令:(在命令行中适用   括号时,一定要
#tcpdump host 210.27.48.1 and
\ (210.27.48.2 or 210.27.48.3 \)

C如果想要获取主机210.27.48.1除了和主机
210.27.48.2之外所有主机通信的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and !
210.27.48.2

D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
#tcpdump
tcp port 23 host 210.27.48.1

E 对本机的udp 123 端口进行监视 123 为ntp的服务端口
#
tcpdump udp port 123

F
系统将只对名为hostname的主机的通信数据包进行监视。主机名可以是本地主机,也可以是网络上的任何一台计算机。下面的命令可以读取主机
hostname发送的所有数据:
#tcpdump -i eth0 src host hostname

G
下面的命令可以监视所有送到主机hostname的数据包:
#tcpdump -i eth0 dst host hostname

H 我
们还可以监视通过指定网关的数据包:
#tcpdump -i eth0 gateway Gatewayname

I
如果你还想监视编址到指定端口的TCP或UDP数据包,那么执行以下命令:
#tcpdump -i eth0 host hostname
and port 80

J 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包

使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2

K
想要截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信,使用命令
:(在命令行中适用   括号
时,一定要
#tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

L
如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
   #tcpdump ip
host 210.27.48.1 and ! 210.27.48.2

M
如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:
   #tcpdump tcp port 23 host
210.27.48.1

第三种是协议的关键字,主要包括fddi,ip ,arp,rarp,tcp,udp等类型

了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less,
greater,还有三种逻辑运算,取非运
算是 'not ' '! ', 与运算是'and','&&';或运算 是'o
r' ,'||';
第二种是确定传输方
向的关键字,主要包括src , dst ,dst or src, dst and src ,
如果我们只需要列出送到80端口的数据包,用
dst port;如果我们只希望看到返回80端口的数据包,用src port。
#tcpdump –i eth0 host
hostname and dst port 80 目的端口是80
或者
#tcpdump –i eth0 host
hostname and src port 80 源端口是80 一般是提供http的服务的主机
如果条件很多的话 要在条件之前加
and 或 or 或 not
#tcpdump -i eth0 host ! 211.161.223.70 and !
211.161.223.71 and dst port 80

如果在ethernet 使用混杂模式
系统的日志将会记录

May 7 20:03:46 localhost kernel: eth0: Promiscuous
mode enabled.
May 7 20:03:46 localhost kernel: device eth0 entered
promiscuous mode
May 7 20:03:57 localhost kernel: device eth0 left
promiscuous mode

tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直
接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump
截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 TCPDUMP 用法