Tcpdump命令详解
- 格式:docx
- 大小:26.21 KB
- 文档页数:9
tcpdump 抓包参数TCPDump抓包参数是网络工程师在进行网络数据包分析时经常使用的工具。
通过使用不同的参数,可以提取出特定的网络数据包,从而更好地了解网络通信过程中发生的问题。
本文将介绍一些常用的TCPDump抓包参数,并说明它们的作用和用法。
1. -i 参数:指定抓包的网络接口。
例如,使用命令“tcpdump -i eth0”可以抓取eth0接口上的网络数据包。
2. -c 参数:指定抓包的数据包数量。
例如,使用命令“tcpdump -c 100”可以抓取100个数据包后停止。
3. -n 参数:禁止将网络地址和端口号解析为名称。
使用该参数可以提高抓包效率,并且避免了DNS解析的开销。
4. -s 参数:指定抓取数据包的长度。
例如,使用命令“tcpdump -s 100”可以抓取每个数据包的前100个字节。
5. -w 参数:将抓取的数据包保存到文件中。
例如,使用命令“tcpdump -w capture.pcap”可以将抓取的数据包保存到名为capture.pcap的文件中。
6. -r 参数:从文件中读取数据包进行分析。
例如,使用命令“tcpdump -r capture.pc ap”可以分析名为capture.pcap的数据包文件。
7. -A 参数:以ASCII文本形式显示数据包的内容。
使用该参数可以方便地查看数据包中的具体信息。
8. -e 参数:显示数据包的以太网帧头部信息。
使用该参数可以查看源MAC地址和目的MAC地址等信息。
9. -v 参数:增加详细输出。
使用该参数可以获得更多关于数据包的信息,如IP头部信息和TCP头部信息等。
10. -X 参数:以十六进制和ASCII形式显示数据包的内容。
使用该参数可以同时查看数据包的二进制和可读形式。
11. -q 参数:静默模式。
使用该参数可以减少输出信息,只显示关键信息。
12. -tt 参数:显示时间戳。
使用该参数可以查看数据包抓取的时间。
13. -S 参数:显示绝对序号。
TCPDUMP使用说明tcpdump命令参数解释 (1)Tcpdump使用案例说明: (2)TCPDUMP出现“truncated-ip - 1215 bytes missing!”错误 (3)TCPDUMP 命令中的-i参数用VLAN名称与接口编号有什么区别 (3)TCPDUMP 命令中出现“pcap_loop: Error: Interface packet capture busy”错误信息? (5)tcpdump命令参数解释TcpD ump可以将网络中传送的数据包的“头”完全截获下来提供分析。
它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、o r、not等逻辑语句来帮助你去掉无用的信息。
数据过滤不带任何参数的TcpDu mp将搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析。
所以,我们应当先想好需要哪些数据,Tc pDu mp提供以下参数供我们选择数据:注:tcpdump命令只针对经过CPU处理的数据包进行捕获,一但在BIGIP中的某个VIP采用的是performance L4的方式,数据包则由四层加层ASIC芯片处理而没有流经CPU,无法捕获数据。
解决该问题的方法是:选取该Virtual Server将type由Performance Layer4临时改为Standard再来用TCPDUMP命令抓包,抓包以后,改回到Performance Layer4。
Tcpdump使用案例说明:举例1:对external接口主机139.212.96.2并且端口为1433的流量进行监控。
端口不指定tcp和udp,默认为同时对tcp和udp进行报文捕获。
本命令不解析IP地址/端口号为主机名/服务名称,同时显示报文十二进制和文本信息,报文最大为1500字节。
f5-1:~# tcpdump -i external -nn -X -s 1600 port 1433 andhost 139.212.96.2tcpdump: listening on external 21:48:41.295546 139.212.96.2.1201 > 10.75.9.44.1433: .302192826:302192827(1) ack 558871968 win 64360 (DF) 0x0000 012c 0800 4500 0029 38cf 4000 7f06c3b2 .,..E..)8.@.....0x0010 8bd4 6002 0a4b 092c 04b1 0599 120318ba ..`..K.,........0x0020 214f b5a0 5010 fb68 a926 000000 !O..P..h.&...21:48:41.296015 10.75.9.44.1433 > 139.212.96.2.1201: . ack1 win 64636 (DF)0x0000 012c 0800 4500 0028 cb2d4000 7f063155 .,..E..(.-@...1U0x0010 0a4b 092c 8bd4 6002 0599 04b1 214fb5a0 .K.,..`.....!O..0x0020 1203 18bb 5010 fc7c a812 0000 00000000 ....P..|........0x0030 0000 .. 21:48:50.701130 139.212.96.2.1206 > 10.75.9.44.1433: .304974934:304974935(1) ack 565108263 win 64882 (DF)0x0000 012c 0800 4500 0029 38f7 4000 7f06c38a .,..E..)8.@.....0x0010 8bd4 6002 0a4b 092c 04b6 0599 122d8c56 ..`..K.,.....-.V0x0020 21ae de27 5010 fd72 0a6b 000000 !..'P..r.k...21:48:50.702567 10.75.9.44.1433 > 139.212.96.2.1206: . ack1 win 65267 (DF)0x0000 012c 0800 4500 0028 d3a6 4000 7f0628dc .,..E..(..@...(.0x0010 0a4b 092c 8bd4 6002 0599 04b6 21aede27 .K.,..`.....!..'0x0020 122d 8c57 5010 fef3 08ea 0000 0000 0000 .-.WP...........0x0030 0000 ..举例2:对internal接口主机172.31.230.53和172.31.230.51之间端口8080的流量进行分组捕获。
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命令是基于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:指明⼀台主机。
tcpdump命令tcpdump命令详解tcpdump命令可以对⽹络上的数据包进⾏截获和分析。
它⽀持针对⽹络层、协议、主机、⽹络或端⼝的过滤,并提供and、or、not等逻辑语句来帮助你去掉⽆⽤的信息。
tcpdump 命令格式说明:Usage: 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 ]option:-a:试着把⽹络和⼴播地址转换成名称.-c:当收到 count 报⽂后退出.-d:把编译好的报⽂匹配代码 (packet-matching code) 翻译成可读形式, 传往标准输出, 然后退出.-dd:把报⽂匹配代码 (packet-matching code) 以 C 程序⽚断的形式输出.-ddd:把报⽂匹配代码 (packet-matching code) 以⼗进制数形式输出 (前⾯加上总数).-e:显⽰链路层报头-f:以数字形式显⽰ '外部的' 互联⽹地址, ⽽不是字符形式-F:把 file 的内容⽤作过滤表达式. 忽略命令⾏上的表达式-i:监听 interface. 如果不指定接⼝, tcpdump 在系统的接⼝清单中, 寻找号码最⼩, 已经配置好的接⼝ (loopback 除外).选中的时候会中断连接.-l:⾏缓冲标准输出. 可⽤于捕捉数据的同时查看数据. 例如, tcpdump -l | tee dat'' or ``tcpdump -l > dat & tail -f dat'-n:不要把地址转换成名字(指的是主机地址,端⼝号等)-N:不显⽰主机名字中的域名部分. 例如, 如果使⽤这个选项, tcpdump 只显⽰nic,⽽不是-O:禁⽌运⾏报⽂匹配代码的优化器. 这个选项只有当你怀疑优化器有bug时才有⽤.-p:禁⽌把接⼝置成 promiscuous(杂凑) 模式. 注意, 接⼝有可能因其他原因⽽处于 promiscuous 模式; 因此, '-p' 不能作为`ether host {local-hw-addr} 或 ether broadcast' 的简写.-r: <数据包⽂件>从 file中读⼊数据报 (⽂件是⽤ -w 选项创建的). 如果 file 是 ``-'', 就从标准输⼊读⼊.-s:<数据包⼤⼩> 设置每个数据包的⼤⼩-S:⽤绝对⽽⾮相对数值列出TCP关联数-T:<数据包类型> 强制将表达⽅式所指定的数据包转译成设置的数据包类型-t:禁⽌显⽰时戳标志-tt:显⽰未格式化的时戳标志-v:详细显⽰指令执⾏过程-vv:更详细显⽰指令执⾏过程-w: <数据包⽂件>把数据包数据写⼊指定的⽂件-x:⽤⼗六进制字码列出数据包资料expression 解析expression 是⽤来选择要转储的数据报,如果没有指定 expression , 就转储⽹络的全部报⽂,否则,只转储相对 expression 为 `true' 的数据报。
tcpdump常用命令用法tcpdump是一个常用的网络抓包工具,可以用来分析网络流量,下面是一些常见的tcpdump命令用法:1. 抓取指定网卡的所有流量:```tcpdump -i eth0```这里的eth0是网卡的名称,可以根据实际情况替换。
2. 抓取指定源IP和目标IP的流量:```tcpdump src <source_ip> and dst <destination_ip>```source_ip和destination_ip分别是源IP和目标IP地址。
3. 抓取指定端口的流量:```tcpdump port <port_number>```port_number是要抓取的端口号。
4. 抓取指定协议的流量:```tcpdump -v icmp```这里的icmp是要抓取的协议,可以是icmp、tcp、udp等。
5. 抓取指定主机的流量:```tcpdump host <hostname>```hostname是要抓取的主机名。
6. 抓取指定长度的流量:```tcpdump less <length>```length是要抓取的数据包长度。
7. 将抓包结果保存到文件中:```tcpdump -w <output_file>```output_file是保存抓包结果的文件名。
8. 从文件中读取抓包结果进行分析:```tcpdump -r <input_file>```input_file是要读取的抓包结果文件名。
这些命令用法只是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命令详解简介⽤简单的话来定义tcpdump,就是:dump the traffic on a network,根据使⽤者的定义对⽹络上的数据包进⾏截获的包分析⼯具。
tcpdump可以将⽹络中传送的数据包的“头”完全截获下来提供分析。
它⽀持针对⽹络层、协议、主机、⽹络或端⼝的过滤,并提供and、or、not等逻辑语句来帮助你去掉⽆⽤的信息。
实⽤命令实例默认启动tcpdump普通情况下,直接启动tcpdump将监视第⼀个⽹络接⼝上所有流过的数据包。
1、tcpdump: no suitable device found问题分析及解决:2种原因:1.权限不够,⼀般不经过处理,只⽤root⽤户能使⽤tcpdump , sudo ./tcpdump2.缺省只能同时使⽤4个tcpdump,如⽤完,则报此类错。
需要停掉多余的tcpdump2、fedora 14 中运⾏make install 命令也要加上 sudo3、出现种提⽰ linux UID or EUID of 0 required也是权限问题,fedora 下加上sudo监视指定⽹络接⼝的数据包tcpdump -i eth1如果不指定⽹卡,默认tcpdump只会监视第⼀个⽹络接⼝,⼀般是eth0,下⾯的例⼦都没有指定⽹络接⼝。
监视指定主机的数据包打印所有进⼊或离开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 hostname监视指定主机和端⼝的数据包如果想要获取主机210.27.48.1接收或发出的telnet包,同时本地端⼝是23,使⽤如下命令tcpdump tcp port 23 and host 210.27.48.118:16:52.987746 IP 10.1.210.111.55634 > izwz969829wo6i9nlscjukz.9124: Flags [S], seq 833996115, win 29200, options [mss 1460,sackOK,TS val 1492682208 ecr 0,nop,wscale 7], length 018:16:52.987794 IP izwz969829wo6i9nlscjukz.9124 > 10.1.210.111.55634: Flags [S.], seq 540069507, ack 833996116, win 28960, options [mss 1460,sackOK,TS val 1492698220 ecr 1492682208,nop,wscale 7], length 0 18:16:52.987980 IP 10.1.210.111.55634 > izwz969829wo6i9nlscjukz.9124: Flags [R.], seq 1, ack 1, win 229, options [nop,nop,TS val 0 ecr 1492698220], length 018:16:52.989616 IP 10.1.210.111.55636 > izwz969829wo6i9nlscjukz.9124: Flags [S], seq 236673865, win 29200, options [mss 1460,sackOK,TS val 1492682210 ecr 0,nop,wscale 7], length 018:16:52.989642 IP izwz969829wo6i9nlscjukz.9124 > 10.1.210.111.55636: Flags [S.], seq 2397900505, ack 236673866, win 28960, options [mss 1460,sackOK,TS val 1492698222 ecr 1492682210,nop,wscale 7], length 0 18:16:52.989782 IP 10.1.210.111.55636 > izwz969829wo6i9nlscjukz.9124: Flags [R.], seq 1, ack 1, win 229, options [nop,nop,TS val 0 ecr 1492698222], length 018:16:54.189162 IP izwz969829wo6i9nlscjukz.9124 > 10.1.210.111.55634: Flags [S.], seq 540069507, ack 833996116, win 28960, options [mss 1460,sackOK,TS val 1492699422 ecr 1492682208,nop,wscale 7], length 0 18:16:54.189319 IP 10.1.210.111.55634 > izwz969829wo6i9nlscjukz.9124: Flags [R], seq 833996116, win 0, length 018:16:54.389178 IP izwz969829wo6i9nlscjukz.9124 > 10.1.210.111.55636: Flags [S.], seq 2397900505, ack 236673866, win 28960, options [mss 1460,sackOK,TS val 1492699622 ecr 1492682210,nop,wscale 7], length 0 18:16:54.389374 IP 10.1.210.111.55636 > izwz969829wo6i9nlscjukz.9124: Flags [R], seq 236673866, win 0, length 018:16:56.989896 IP 10.1.210.111.55656 > izwz969829wo6i9nlscjukz.9124: Flags [S], seq 2567997945, win 29200, options [mss 1460,sackOK,TS val 1492686210 ecr 0,nop,wscale 7], length 018:16:56.989959 IP izwz969829wo6i9nlscjukz.9124我的haproxy配置的是4秒,这⾥怎么是2秒呢?看上⾯的标志位对本机的udp 123 端⼝进⾏监视 123 为ntp的服务端⼝tcpdump udp port 123监视指定⽹络的数据包打印本地主机与Berkeley⽹络上的主机之间的所有通信数据包(nt: ucb-ether, 此处可理解为'Berkeley⽹络'的⽹络地址,此表达式最原始的含义可表达为: 打印⽹络地址为ucb-ether的所有数据包)tcpdump net ucb-ether打印所有通过⽹关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防⽌shell对其中的括号进⾏错误解析)tcpdump 'gateway snup and (port ftp or ftp-data)'打印所有源地址或⽬标地址是本地主机的IP数据包(如果本地⽹络通过⽹关连到了另⼀⽹络, 则另⼀⽹络并不能算作本地⽹络.(nt: 此句翻译曲折,需补充).localnet 实际使⽤时要真正替换成本地⽹络的名字)tcpdump ip and not net localnet监视指定协议的数据包打印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数据包中确实是有数据.对于ipv6版本只需考虑ipv6头中的'Payload Length' 与 'tcp头的长度'的差值, 并且其中表达⽅式'ip[]'需换成'ip6[]'.)打印长度超过576字节, 并且⽹关地址是snup的IP数据包tcpdump 'gateway snup and ip[2:2] > 576'打印所有IP层⼴播或多播的数据包,但不是物理以太⽹层的⼴播或多播数据报tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'打印除'echo request'或者'echo reply'类型以外的ICMP数据包( ⽐如,需要打印所有⾮ping 程序产⽣的数据包时可⽤到此表达式 .(nt: 'echo reuqest' 与 'echo reply' 这两种类型的ICMP数据包通常由ping程序产⽣))tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'tcpdump 与wiresharkWireshark(以前是ethereal)是Windows下⾮常简单易⽤的抓包⼯具。
tcpdump用法详解(1)(2006-04-13 14:23:04)转载分类:Linux专题tcpdump采用命令行方式,它的命令格式为:tcpdump [ -adeflnNOpqStvx ] [ -c 数量] [ -F 文件名][ -i 网络接口] [ -r 文件名] [ -s snaplen ][ -T 类型] [ -w 文件名] [表达式](1). tcpdump的选项介绍-a 将网络地址和广播地址转变成名字;-d 将匹配信息包的代码以人们能够理解的汇编格式给出;-dd 将匹配信息包的代码以c语言程序段的格式给出;-ddd 将匹配信息包的代码以十进制的形式给出;-e 在输出行打印出数据链路层的头部信息;-f 将外部的Internet地址以数字的形式打印出来;-l 使标准输出变为缓冲行形式;-n 不把网络地址转换成名字;-t 在输出的每一行不打印时间戳;-v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;-vv 输出详细的报文信息;-c 在收到指定的包的数目后,tcpdump就会停止;-F 从指定的文件中读取表达式,忽略其它的表达式;-i 指定监听的网络接口;-r 从指定的文件中读取包(这些包一般通过-w选项产生);-w 直接将包写入文件中,并不分析和打印出来;-T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)(2). tcpdump的表达式介绍表达式是一个正则表达式,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' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。
A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包:#tcpdump host 210.27.48.1B想要截获主机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.2D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令:#tcpdump tcp port 23 host 210.27.48.1(3). tcpdump的输出结果介绍下面我们介绍几种典型的tcpdump命令的输出信息A,数据链路层头信息使用命令#tcpdump --e host iceice 是一台装有linux的主机,她的MAC地址是0:90:27:58:AF:1AH219是一台装有SOLARIC的SUN工作站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果如下所示:21:50:12.847509 eth0 <8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 >ice.telnet 0:0(0) ack 22535 win 8760 (DF)分析:21:50:12是显示的时间,847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0 >表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它表明是从源地址H219发来的数据包. 0:90:27:58:af:1a是主机ICE的MAC地址,表示该数据包的目的地址是ICE . ip 是表明该数据包是IP数据包,60 是数据包的长度, h219.33357 >ice.telnet 表明该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535 表明对序列号是222535的包进行响应. win 8760表明发送窗口的大小是8760.B,ARP包的TCPDUMP输出信息使用命令#tcpdump arp得到的输出结果是:22:32:42.802509 eth0 >arp who-has route tell ice (0:90:27:58:af:1a)22:32:42.802902 eth0 <arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a)分析: 22:32:42是时间戳, 802509是ID号, eth0 >表明从主机发出该数据包, arp表明是ARP请求包, who-has route tell ice表明是主机ICE请求主机ROUTE的MAC地址。
0:90:27:58:af:1a是主机ICE的MAC地址。
C,TCP包的输出信息用TCPDUMP捕获的TCP包的一般输出信息是:src >dst: flags data-seqno ack window urgent optionssrc >dst:表明从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R (RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次期望的顺序号, window是接收缓存的窗口大小, urgent表明数据包中是否有紧急指针. Options是选项.D,UDP包的输出信息用TCPDUMP捕获的UDP包的一般输出信息是:route.port1 >ice.port2: udp lenthUDP十分简单,上面的输出行表明从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP,包的长度是lenth三、利用网络数据采集分析工具TcpDump分析网络安全作为IP网络的系统管理员,经常会遇到一些网络连接方面的故障,在排查这些接故障时,除了凭借经验外,使用包分析软件往往会起到事半功倍的效果。
常用的包分析软件非常多,常见的如tcpdump,sniffer,windump,ettercap等。
1、网络数据采集分析工具TcpDump分析(1)网络的数据过滤不带任何参数的TcpDump将搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析。
所以,我们应当先想好需要哪些数据,TcpDump提供以下参数供我们选择数据:-b在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
例如:server#tcpdump -b arp将只显示网络中的arp即地址转换协议信息。
-i选择过滤的网络接口,如果是作为路由器至少有两个网络接口,通过这个选项,就可以只过滤指定的接口上通过的数据。
例如:server#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则用于网关主机。
可能有点复杂,看下面例子就知道了:server#tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头。
server#tcpdump ether src 00:50:04:BA:9B and dst......过滤源主机物理地址为XXX的报头(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。
server#Tcpdump src host 192.168.0.1 and dst port not telnet过滤源主机192.168.0.1和目的端口不是telnet的报头。
ip icmp arp rarp和tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。
例如:server#tcpdump ip src......只过滤数据-链路层上的IP报头。
server#tcpdump udp and src host 192.168.0.1只过滤源主机192.168.0.1的所有udp报头。