Linux tcpdump抓包命令详解(含安装教程)
nanshan 2024-10-29 14:43 34 浏览 0 评论
请关注本头条号,每天坚持更新原创干货技术文章。
如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习
1. 前言
对网络工程师和系统工程师而言,如何使用tcpdump命令分析网络流量是一个必须熟悉掌握的任务。tcpdump 是一个运行在命令行下的强大嗅探工具,我们一般俗称抓包工具或者软件。如果你对Windows上的wireshark软件熟悉,那么你可以很快对tcpdump上手,区别在于Windows wireshark使用的是图形界面,而tcpdump是命令行界面。它允许用户拦截和显示发送或收到过网络连接到该计算机的TCP/IP和其他数据包。
tcpdump 是一个在BSD许可证下发布的自由软件。tcpdump 适用于大多数的类Unix系统 操作系统:包括Linux、Solaris、BSD、Mac OS X、HP-UX和AIX 等等。在这些系统中,tcpdump 需要使用libpcap这个捕捉数据的库。其在Windows下的版本称为WinDump;它需要WinPcap驱动,相当于在Linux平台下的libpcap.
2. Linux安装tcpdump
Ubuntu 安装tcpdump
oucanrong@zcwyou:~$ sudo apt install -y tcpdump
CentOS安装tcpdump
[root@centos7 ~]# yum -y install tcpdump
Running transaction
正在安装 : 14:libpcap-1.5.3-11.el7.x86_64 1/2
正在安装 : 14:tcpdump-4.9.2-3.el7.x86_64 2/2
验证中 : 14:tcpdump-4.9.2-3.el7.x86_64 1/2
验证中 : 14:libpcap-1.5.3-11.el7.x86_64 2/2
已安装:
tcpdump.x86_64 14:4.9.2-3.el7
作为依赖被安装:
libpcap.x86_64 14:1.5.3-11.el7
完毕!
CentOS安装tcpdump
tcpdump 依赖于 libpcap,该库文件用于捕获网络数据包。如果该库文件也没有安装,系统会根据依赖关系自动安装它。
检查tcpdump运行的位置
[root@centos7 ~]# which tcpdump
/usr/sbin/tcpdump
现在已经可以正常使用tcpdump了。
3. 试试使用tcpdump抓包
如果你没有使用root身份登录系统,请使用sudo获取root权限。
比如Ubuntu系统,一般使用普通账号登录,需要加sudo
查看可以被tcpdump使用的网络接口:
oucanrong@zcwyou:~$ sudo tcpdump -D
[sudo] oucanrong 的密码:
1.vmnet1 [Up, Running]
2.vmnet8 [Up, Running]
3.enp0s25 [Up, Running]
4.any (Pseudo-device that captures on all interfaces) [Up, Running]
5.lo [Up, Running, Loopback]
6.wlp3s0 [Up]
7.bluetooth0 (Bluetooth adapter number 0)
8.nflog (Linux netfilter log (NFLOG) interface)
9.nfqueue (Linux netfilter queue (NFQUEUE) interface)
10.usbmon1 (USB bus number 1)
11.usbmon2 (USB bus number 2)
12.usbmon3 (USB bus number 3)
13.usbmon4 (USB bus number 4)
如果使用root身份登录,不需要加sudo
[root@centos7 ~]# tcpdump -D
1.bluetooth0 (Bluetooth adapter number 0)
2.nflog (Linux netfilter log (NFLOG) interface)
3.nfqueue (Linux netfilter queue (NFQUEUE) interface)
4.usbmon1 (USB bus number 1)
5.ens33
6.any (Pseudo-device that captures on all interfaces)
7.lo [Loopback]
查看可以被tcpdump使用的网络接口
tcpdump对任意接口进行抓包:
[root@centos7 ~]# tcpdump -i any
tcpdump对任意接口进行抓包
tcpdump 会持续抓包直到收到中断信号。你可以按 Ctrl+C 来停止抓包。
在上面的示例中,由于我是通过 ssh 连接到服务器,所以 tcpdump 也捕获了所有这类数据包。
4. 使用-c选项限制 tcpdump 抓包的数量
抓取5个包后自动停止
[root@centos7 ~]# tcpdump -i any -c 5
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
18:07:53.506327 IP centos7.ssh > zcwyou.59564: Flags [P.], seq 2122710787:2122710983, ack 2546646634, win 314, options [nop,nop,TS val 990878 ecr 4069694757], length 196
18:07:53.506506 IP zcwyou.59564 > centos7.ssh: Flags [.], ack 196, win 1444, options [nop,nop,TS val 4069694779 ecr 990878], length 0
18:07:53.506974 ARP, Request who-has gateway tell centos7, length 28
18:07:53.507127 ARP, Reply gateway is-at 00:50:56:ed:46:5b (oui Unknown), length 46
18:07:53.507134 IP centos7.49437 > gateway.domain: 24983+ PTR? 1.87.16.172.in-addr.arpa. (42)
5 packets captured
12 packets received by filter
0 packets dropped by kernel
tcpdump 在抓取 5 个数据包后自动停止了抓包。这在有些场景中十分有用 —— 比如你只需要抓取少量的数据包用于分析。当我们需要使用过滤规则抓取特定的数据包时,-c 的作用就十分突出了。
5. 指定抓取特定IP和特定端口
只抓取端口为22的流量,抓取5个后停止
[root@centos7 ~]# tcpdump -i any -c5 port 22
抓取网络接口ens33,IP地址为172.16.87.137,端口22的流量。
[root@centos7 ~]# tcpdump -i ens33 host 172.16.87.137 and port 22
在源 IP 和目的 IP 之后,可以看到是 TCP 报文标记段 Flags [P.]。该字段通常取值如下:
值 标志类型 描述
S SYN Connection Start
F FIN Connection Finish
P PUSH Data push
R RST Connection reset
. ACK Acknowledgment
使用!符号排除特定条件,
比如:不抓取目标端口是22的数据包
dst port ! 22
比如:不抓取目标端口是80的数据包
src port ! 80
6. 根据协议过滤
在命令中指定协议便可以按照协议类型来筛选数据包。比方说用如下命令只要抓取 ICMP 报文:
[root@centos7 ~]# tcpdump -i any -c5 icmp
在某台电脑上ping这台Linux服务器
oucanrong@zcwyou:~$ ping centos7
使用TCPdump抓取 ICMP 报文
抓取任意接口,IP地址为172.16.87.137,抓取5个包后自动停止。
-n 选项显示 IP 地址,-nn 选项显示端口号:
[root@centos7 ~]# tcpdump -i any -c5 -nn host 172.16.87.137
使用TCPdump抓取特定IP流量
抓取特定端口的流量:
[root@centos7 ~]# tcpdump -i any -c5 -nn port 80
使用src选项指定源IP地址192.168.77.98:
-n 选项显示 IP 地址,-nn 选项显示端口号:
[root@centos7 ~]# tcpdump -i any -c5 -nn src 192.168.77.98
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
使用dst选项指定目标IP地址192.168.88.88:
[root@centos7 ~]# tcpdump -i any -c5 -nn dst 192.168.88.88
7. 根据多条件抓取待定数据包
你可以使用多条件组合来抓取指定的数据包,使用 and 以及 or 逻辑操作符来创建过滤规则。例如,筛选来自源 IP 地址 192.168.122.98 的 HTTP 数据包:
[root@centos7 ~]# tcpdump -i any -c5 -nn src 192.168.122.98 and port 80
你也可以使用括号来创建更为复杂的过滤规则,但在 shell 中请用引号包含你的过滤规则以防止被识别为 shell 表达式:
抓取端口为源IP为192.168.188.8或者123.123.123.123,抓取5个包后停止,
[root@centos7 ~]# tcpdump -i any -c5 -nn "port 80 and (src 192.168.188.8 or src 123.123.123.123)"
8. 显示数据包的详细信息
在以上的示例中,我们只按数据包头部的信息来建立规则筛选数据包,例如源地址、目的地址、端口号等等。有时我们需要分析网络连接问题,可能需要分析数据包中的内容来判断什么内容需要被发送、什么内容需要被接收等。tcpdump 提供了两个选项可以查看数据包内容,-X 以十六进制打印出数据报文内容,-A 打印数据报文的 ASCII 值。
[root@centos7 ~]# tcpdump -i any -c10 -nn -A port 80
9. 保存抓包内容
tcpdump 提供了保存抓包数据的功能以便后续分析数据包。例如,你可以结合Linux计划任务在指定时间抓包,然后早上起来再去分析它。同样当有很多数据包时,显示过快也不利于分析,将数据包保存下来,更有利于分析问题。
使用 -w 选项来保存数据包而不是在屏幕上显示出抓取的数据包:
抓取任意接口的流量,端口为80,抓取10个包后自动停止,保存文件为sample.pcap。
[root@centos7 ~]# tcpdump -i any -c10 -nn -w sample.pcap port 80
为什么要保存后缀名为.pcap,是因为它于wireshark兼容,也就是说,你可以使用wireshark图形界面版的软件打开它。
10. 查看抓包文件的内容
tcpdump 将数据包保存在二进制文件中,所以不能简单的用文本编辑器去打开它。使用 -r 选项参数来阅读该文件中的报文内容:
查看sample.pcap
[root@centos7 ~]# tcpdump -nn -r sample.pcap
这里不需要管理员权限 sudo 了,因为此刻并不是在网络接口处抓包。
根据特定条件查看抓包内容,比如只查看源IP为1.2.3.4的流量
[root@centos7 ~]# tcpdump -nn -r webserver.pcap src 1.2.3.4
当然,你可以在Windows上使用wireshark打开.pcap文件,也可以在Linux图形化界面上安装GUI版的wireshark
CentOS Gnome环境安装图形化的wireshark
[root@centos7 ~]# yum -y install wireshark-gnome
Ubuntu安装图形化的wireshark
oucanrong@zcwyou:~$ sudo apt install wireshark-gtk -y
11. 总结
相信以上教程已经可以帮助你使用强大的 tcpdump 抓包工具了。更多的内容请参考 tcpdump 网站以及它的帮助文件。
tcpdump 官网:
http://www.tcpdump.org/
tcpdump 命令行工具为分析网络流量数据包提供了强大的灵活性。如果需要使用图形工具来抓包请参考 Wireshark。
Wireshark官网地址:
https://www.wireshark.org/
你可以使用 tcpdump命令行在没有 GUI 界面的远程机器上抓包,然后下载到其他机器上使用 Wireshark 中分析数据包。
本文已同步至博客站:
https://www.linuxrumen.com/cyml/742.html
点击了解更多,快速查看更多的技术文章列表。
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)