Linux - Tcpdump工具

Tcpdump工具介绍

TCPdump,全称dump the traffic on a network,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具。

tcpdump可以支持的功能:

1、在Linux平台将网络中传输的数据包全部捕获过来进行分析
2、支持网络层、传输层协议等协议捕获过滤
3、数据发送和接收的主机、网卡和端口等各种过滤捕获数据规则
4、提供and、or、not等语句进行逻辑组合捕获数据包或去掉不用的信息
5、结合wireshark工具分析捕获的报文

要灵活使用tcpdump工具必须要有两个必备的知识基础:

第一、Linux操作系统:

因为这是一款基于Linux系统下命令行的抓包工具,所以需要对Linux的基本操作和常用命令有一定的基础;

第二、网络知识:

因为tcpdump是将网络中传送的数据包完整的截获下来然后进行分析,所以想要分析捕获到的报文,需要了解OSI七层网络模型,以及常用网络协议等。

第一个命令

    tcpdump

默认输入tcpdump,回车之后监视第一个网络接口上流过的数据包,一般是eth0:

14:38:29.141600 IP Slave01.ssh > 14.204.63.85.23113: Flags [P.], seq 108:144, ack 1, win 501, length 36
14:38:29.141629 IP Slave01.ssh > 14.204.63.85.23113: Flags [P.], seq 144:252, ack 1, win 501, length 108
14:38:29.141650 IP Slave01.ssh > 14.204.63.85.23113: Flags [P.], seq 252:288, ack 1, win 501, length 36
14:38:29.142083 IP Slave01.58843 > 100.100.2.138.domain: 46327+ PTR? 85.63.204.14.in-addr.arpa. (43)
14:38:29.142302 IP 100.100.2.138.domain > Slave01.58843: 46327 ServFail 0/0/0 (43)

从上面的输出来看,可以总结出:
第一列:时分秒毫秒14:38:29.142302第二列:网络协议IP
第三列:发送方的ip地址+端口号,其中100.100.2.138是ip,而domain是端口号/Slave01是主机,ssh是协议22端口;
第四列:箭头>,表示数据流向
第五列:接收方的ip地址+端口号,其中14.204.63.85是ip,而23113是端口号
第六列:数据包内容,包括Flags标识符,seq 号,ack号,win窗口,数据长度length
其中[P.]表示PUSH标志位
为1,更多标识符大家需要了解TCP协议的标志位。

TCP协议

TCP (Transmission Control Protocol)传输控制协议,顾名思义,就是要对数据的传输进行一定的控制.

在这里插入图片描述
SYN:连接请求或者接受连接请求—1 表示打开
FIN:连接结束,断开链接 ----1 表示断开连接
RST:重置链接 —1
ACK:确认标记位 —1 标记为一表示是确认包
PSH:催促标志位,将接受缓冲区内数据向上交付给应用程序,而不是等待缓冲区满后再交付。
URG:紧急标志位,将紧急数据排在普通数据的前面; —1 标记为一表示报文为紧急报文 提前处理
序号:每个数据包都对应着一个序列号
确认号:每发送一个数据包都需要收到对应的确认包,确认号=序号+1
窗口:滑动窗口


  • [S]:SYN(开始连接)
    [P]:PSH(推送数据)
    [F]:FIN(结束连接)
    [R]:RST(重置连接)
    []:没有Flag (意思是除上面四种类型外的其他情况,有可能是ACK也有可能是URG)

目的端口:目的的端口
序号和确认号:都是保证报文没有丢失
窗口:可靠性,报文发送效率

源端口:每个协议都会建立一个源端口 例如:
http 80 — tcp 80; https --SSL协议–TCP 443;UDp --DNS 53端口

TCPdump抓包工具常规过滤规则

基于ip地址进行过滤 host

tcpdump host ip地址
案例1:截获特定主机-220.181.38.148的主机收到的和发出的所有的数据包tcpdump host 220.181.38.148

解释: host 220.181.38.148,指明220.181.38.148是一台主机,如果你非常明确关心的是哪个主机的收发报文,那么就可以直接过滤这个主机的数据包。host 后面加主机的IP地址,就可以只抓取这个主机的所有数据包,其他主机的数据包就会被过滤掉。

案例2:获取目的地址是220.181.38.148的报文tcpdump dst 220.181.38.148

解释: dst指的是目的地址;这个是确定传输方向的关键字,src源;dst目的

基于网段进行过滤 net

案例3:截获特定网段-192.168.10.0/24的主机收到的和发出的所有的数据包tcpdump net 192.168.10.0/24

