Linux下抓包工具tcpdump应用详解

合集下载

在Linux中使用tcpdump命令捕获与分析数据包详解

在Linux中使用tcpdump命令捕获与分析数据包详解

在Linux中使⽤tcpdump命令捕获与分析数据包详解前⾔tcpdump 是⼀个有名的命令⾏数据包分析⼯具。

我们可以使⽤ tcpdump 命令捕获实时 TCP/IP 数据包,这些数据包也可以保存到⽂件中。

之后这些捕获的数据包可以通过 tcpdump 命令进⾏分析。

tcpdump 命令在⽹络层⾯进⾏故障排除时变得⾮常⽅便。

tcpdump 在⼤多数 Linux 发⾏版中都能⽤,对于基于 Debian 的Linux,可以使⽤ apt 命令安装它。

# apt install tcpdump -y在基于 RPM 的 Linux 操作系统上,可以使⽤下⾯的 yum 命令安装 tcpdump。

# yum install tcpdump -y当我们在没⽤任何选项的情况下运⾏ tcpdump 命令时,它将捕获所有接⼝的数据包。

因此,要停⽌或取消 tcpdump 命令,请键⼊ ctrl+c。

在本教程中,我们将使⽤不同的实例来讨论如何捕获和分析数据包。

⽰例:1)从特定接⼝捕获数据包当我们在没⽤任何选项的情况下运⾏ tcpdump 命令时,它将捕获所有接⼝上的数据包,因此,要从特定接⼝捕获数据包,请使⽤选项 -i,后跟接⼝名称。

语法:# tcpdump -i {接⼝名}假设我想从接⼝ enp0s3 捕获数据包。

输出将如下所⽰,tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on enp0s3, link-type EN10MB (Ethernet), capture size 262144 bytes06:43:22.905890 IP .ssh > 169.144.0.1.39374: Flags [P.], seq 21952160:21952540, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 38006:43:22.906045 IP .ssh > 169.144.0.1.39374: Flags [P.], seq 21952540:21952760, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 22006:43:22.906150 IP .ssh > 169.144.0.1.39374: Flags [P.], seq 21952760:21952980, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 22006:43:22.906291 IP 169.144.0.1.39374 > .ssh: Flags [.], ack 21952980, win 13094, options [nop,nop,TS val 6580205 ecr 26164373], length 006:43:22.906303 IP 169.144.0.1.39374 > .ssh: Flags [P.], seq 13537:13609, ack 21952980, win 13094, options [nop,nop,TS val 6580205 ecr 26164373], length 7206:43:22.906322 IP .ssh > 169.144.0.1.39374: Flags [P.], seq 21952980:21953200, ack 13537, win 291, options [nop,nop,TS val 26164373 ecr 6580205], length 220^C109930 packets captured110065 packets received by filter133 packets dropped by kernel[[email protected] ~]#⽰例:2)从特定接⼝捕获特定数量数据包假设我们想从特定接⼝(如 enp0s3)捕获 12 个数据包,这可以使⽤选项 -c {数量} -I {接⼝名称} 轻松实现。

linux tcpdump 用法

linux tcpdump 用法

linux tcpdump 用法tcpdump 是一种在 Linux 操作系统上用于捕获和分析网络数据包的实用工具。

它能够显示通过网络接口传输的数据包的详细信息,包括源地址、目标地址、协议、端口等。

以下是一些常见的 tcpdump 用法示例:基本用法:sudo tcpdump默认情况下,tcpdump 会显示所有经过网络接口的数据包。

需要使用超级用户权限(sudo)来运行,以便访问网络接口。

指定网络接口:sudo tcpdump -i eth0使用 -i 选项可以指定要监听的网络接口,这里是 eth0。

指定协议:sudo tcpdump -i eth0 icmp可以使用协议名来过滤数据包,这里是 icmp(ping 请求/回应)。

指定主机:sudo tcpdump host 192.168.1.1可以使用 host 关键字指定特定的主机,这里是 192.168.1.1。

指定端口:sudo tcpdump port 80使用 port 关键字可以过滤特定的端口,这里是 80。

