抓包工具tcpdump

tcpdump简介

tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。 

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

tcpdump存在于基本的Linux系统 中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

说白了tcpdump就是linux下的一款抓包工具。通常用于故障诊断、网络分析,功能十分的强大。了解了tcpdump是何物之后,让我们通过实战去一一掀开它神秘的面纱。

tcpdump命令参数

tcpdump基本命令如下:

tcpdump [option] [proto] [dir] [type]

其中:

1、option即可选参数,可以指定相关参数,输出特定信息。

可选参数很多,主要有以下:

 1 -A 以ASCII格式打印出所有分组,并将链路层的头最小化。
 2 -c 在收到指定的数量的分组后,tcpdump就会停止。
 3 -C 在将一个原始分组写入文件之前,检查文件当前的大小是否超过了参数file_size 中指定的大小。如果超过了指定大小,则关闭当前文件,然后在打开一个新的文件。参数 file_size 的单位是兆字节(是1,000,000字节,而不是1,048,576字节)。
 4 -d 将匹配信息包的代码以人们能够理解的汇编格式给出。
 5 -dd 将匹配信息包的代码以c语言程序段的格式给出。
 6 -ddd 将匹配信息包的代码以十进制的形式给出。
 7 -D 打印出系统中所有可以用tcpdump截包的网络接口。
 8 -e 在输出行打印出数据链路层的头部信息。
 9 -E 用spi@ipaddr algo:secret解密那些以addr作为地址,并且包含了安全参数索引值spi的IPsec ESP分组。
10 -f 将外部的Internet地址以数字的形式打印出来。
11 -F 从指定的文件中读取表达式,忽略命令行中给出的表达式。
12 -i 指定监听的网络接口。
13 -l 使标准输出变为缓冲行形式,可以把数据导出到文件。
14 -L 列出网络接口的已知数据链路。
15 -m 从文件module中导入SMI MIB模块定义。该参数可以被使用多次,以导入多个MIB模块。
16 -M 如果tcp报文中存在TCP-MD5选项,则需要用secret作为共享的验证码用于验证TCP-MD5选选项摘要(详情可参考RFC 2385)。
17 -b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。
18 -n 不把网络地址转换成名字。
19 -nn 不进行端口名称的转换。
20 -N 不输出主机名中的域名部分。例如,‘nic.ddn.mil‘只输出’nic‘。
21 -t 在输出的每一行不打印时间戳。
22 -O 不运行分组分组匹配(packet-matching)代码优化程序。
23 -P 不将网络接口设置成混杂模式。
24 -q 快速输出。只输出较少的协议信息。
25 -r 从指定的文件中读取包(这些包一般通过-w选项产生)。
26 -S 将tcp的序列号以绝对值形式输出,而不是相对值。
27 -s 从每个分组中读取最开始的snaplen个字节,而不是默认的68个字节。
28 -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc远程过程调用)和snmp(简单网络管理协议;)。
29 -t 不在每一行中输出时间戳。
30 -tt 在每一行中输出非格式化的时间戳。
31 -ttt 输出本行和前面一行之间的时间差。
32 -tttt 在每一行中输出由date处理的默认格式的时间戳。
33 -u 输出未解码的NFS句柄。
34 -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息。
35 -vv 输出详细的报文信息。
36 -w 直接将分组写入文件中,而不是不分析并打印出来。

2、proto即类过滤器,指定过滤某种协议的数据包。如tcp、udp、ip、arp、icmp等。

3、dir即类过滤器,根据数据流向进行过滤,可识别的关键字有src、dst、 src or dst等。

4、type即类过滤器,可识别的关键字有:host, net, port, port range等,这些关键字后边需要再接具体参数。

tcpdump安装

1、linux系统默认没有安装tcpdump工具的,所以需要我们自己安装,这里我通过yum进行安装。
yum -y install tcpdump

2、安装完成,通过tcpdump -h查看它相关版本信息。

[root@haolinux1 ~]# tcpdump -h
tcpdump version 4.9.2
libpcap version 1.5.3
OpenSSL 1.0.2k-fips  26 Jan 2017
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 ]
[root@haolinux1 ~]#

tcpdump实战

1、常用抓包命令1

tcpdump -i eno16777736

该命令参数表示抓取网口eno16777736上所有的数据包。

2、常用抓包命令2

tcpdump -i eno16777736 -s 0 -w hao1.cap

该命令参数大概意思是针对网口eno16777736抓取不限制大小的报文,保存为文件hao1.cap

3、常用抓包命令3

tcpdump -ni eno16777736 -c 10 dst host 192.168.3.165

该命令参数表示抓取网口eno16777736发往目的主机192.168.3.165的数据包,并且抓取10个包后,自动停止抓包。

4、常用抓包命令4

tcpdump -r hao1.cap

该命令是读取抓包文件hao1.cap,结果如下:

