tcpdump详解

tcpdump是一款 网络数据采集分析工具、嗅探工具,也就是Linux中的网络抓包工具,类似与windows中的wireshark等工具,但是wireshark有图形化界面,而tcpdump 则只有命令行。

语法

tcpdump (选项)

选项

-a:尝试将网络和广播地址转换成名称
-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作
-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出
-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出
-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出
-e:在每列倾倒资料上显示连接层级的文件头
-f:用数字显示网际网络地址
-F<表达文件>:指定内含表达方式的文件
-i<网络界面>:使用指定的网络截面送出数据包
-l:使用标准输出列的缓冲区
-n:不把主机的网络地址转换成名字
-N:不列出域名
-O:不将数据包编码最佳化
-p:不让网络界面进入混杂模式
-q :快速输出,仅列出少数的传输协议信息
-r<数据包文件>:从指定的文件读取数据包数据
-s<数据包大小>:设置每个数据包的大小
-S:用绝对而非相对数值列出TCP关联数
-t:在每列倾倒资料上不显示时间戳记
-tt: 在每列倾倒资料上显示未经格式化的时间戳记
-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型
-v:详细显示指令执行过程
-vv:更详细显示指令执行过程
-x:用十六进制字码列出数据包资料
-w<数据包文件>:把数据包数据写入指定的文件

输出内容详解

21:45:11.363006 IP 192.168.237.128:15605 > 192.168.237.1.11671: Flags [P.], seq 27004:27152, ack 37, win 261, length 148

第一列:时分秒毫秒 21:45:11.363006

第二列:网络协议 IP

第三列:发送方的ip地址+端口号,其中 192.168.237.128 是 ip,而 15605 是端口号

第四列:箭头 >, 表示数据流向

第五列:接收方的ip地址+端口号,其中 192.168.237.1 是 ip,而 11671 是端口号

第六列:符号(:),无特殊意义

第七列:数据包内容,包括Flags 标识符,seq 号,ack 号,win 窗口,数据长度 length,其中 [P.] 表示 PUSH 标志位为 1

Flags 标识符

[S] :SYN(开始连接)

[P] :PSH(推送数据)

[F] :FIN (结束连接)

[R] :RST(重置连接)

[.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG) 

常用格式

1、指定监视某个网络接口(网卡)的数据包(Linux(centos7)默认监控的是ens33)

tcpdump -i ens36

2、根据IP地址来过滤

host        指定IP地址过滤

src          指定源IP过滤

 dst         地址目标IP过滤

tcpdump -i ens36 host 192.168.2.20   # 指定IP
tcpdump -i ens36 src 192.168.2.20    # 指定源IP
tcpdump -i ens36 dst 192.168.2.1     # 指定目的IP

3、根据网段进行过滤

 net                指定一个网段

src net           指定源网段

dst net           指定目的网段

tcpdump -i ens36 net 192.168.2.0/24       # 指定网段
tcpdump -i ens36 src net 192.168.2.0/24    # 指定源网段
tcpdump -i ens36 dst net 192.168.2.0/24    # 指定目标网段

 4、根据端口进行过滤

port 端口号                               直接指定一个端口

src port 端口号                         指定源端口

dst port 端口号                         指定目的端口

port 端口号 or port 端口号       同时指定两个端口号,可以使用多个 or 来指定多个端口号(可以简写为      port 端口号 or 端口号)

port 端口号-端口号                  可以指定一段连续的端口号

port  协议类型                          有些协议有默认的端口号,可以直接使用协议名,而不用写具体端口号

tcpdump -i ens36 port 80            直接指定一个端口号
tcpdump -i ens36 src port 80        指定源端口
tcpdump -i ens36 dst port 80        指定目的端口
tcpdump -i ens36 port 80 port 8080  同时指定多个端口
tcpdump -i ens36 port 80 or 8080    
tcpdump -i ens36 port 8000-8080    指定一段端口号
tcpdump -i ens36 port http         指定有默认端口的协议

5、 根据协议过滤

常见的网络协议有:tcp, udp, icmp, http, ip,ipv6 等

tcpdump  protocol

protocol 可选值:ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui

# 查看icmp包
tcpdump icmp

 6、将结果输入到文件

使用 tcpdump 工具抓到包后,往往需要再借助其他的工具进行分析,比如常见的 wireshark 

而要使用wireshark ,我们得将 tcpdump 抓到的包数据生成到文件中,最后再使用 wireshark 打开它即可

使用 -w 参数后接一个以 .pcap 后缀命令的文件名,就可以将 tcpdump 抓到的数据保存到文件中

 tcpdump  icmp  -w  test.pcap

 7、从文件中读取数据包

使用 -w 是写入数据到文件,而使用 -r 是从文件中读取数据

读取后,我们照样可以使用上述的过滤器语法进行过滤分析

tcpdump icmp -r test.pcap

8、过滤规则组合

        a、多条件组合过滤

and:所有的条件都需要满足,也可以表示为 &&
or:只要有一个条件满足就可以,也可以表示为 ||
not:取反,也可以使用 ! 

# 抓取一个来自192.168.237.136,发往任意主机的8080端口的包
tcpdump src 192.168.237.136 and dst port 8080
# 当你在使用多个过滤器进行组合时,有可能需要用到括号(可以用来提高优先级),而括号在 shell 中是特殊符号,因为你需要使用引号将其包含
tcpdump 'src 192.168.237.136 and (dst port 8080 or 22)'

        b、单个过滤器里,常常会判断一条件是否成立

=:判断二者相等
==:判断二者相等
!=:判断二者不相等

当你使用这些符号的时候,tcpdump 还提供了一些关键字的接口来方便我们进行判断,比如

if:表示网卡接口名、
proc:表示进程名
pid:表示进程 id
svc:表示 service class
dir:表示方向,in 和 out
eproc:表示 effective process name
epid:表示 effective process ID

# 过滤来自进程名为 nc 发出的流经 en0 网卡的数据包,或者不流经 en0 的入方向数据包
tcpdump "( if=en0 and proc =nc ) || (if != en0 and dir=in)"

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

‘༺༃修༒罗༃༻’

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

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

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

打赏作者

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

抵扣说明:

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

余额充值