保存到文件:sudo tcpdump -w output.pcap使用 -w 选项可以将捕获的数据包保存到文件中,文件格式通常是 pcap。

读取文件:sudo tcpdump -r input.pcap使用 -r 选项可以读取先前保存的数据包文件。

显示详细信息:sudo tcpdump -v使用 -v 选项可以显示更详细的信息,包括协议头。

这只是 tcpdump 的一些基本用法。

tcpdump 提供了丰富的选项,可以根据具体的需求进行过滤和定制。

请查阅tcpdump 的手册页(man tcpdump)以获取更详细的信息。

Linux命令高级技巧通过tcpdump命令进行网络抓包和分析

Linux命令高级技巧通过tcpdump命令进行网络抓包和分析

Linux命令高级技巧通过tcpdump命令进行网络抓包和分析Linux是一款广泛应用于服务器和嵌入式设备的操作系统,具有强大的功能和灵活性。

与其他操作系统相比,Linux提供了丰富的命令行工具,其中之一就是tcpdump命令。

tcpdump是一款用于抓取网络数据包并进行分析的强大工具,它可以帮助用户深入了解网络通信,解决网络故障和排查安全问题。

在本文中,我们将介绍如何使用tcpdump 命令进行网络抓包和分析。

一、什么是网络抓包?网络抓包是指在计算机网络中捕获和保存网络数据包的过程。

网络数据包是信息在网络中传输的基本单位,它包含了源IP地址、目标IP 地址、协议类型、端口号等重要信息。

通过抓包,我们可以观察和分析网络通信的行为,帮助我们了解网络设备之间的交互过程,诊断网络故障,以及排查安全问题。

二、tcpdump命令的基本用法tcpdump命令是一款基于命令行的工具,用于捕获和分析网络数据包。

下面是tcpdump命令的基本用法:```tcpdump [选项] [表达式]```其中,选项用于配置tcpdump的行为,表达式用于过滤需要捕获的数据包。

下面是一些常用的选项:- `-i`:指定要监听的网络接口。

- `-n`:禁用主机名解析,显示ip地址而非域名。

- `-X`:以16进制和ASCII码显示数据包内容。

- `-c`:指定捕获数据包的数量。

- `-s`:指定捕获数据包的最大长度。

例如,我们可以使用以下命令来捕获网络接口eth0上的前10个数据包,并以16进制和ASCII码显示数据包内容:```tcpdump -i eth0 -c 10 -X```三、tcpdump命令的高级用法除了基本用法外,tcpdump命令还提供了一些高级的用法,帮助用户更加灵活和精确地进行网络抓包和分析。

1. 根据协议过滤数据包tcpdump支持根据不同协议类型进行数据包的过滤。

常见的协议包括TCP、UDP、ICMP等。

tcpdump命令详解

tcpdump命令详解

tcpdump命令详解⼀、tcpdump简介tcpdump命令是基于unix系统的命令⾏的数据报嗅探⼯具,可以抓取流动在⽹卡上的数据包。

它的原理⼤概如下:linux抓包是通过注册⼀种虚拟的底层⽹络协议来完成对⽹络报⽂(准确的是⽹络设备)消息的处理权。

当⽹卡接收到⼀个⽹络报⽂之后,它会遍历系统中所有已经注册的⽹络协议,如以太⽹协议、x25协议处理模块来尝试进⾏报⽂的解析处理。

当抓包模块把⾃⼰伪装成⼀个⽹络协议的时候,系统在收到报⽂的时候就会给这个伪协议⼀次机会,让它对⽹卡收到的保温进⾏⼀次处理,此时该模块就会趁机对报⽂进⾏窥探,也就是啊这个报⽂完完整整的复制⼀份,假装是⾃⼰接收的报⽂,汇报给抓包模块。

⼆、语法1、查看本地⽹卡状态[root@cnetos daocoder]# netstat -iKernel Interface tableIface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flgdocker0 1500 40409 0 0 0 20376 0 0 0 BMUens5f0 1500 22999894941 0 0 0 25581016784 0 0 0 BMRUlo 65536 850291094 0 0 0 850291094 0 0 0 LRUIface:存在的⽹卡。