[root@haolinux1 ~]# tcpdump -r hao1.cap 
reading from file hao1.cap, link-type EN10MB (Ethernet)
15:22:42.826813 IP 192.168.3.199.ssh > 192.168.3.165.8162: Flags [P.], seq 211541184:211541316, ack 3983093332, win 255, length 132
15:22:42.862614 IP 192.168.3.165.armtechdaemon > 192.168.3.199.ssh: Flags [.], ack 546175073, win 16293, length 0
15:22:43.026135 IP 192.168.3.165.8162 > 192.168.3.199.ssh: Flags [.], ack 132, win 16425, length 0
15:22:43.609384 IP 192.168.3.199 > 183.232.231.172: ICMP echo request, id 9275, seq 7, length 64
15:22:43.621431 IP 183.232.231.172 > 192.168.3.199: ICMP echo reply, id 9275, seq 7, length 64
15:22:43.621610 IP 192.168.3.199.ssh > 192.168.3.165.armtechdaemon: Flags [P.], seq 1:133, ack 0, win 255, length 132
15:22:43.821278 IP 192.168.3.165.armtechdaemon > 192.168.3.199.ssh: Flags [.], ack 133, win 16260, length 0
15:22:44.610696 IP 192.168.3.199 > 183.232.231.172: ICMP echo request, id 9275, seq 8, length 64
15:22:44.624632 IP 183.232.231.172 > 192.168.3.199: ICMP echo reply, id 9275, seq 8, length 64
15:22:44.624842 IP 192.168.3.199.ssh > 192.168.3.165.armtechdaemon: Flags [P.], seq 133:265, ack 0, win 255, length 132
15:22:44.824397 IP 192.168.3.165.armtechdaemon > 192.168.3.199.ssh: Flags [.], ack 265, win 16227, length 0

5、常用抓包命令5

tcpdump -i eno16777736 host 183.232.231.172 and tcp port 80 

表示抓取主机183.232.231.172所有在TCP 80端口的数据包。

6、常用抓包命令6

cpdump -i eno16777736 host 183.232.231.172 and dst port 80 

表示抓取HTTP主机183.232.231.172在80端口接收到的数据包。

7、常用抓包命令7

tcpdump -i eno16777736 port 80

表示抓取所有经过eno16777736,目的或源端口是80的网络数据。

8、常用抓包命令8

tcpdump -i eno16777736 icmp

即表示过滤出icmp包。

9、常用抓包命令9

tcpdump host 192.168.20.110

表示监听本机跟主机192.168.20.110之间往来的通信包。

注:出、入的包都会被监听。

10、常用抓包命令10

tcpdump port 8080

表示监听特定端口8080的通信包。

11、常用抓包命令11

tcpdump tcp

表示监听TCP的通信包。

12、常用抓包命令12

tcpdump tcp port 22 and src host 192.168.20.110

表示监听来自主机 192.168.20.110 在端口 22 上的TCP数据包

13、常用抓包命令13

tcpdump ip host 192.168.20.110 and 192.168.20.120
表示监听来自主机 192.168.20.110 和主机192.168.20.120之间的数据包。

tcpdump ip host 192.168.20.110 and ! 192.168.20.120
表示监听来自主机 192.168.20.110 除了和主机192.168.20.120之外的主机之间的数据包。

14、常用抓包命令14

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型;

(2)-i eth1 : 只抓经过接口eth1的包;

(3)-t : 不显示时间戳;

(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包;

(5)-c 100 : 只抓取100个数据包;

(6)dst port ! 22 : 不抓取目标端口是22的数据包;

(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

15、常用抓包命令15

tcpdump -s 1024 -l -A -n host 192.168.9.56
tcpdump -s 1024 -l -A src 192.168.9.56 or dst 192.168.9.56
sudo tcpdump -A -s 1492 dst port 80

表示监听查看http请求的header数据包

16、常用抓包命令16

tcpdump -i eth0 port http
tcpdump -i eth0 port http or port smtp or port imap or port pop3 -l -A | egrep -i 'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|userna me:|password:|login:|pass |user '

表示监听查看网卡eth0的http请求的tcp包

17、常用抓包命令17

tcpdump -n -v tcp or udp or icmp and not port 22

表示监听查看tcp,upd,icmp非ssh的包

18、常用抓包命令18

tcpdump -i eth0 port 80 -w -

表示监听查看http请求的request 包

19、常用抓包命令19

tcpdump -i en1 -n -s 0 -w - | grep -a -o -E "GET \/.*|Host\: .*"

表示过滤http响应的get host头信息包

20、常用抓包命令20

tcpdump -i en0 'udp port 53'

表示监听DNS查询请求响应包

21、常用抓包命令21

tcpdump tcp port 22 and host 192.168.20.110

表示监听主机 192.168.20.110 接收和发出的 tcp 协议的 ssh 的数据包

22、常用抓包命令22

tcpdump icmp and src 192.168.20.110 -i ens33 -n

表示过滤 icmp 报文并且源 IP 是 192.168.20.110

23、常用抓包命令23

tcpdump src host 192.168.20.110 -i ens33 -n -c 5

表示过滤源 IP 地址是 192.168.20.110 的包

24、常用抓包命令24

tcpdump dst host 192.168.20.110 -i ens33 -n -c 5

表示过滤目的 IP 地址是 192.168.20.110 的包

25、常用抓包命令25

tcpdump port 22 -i ens33 -n -c 5

表示过滤端口号为 22, 即 ssh 协议的 的包

26、常用抓包命令26

tcpdump portrange 22-433 -i ens33 -n -c 8

表示过滤过滤端口号 22-433 内的数据

 

posted @ 2024-04-24 09:06  小蟋帅  阅读(568)  评论(0编辑  收藏  举报