Linux 之 最简明的 Tcpdump 抓包入门指南

简介

今天要给大家介绍的一个 Unix 下的一个 网络数据采集分析工具,也就是我们常说的抓包工具。
与它功能类似的工具有 wireshark ,不同的是,wireshark 有图形化界面,而 tcpdump 则只有命令行。
可以用wireshark 读取tcpdump 生成的pcap文件,用wireshark的图形化界面分析tcpdump 结果数据。

网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。

 tcpdump - dump traffic on a network 

一、例子

1.1 不指定任何参数

监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。

tcpdump
1.2 监听特定网卡
tcpdump -i en0
1.3 监听特定主机

示例:监听本机跟主机182.254.38.55之间往来的通信包。

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

tcpdump host 182.254.38.55
1.4 特定来源、目标地址的通信
  1. 特定来源
tcpdump src host hostname
  1. 特定目标地址
tcpdump dst host hostname
  1. 如果不指定 src 跟 dst,那么来源 或者目标 是hostname的通信都会被监听
tcpdump host hostname
1.5 特定端口
tcpdump port 3000
1.6 监听TCP/UDP

服务器上不同服务分别用了TCP、UDP作为传输层,假如只想监听TCP的数据包

tcpdump tcp
1.7 来源主机+端口+TCP

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

tcpdump tcp port 22 and src host 123.207.116.169
1.8 监听特定主机之间的通信
tcpdump ip host 210.27.48.1 and 210.27.48.2

210.27.48.1 除了和 210.27.48.2 之外的主机之间的通信

tcpdump ip host 210.27.48.1 and ! 210.27.48.2
1.9 稍微详细点的例子
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

① tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
② -i eth1 : 只抓经过接口eth1的包
③ -t : 不显示时间戳
④ -s 0 :抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
⑤ -c 100 : 只抓取100个数据包
⑥ dstport ! 22 : 不抓取目标端口是22的数据包
⑦ src net 192.168.1.0/24 :数据包的源网络地址为192.168.1.0/24
⑧ -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

二、抓http包

TODO
2.1 限制抓包的数量

如下,抓到1000个包后,自动退出

tcpdump -c 1000
2.2 保存到本地

备注:tcpdump默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者tcpdump退出时,才会将输出写到本地磁盘

tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap

复制代码也可以加上-U强制立即写到本地磁盘(一般不建议,性能相对较差

三、实战例子

先看下面一个比较常见的部署方式,在服务器上部署了nodejs server,监听3000端口。nginx反向代理监听80端口,并将请求转发给nodejs server(127.0.0.1:3000)。

浏览器 -> nginx反向代理 -> nodejs server

3.1 问题:假设用户(183.14.132.117)访问浏览器,发现请求没有返回,该怎么排查呢?
  • 步骤一: 查看请求是否到达nodejs server -> 可通过日志查看。
  • 步骤二: 查看nginx是否将请求转发给nodejs server
 tcpdump port 8383

复制代码这时你会发现没有任何输出,即使nodejs server已经收到了请求。因为nginx转发到的地址是127.0.0.1,用的不是默认的interface,此时需要显示指定interface

tcpdump port 8383 -i lo

复制代码备注:配置nginx,让nginx带上请求侧的host,不然nodejs server无法获取 src host,也就是说,下面的监听是无效的,因为此时对于nodejs server来说,src host 都是 127.0.0.1

tcpdump port 8383 -i lo and src host 183.14.132.117
  • 步骤三:查看请求是否达到服务器
tcpdump -n tcp port 8383 -i lo and src host 183.14.132.117
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值