MTU:最⼤传输单元。

RX-OK RX-ERR RX-DRP RX-OVR:正确接收数据报的数量以及发⽣错误、流式、碰撞的总数。

TX-OK TX-ERR TX-DRP TX-OVR:正确发送数据报的数量以及发⽣错误、流式、碰撞的总数。

2、tcpdump帮助命令[root@centos daocoder]# tcpdump --helptcpdump version 4.9.0libpcap version 1.5.3OpenSSL 1.0.1e-fips 11 Feb 2013Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ][ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ][ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ][ -Q|-P in|out|inout ][ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ][ --immediate-mode ] [ -T type ] [ --version ] [ -V file ][ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ][ -Z user ] [ expression ](1)、类型的关键字host:指明⼀台主机。

linux tcpdump 参数

linux tcpdump 参数

linux tcpdump 参数Linux tcpdump参数详解一、简介tcpdump是一个开源的网络抓包工具,可以用于捕获和分析网络数据包。

它可以帮助网络管理员监控和故障排除网络问题。

本文将介绍一些常用的tcpdump参数,帮助读者更好地使用这个工具。

二、常用参数1. -i 参数:指定抓包的网络接口使用-i参数可以指定抓包的网络接口,比如eth0、wlan0等。

例如,使用命令"tcpdump -i eth0"可以在eth0网络接口上抓取数据包。

2. -n 参数:不进行主机名解析使用-n参数可以禁止tcpdump进行主机名解析,从而避免输出http 地址。

这对于网络管理员来说非常有用,因为他们更关心的是IP地址而不是主机名。

3. -c 参数:指定抓包数量使用-c参数可以指定抓取的数据包数量。

例如,使用命令"tcpdump -c 100"可以抓取100个数据包后停止。

4. -s 参数:指定抓包长度使用-s参数可以指定抓包的最大长度。

默认情况下,tcpdump会捕获完整的数据包,但有时候只需要捕获部分数据包,可以使用-s参数来限制抓包的长度。

5. -w 参数:将数据包保存到文件使用-w参数可以将抓到的数据包保存到文件中,以便后续分析。

例如,使用命令"tcpdump -w capture.pcap"可以将数据包保存到capture.pcap文件中。

6. -r 参数:从文件中读取数据包使用-r参数可以从文件中读取数据包进行分析。

例如,使用命令"tcpdump -r capture.pcap"可以分析capture.pcap文件中的数据包。

7. -p 参数:禁止混杂模式使用-p参数可以禁止tcpdump进入混杂模式。

混杂模式可以使网络接口捕获到经过它的所有数据包,而不仅仅是目标或源地址与该接口相匹配的数据包。

但有时候我们希望禁止混杂模式,只捕获目标或源地址与该接口相匹配的数据包。

tcpdump使用方法

tcpdump使用方法

tcpdump使用方法一、什么是tcpdumptcpdump是一种在Linux和Unix操作系统上使用的网络抓包工具。

它可以捕获网络数据包并将其显示或保存到文件中,以供后续分析和诊断。

tcpdump可以用于调试网络问题、监视网络流量、分析网络协议等。

二、安装tcpdump1.在Ubuntu上安装tcpdump:sudo apt-get install tcpdump2.在CentOS上安装tcpdump:sudo yum install tcpdump三、基本用法1.捕获所有数据包:sudo tcpdump -i eth0-i选项指定要监听的接口,eth0为网卡接口名称。

2.捕获指定端口的数据包:sudo tcpdump -i eth0 port 80port选项指定要监听的端口号,80为HTTP服务默认端口号。

3.捕获指定IP地址的数据包:sudo tcpdump -i eth0 host 192.168.1.100host选项指定要监听的IP地址,192.168.1.100为目标IP地址。

4.捕获指定协议类型的数据包:sudo tcpdump -i eth0 icmpicmp为ICMP协议类型。

5.捕获指定源IP地址和目标IP地址之间的数据包:sudo tcpdump -i eth0 src 192.168.1.100 and dst 192.168.1.200 src选项指定源IP地址,dst选项指定目标IP地址。

