网络IO监控:tcpdump的使用技巧

文摘   2024-11-26 09:00   广东  

点击上方【蓝字】关注博主

 tcpdump是一个命令行工具,用于捕获和分析网络流量,特别适合快速抓取指定数据包和进行实时监控。本文旨在探讨如何高效结合使用tcpdump实现更全面的网络监控。

01

tcpdump概述

tcpdump是网络状况分析和跟踪工具,是可以用来抓包的实用命令,使用前需要对TCP/IP有所熟悉,因为过滤使用的信息都是TCP/IP格式。

在大多数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 网站免费下载。

02

捕获及停止条件


选项说明
-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


03

表达式

原语:名称或数字,以及描述它的多个限定词组成。

限定词:

选项说明
Type设置数字或名称所指示的类型,支持 host、port、net(设定子网)、portrange(设置端口范围)。例如 host www.baidu.comnet 192.168.0.0 mask 等价于net 192.168.0.0/24portrange 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


04

文件操作


参数说明
-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

strftime参考:


格式符说明
%a星期几的简写
%A星期几的全称
%b月份的简写
%B月份的全称
%c标准的日期和时间串
%C年份的后两位数字
%d十进制表示的每月的第几天
%D月/天/年
%e在两字符域中,十进制表示的每月的第几天
%F年-月-日
%g年份的后两位数字,基于周的年
%G年份,基于周的年
%h简写的月份名
%H24小时制的小时
%I12小时制的小时
%j十进制表示的每年的第几天
%m十进制表示的月份
%M十进制表示的分钟数
%n新行符
%p本地的AM或PM的等价显示
%r12小时的时间
%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时区名称(空字符表示未获取)
%%百分号
05

输出时间格式


参数说明
-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
06

分析信息详情


参数说明
-e显示数据链路层头部
-q不显示传输层信息
-v显示网络层头部更多信息,如TTL、id等
-n显示IP地址、数字端口代替hostname等
-STCP信息以绝对序列号代替相对序列号
-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
07

其他技巧

显示来源IP或者目的IP为192.168.1.102的网络通信:

sudo tcpdump -i eth0 host 192.168.1.102

显示去往102.168.1.102的所有会话信息:

tcpdump -i eth1 'dst 192.168.1.102 and (port 21 or 20)'

显示去往102.168.1.102的所有会话信息:

tcpdump -i eth0 'dst 192.168.1.102 and tcp and port 8080'


除了 Boss直聘,在找工作的朋友也可以试试【万码优才】~岗位多,hr回复快,只需要完善简历找到心仪的岗位投递即可 !
还在BOSS直聘hr已读不回?!试试这个宝藏小程序!

08

总结

本文详细介绍了tcpdump的基本使用技巧,涵盖了抓包、过滤、文件操作、输出格式和分析信息等方面。通过结合tcpdump的实时抓包能力与Wireshark的深入分析功能,可以有效地进行网络监控,快速识别和解决网络问题,提高网络安全性和性能。 


公众号: Lion 莱恩呀

微信号: 关注获取

扫码关注 了解更多内容

点个 在看 你最好看

Lion 莱恩呀
专注分享高性能服务器后台开发技术知识,涵盖多个领域,包括C/C++、Linux、网络协议、设计模式、中间件、云原生、数据库、分布式架构等。目标是通过理论与代码实践的结合,让世界上看似难以掌握的技术变得易于理解与掌握。
 最新文章