点击上方【蓝字】关注博主
“ tcpdump是一个命令行工具,用于捕获和分析网络流量,特别适合快速抓取指定数据包和进行实时监控。本文旨在探讨如何高效结合使用tcpdump实现更全面的网络监控。”
tcpdump概述
在大多数Linux发行版中,可以通过包管理器安装tcpdump。例如:
sudo apt-get install tcpdump # Ubuntu/Debian
sudo yum install tcpdump # CentOS/RedHat
在Windows上,可以通过WinDump(https://www.winpcap.org/windump/,tcpdump的Windows版本)进行安装。WinDump 与 tcpdump 完全兼容,可用于根据各种复杂规则监视、诊断和保存到磁盘网络流量。它可以在 Windows 95、98、ME、NT、2000、XP、2003 和 Vista 下运行。WinDump 使用 WinPcap 库和驱动程序进行捕获,这些库和驱动程序可从 WinPcap.org 网站免费下载。
捕获及停止条件
选项 | 说明 |
---|---|
-D | 列举所有网卡设备 |
-i | 选择网卡设备 |
-c | 抓取多少条报文 |
--time-stamp-precision | 指定捕获时的时间精度,默认微秒(micro),可选纳秒(nano) |
-s | 指定每条报文的最大字节数,默认262144字节 |
示例:
tcpdump # 抓取各种报文
tcpdump -D # 显示网卡设备
tcpdump -i eth0 # 抓取eth0的报文
tcpdump -i lo # 抓取回环报文
tcpdump -i eth0 -c 2 # 抓取2条报文后退出
tcpdump -i eth0 -c 2 --time-stamp-precision=nano # 按纳秒
telnet 127.0.0.1 80 # 可以通过telnet 上去测试抓包,此时应用抓取lo
表达式
选项 | 说明 |
---|---|
Type | 设置数字或名称所指示的类型,支持 host、port、net(设定子网)、portrange(设置端口范围)。例如 host www.baidu.com ,net 192.168.0.0 mask 等价于net 192.168.0.0/24 ,portrange 6000-8000 。 |
Dir | 设置网络出入方向,支持src、dst、src or dst、src and dst、ra、ta、addr1、addr2、addr3、addr4(仅对IEEE 802.11 Wireless Lan有效) 。例如 dst port 80 |
Proto | 指定协议类型,支持ethr、fddi、tr、wlan、ip、ip6、arp、tcp、udp等。 |
运算符 | 说明 |
---|---|
&& 或 and | 与 |
|| 或 or | 或 |
! 或 not | 非 |
src or dst portrange 6000-8000 && tcp
tcpdump -i eth0 -c 10 host www.myServers.com and port 80
curl www.myServers.com
文件操作
参数 | 说明 |
---|---|
-w | 输出结果至文件 |
-C | 限制输入文件的大小,超出后以数字后缀递增,单位为1,000,000字节 |
-W | 指定输出文件的最大数量,到达后重新复写第一个文件 |
-G | 指定每个N秒就重新输出至新文件,-w 参数应基于strftime 指定文件名 |
-r | 读取一个抓包文件 |
-V | 将待读取的多个文件名写入一个文件,通过读取该文件同时读取多个文件 |
tcpdump -c 2 -w a # 保存2个包到a文件
tcpdump -r a # 读取a文件显示
tcpdump -c 2 -w b # 保存2个包到b文件
vim c 文件 # 把逐行写入a、b并保存
tcpdump -V c # 读取多个文件
tcpdump -C 1 -W 3 abc # 限制文件大小为1,000,000字节,输出文件最大数量为3
tcpdump -G 3 -w def%M-%S
格式符 | 说明 |
---|---|
%a | 星期几的简写 |
%A | 星期几的全称 |
%b | 月份的简写 |
%B | 月份的全称 |
%c | 标准的日期和时间串 |
%C | 年份的后两位数字 |
%d | 十进制表示的每月的第几天 |
%D | 月/天/年 |
%e | 在两字符域中,十进制表示的每月的第几天 |
%F | 年-月-日 |
%g | 年份的后两位数字,基于周的年 |
%G | 年份,基于周的年 |
%h | 简写的月份名 |
%H | 24小时制的小时 |
%I | 12小时制的小时 |
%j | 十进制表示的每年的第几天 |
%m | 十进制表示的月份 |
%M | 十进制表示的分钟数 |
%n | 新行符 |
%p | 本地的AM或PM的等价显示 |
%r | 12小时的时间 |
%R | 显示小时和分钟:hh:mm |
%S | 十进制的秒数 |
%t | 水平制表符 |
%T | 显示时分秒:hh:mm:ss |
%u | 每周的第几天(星期一为第一天),值从0到6,星期一为0 |
%U | 每年的第几周(星期日为第一天),值从0到53 |
%V | 每年的第几周,使用基于周的年 |
%w | 十进制表示的星期几(星期天为0),值从0到6 |
%W | 每年的第几周(星期一为第一天),值从0到53 |
%x | 标准的日期串 |
%X | 标准的时间串 |
%y | 不带世纪的十进制年份(0到99) |
%Y | 带世纪部分的十进制年份 |
%z , %Z | 时区名称(空字符表示未获取) |
%% | 百分号 |
输出时间格式
参数 | 说明 |
---|---|
-t | 不显示时间戳 |
-tt | 自1970年1月1日0点至今的秒数 |
-ttt | 显示邻近两行报文间经过的秒数 |
-tttt | 带日期的完整时间 |
-ttttt | 自第一个抓取的报文起经历的秒数 |
sudo tcpdump -c 5 -t
sudo tcpdump -c 5 -tt
sudo tcpdump -c 5 -ttt
sudo tcpdump -c 5 -tttt
sudo tcpdump -c 5 -ttttt
分析信息详情
参数 | 说明 |
---|---|
-e | 显示数据链路层头部 |
-q | 不显示传输层信息 |
-v | 显示网络层头部更多信息,如TTL、id等 |
-n | 显示IP地址、数字端口代替hostname等 |
-S | TCP信息以绝对序列号代替相对序列号 |
-A | 以ASCII方式显示报文内容,适用于HTTP分析 |
-x | 以16进制方式显示报文内容,不显示数据链路层 |
-xx | 以16进制方式显示报文内容,显示数据链路层 |
-X | 同时以16进制及ASCII方式显示报文内容,不显示数据链路层 |
-XX | 同时以16进制及ASCII方式显示报文内容,显示数据链路层 |
sudo tcpdump -r a -e
sudo tcpdump -r a -q
sudo tcpdump -r a -v
sudo tcpdump -r a -n
sudo tcpdump -r a -S
sudo tcpdump -r a -A
sudo tcpdump -r a -x
sudo tcpdump -r a -xx
sudo tcpdump -r a -X
sudo tcpdump -r a -XX
其他技巧
sudo tcpdump -i eth0 host 192.168.1.102
tcpdump -i eth1 'dst 192.168.1.102 and (port 21 or 20)'
tcpdump -i eth0 'dst 192.168.1.102 and tcp and port 8080'
总结
本文详细介绍了tcpdump的基本使用技巧,涵盖了抓包、过滤、文件操作、输出格式和分析信息等方面。通过结合tcpdump的实时抓包能力与Wireshark的深入分析功能,可以有效地进行网络监控,快速识别和解决网络问题,提高网络安全性和性能。
公众号: Lion 莱恩呀
微信号: 关注获取
扫码关注 了解更多内容
点个 在看 你最好看