6.保存抓包结果到文件:sudo tcpdump -i eth0 -w capture.pcap-w选项指定保存到文件的名称,capture.pcap为文件名。

7.读取保存的抓包结果:sudo tcpdump -r capture.pcap-r选项指定读取文件的名称,capture.pcap为文件名。

四、高级用法1.显示数据包详细信息:sudo tcpdump -i eth0 -v-v选项可以显示更详细的信息,如源地址、目标地址、协议类型等。

tcpdump linux 抓包 原理

tcpdump linux 抓包 原理

tcpdump是一款在Linux系统上常用的网络抓包工具,它可以捕获网络数据包并将其显示或保存到文件中。

它的原理是通过监听网络接口,将接收到的数据包进行解析和分析。

具体来说,tcpdump使用libpcap库来访问网络接口,该库提供了一组函数来捕获和处理网络数据包。

当tcpdump启动时,它会打开指定的网络接口,并设置过滤规则来选择需要捕获的数据包。

然后,它会进入一个循环,不断地从网络接口读取数据包,并对其进行解析和处理。

tcpdump可以根据用户指定的过滤规则来选择需要捕获的数据包。

过滤规则可以基于源IP地址、目标IP地址、端口号、协议类型等条件进行过滤。

这样可以帮助用户只捕获感兴趣的数据包,减少不必要的数据量。

一旦tcpdump捕获到数据包,它会对数据包进行解析,并将解析结果显示在终端上或保存到文件中。

解析结果包括数据包的源IP地址、目标IP地址、端口号、协议类型、数据包长度等信息。

用户可以根据需要选择显示的信息。

总结起来,tcpdump的原理是通过监听网络接口,捕获数据包并解析其内容,然后将解析结果显示或保存到文件中。


可以帮助用户分析网络流量、排查网络问题等。

Linux抓包工具tcpdump命令详解

Linux抓包工具tcpdump命令详解

Linux抓包⼯具tcpdump命令详解1、简介⽤简单的话来定义tcpdump,就是:dump the traffic on a network,根据使⽤者的定义对⽹络上的数据包进⾏截获的包分析⼯具。

tcpdump可以将⽹络中传送的数据包的“头”完全截获下来提供分析。

它⽀持针对⽹络层、协议、主机、⽹络或端⼝的过滤,并提供and、or、not等逻辑语句来帮助你去掉⽆⽤的信息。

2、实⽤命令实例1)默认启动tcpdump普通情况下,直接启动tcpdump将监视第⼀个⽹络接⼝上所有流过的数据包。

2)监视指定⽹络接⼝的数据包 tcpdump -i eth1如果不指定⽹卡,默认tcpdump只会监视第⼀个⽹络接⼝,⼀般是eth0,下⾯的例⼦都没有指定⽹络接⼝。