解释: net 192.168.10.0/24,指明192.168.10.0/24网段,可以直接过滤这个网段的数据包网段同样可以再细分为源网段和目标网段
$tcpdump src net 192.168
$tcpdump dst net 192.168

基于端口进行过滤port

案例3:获取特定端口-比如http的包,使用如下命令:tcpdump tcp port 80

解释: port 80指明端口80,只会抓取这个80端口的数据包;加上具体某个协议的某个端口,就可以更加精确的捕获对应的业务的数据报文了。如上,就会只抓取TCP协议的80端口的数据报
也就是http 协议的数据报文。
tcpdump src port 80 / tcpdump dst port 80
如果你想要同时指定两个端口你可以这样写: tcpdump port 80 or port 22 、 tcpdump port 80 or 22;
如果你的想抓取的不再是一两个端口,而是一个范围,一个一个指定就非常麻烦了,此时你可以这样指定一个端口段。tcpdump portrange 8000-8080
tcpdump src portrange 8000-8080tcpdump dst portrange 8000-8080
对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号:比如http == 80, https == 443等tcpdump tcp port http

基于协议进行过滤: protocal

案例4:获取ICMP协议的报文tcpdump icmp
解释:标明要抓取的协议报文,一般常用的比如ip, ip6, arp, icmp,tcp,udp等
注意: http,dns, https,ssh等这些应用层的协议,不能直接这样写,需要写成:tcpdump port http
或者tcpdump port 53 (DNS)

Tcpdump的常用参数

查看所有参数

tcpdump -h

1、-i #指定监听网络接口tcpdump -i eth0
默认监听在第一块网卡上,监听所有经过此网卡通过的数据包;但是我们可能关心的数据并不是eth0的接口,这时就需要指定端口进行数据包的捕获。
在tcpdump 后面加一个-i的参数,后面跟具体需要捕获的接口名称,就可以抓取经过这个具体接口的所有数据包。tcpdump -i any 监听所有的网卡接口、用来查看是否有网络流量
2、-w #将捕获到的信息保存到文件中,且不分析和打印在屏幕tcpdump -i eth0 -w tt
报文打印在shell里会太多且不方便查看,我们可以保存成文件;然后通过xftp导出到本地,可以详细查看。扩展:导出的文件可以设置为cap或者pcap的格式,可以直接用wireshark工具打开;
可以用wireshark工具分析报文具体信息!
3、-r #从文件中读取数据,读取后,我们照样可以使用上述的过滤器语法进行过滤分析。
tcpdump -r tt.pcap
4、-n:不把ip转化成域名,直接显示ip,避免执行DNS lookups的过程,速度会快很多
-nn:不把协议和端口号转化成名字,速度也会快很多。
-N:不打印出host的域名部分,比如,如果设置了此选现,tcpdump将会打印’nic’而不是’nic.ddn.mil’.
5、-t:在每行的输出中不输出时间
-tt:在每行的输出中会输出时间戳
-ttt:输出每两行打印的时间间隔(以毫秒为单位)
-tttt:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)
6、-v:产生详细的输出.比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。
-w:产生比-v更详细的输出.比如NFS回应包中的附加域将会被打印,SMB数据包也会被完全解码。
-vwv:产生比-vv更详细的输出。比如telent时所使用的SB,SE选项将会被打印,如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来

7、-c #指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump,停止抓包tcpdump -c 20 -w tt.pcap
解释:抓满20个报文之后,就停止tcpdump抓包。
8、-C #与-w FILE选项配合使用。该选项使得tcpdump在把原始数据包直接保存到文件中之前,检查此文件大小是否超过file-size。如果超过了,将关闭此文件,另创一个文件继续保存原始数据包。新创建的文件名与-w选项指定的文件名一致,但文件名后多了一个数字,该数字会从1开始随着新创建文件的增多而增加。file-size的单位是百万字节(这里指1,000,000个字节,并非1,048,576个字节)
tcpdump -C 1 -W 3 -w abc 指定一个单位后(1MB)就换文件,最多写3个文件,名字是abc0 , abc1, abc2
7.-Q:选择是入方向还是出方向的数据包,可选项有: in, out, inout,也可以使用
–direction=[direction]
– tcpdump -Qin
– tcpdump -Qout
– tcpdump -Qinout
-q:简洁地打印输出。即打印很少的协议相关信息,从而输出行都比较简短.
-D:显示所有可用网络接口的列表
-L:列出网络接口的已知数据链路。

8、-s
#指定每个包捕获的长度、单位是byte,而不是默认的262144bytes;如果超过了设定的大小限制,包就会被阶段,而在打印行出现[proto]这种标识,这个proto就是被截断的报文的协议名字。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好(-s0使用默认长度262144)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanlnan抱抱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值