3)监视指定主机的数据包打印所有进⼊或离开sundown的数据包:tcpdump host sundown也可以指定ip,例如截获所有210.27.48.1的主机收到的和发出的所有的数据包:tcpdump host 210.27.48.1打印helios与hot或者与ace之间通信的数据包:tcpdump host helios and \( hot or ace \)截获主机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 \)打印ace与任何其他主机之间通信的IP数据包, 但不包括与helios之间的数据包:tcpdump ip host ace and not helios如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使⽤命令:tcpdump ip host 210.27.48.1 and ! 210.27.48.2截获主机hostname发送的所有数据:tcpdump -i eth0 src host hostname监视所有送到主机hostname的数据包:tcpdump -i eth0 dst host hostname4)监视指定主机和端⼝的数据包如果想要获取主机210.27.48.1接收或发出的telnet包,使⽤如下命令:tcpdump tcp port 23 host 210.27.48.1对本机的udp 123 端⼝进⾏监视123为ntp的服务端⼝:tcpdump udp port 1235)监视指定⽹络的数据包打印本地主机与Berkeley⽹络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley⽹络'的⽹络地址,此表达式最原始的含义可表达为: 打印⽹络地址为ucb-ether的所有数据包):tcpdump net ucb-ether打印所有通过⽹关snup的ftp数据包:(注意,表达式被单引号括起来了,这可以防⽌shell对其中的括号进⾏错误解析)tcpdump 'gateway snup and (port ftp or ftp-data)'6)监视指定协议的数据包打印TCP会话中的的开始和结束数据包,并且数据包的源或⽬的不是本地⽹络上的主机:(nt: localnet, 实际使⽤时要真正替换成本地⽹络的名字)tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'打印所有源或⽬的端⼝是80,⽹络层协议为IPv4,并且含有数据,⽽不是SYN,FIN以及ACK-only等不含数据的数据包:(ipv6的版本的表达式可做练习)tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'(nt: 可理解为, ip[2:2]表⽰整个ip数据包的长度, (ip[0]&0xf)<<2)表⽰ip数据包包头的长度(ip[0]&0xf代表包中的IHL域, ⽽此域的单位为32bit, 要换算成字节数需要乘以4,即左移2.(tcp[12]&0xf0)>>4 表⽰tcp头的长度, 此域的单位也是32bit, 换算成⽐特数为 ((tcp[12]&0xf0) >> 4) << 2, 即((tcp[12]&0xf0)>>2).((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0 表⽰: 整个ip数据包的长度减去ip头的长度,再减去tcp头的长度不为0,这就意味着, ip数据包中确实是有数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCPDUMP简介在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。

sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。

对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer 工具来分析原因,找出造成网络阻塞的来源。

对于网络程序员来说,通过sniffer工具来调试程序。

用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用sniffer工具简直可以对网络中的所有流量一览无余!Sniffer 工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。

由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。

Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是必不可少的。

所以,今天我们就来看看Linux中强大的网络数据采集分析工具——TcpDump。

用简单的话来定义tcpdump,就是:dump the traffice on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。

作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东东之一。

顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。

它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。

tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。

因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。

-----------------------bash-2.02# tcpdumptcpdump: listening on eth011:58:47.873028 bios-ns > bios-ns: udp 5011:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=430000 0000 0080 0000 1007 cf08 0900 00000e80 0000 902b 4695 0980 8701 0014 0002000f 0000 902b 4695 0008 0011:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97ffff 0060 0004 ffff ffff ffff ffff ffff0452 ffff ffff 0000 e85b 6d85 4008 00020640 4d41 5354 4552 5f57 4542 0000 00000000 00^C------------------------首先我们注意一下,从上面的输出结果上可以看出来,基本上tcpdump总的的输出格式为:系统时间来源主机.端口 > 目标主机.端口数据包参数TcpDump的参数化支持tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存,等等。

然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。

使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。

tcpdump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。

请使用man tcpdump查看这些过滤规则的具体用法。

显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。

一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP堆栈才行。

在FreeBSD下,这就需要内核支持伪设备bpfilter。

因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。

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

May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问题。

网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。

因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要。

昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持tcp、udp等低层协议。

从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。

显然这不利于分析网络故障,通常的解决办法是先使用带-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.1,dst 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> .telnet,使用-n后变成了:eth0 < 192.168.0.9.1165 > 192.168.0.1.telnet。

-nn 不进行端口名称的转换。

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

-N 不打印出默认的域名。

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

-O 不进行匹配代码的优化。

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

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

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

[expression]的用法:expression是tcpdump最为有用的高级用法,可以利用它来匹配一些特殊的包。

下面介绍一下expression的用法,主要是如何写出符合要求最为严格expression。

如果tcpdump中没有expression,那么tcpdump会把网卡上的所有数据包输出,否则会将被expression匹配的包输出。

expression 由一个或多个[primitives]组成,而[primitives]由一个或多个[qualitifer]加一个id(name)或数字组成,它们的结构如用正则表达式则可表示为:expression = ([qualitifer]+(id|number))+依次看来,expression是一个复杂的条件表达式,其中[qualitifer]+(id|number)就是一个比较基本条件,qualitifer就表达一些的名称(项,变量),id或number则表示一个值(或常量)。

相关文档
最新文档