百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux tcpdump抓包命令详解(含安装教程)

nanshan 2024-10-29 14:43 30 浏览 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

点击了解更多,快速查看更多的技术文章列表。

相关推荐

Let’s Encrypt免费搭建HTTPS网站

HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...

使用Nginx配置TCP负载均衡(nginx tcp负载)

假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...

Nginx负载均衡及支持HTTPS与申请免费SSL证书

背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...

HTTPS配置实战(https配置文件)

原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...

只有IP地址没有域名实现HTTPS访问方法

一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...

超详解:HTTPS及配置Django+HTTPS开发环境

众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...

Godaddy购买SSL之后Nginx配置流程以及各种错误的解决

完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...

Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)

一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...

阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问

参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...

你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具

NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...

从零开始搭建HTTPS服务(搭建https网站)

搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...

群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问

安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...

让网站快速升级HTTPS协议提高安全性

为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...

用Https方式访问Harbor-1.9版本(https访问流程)

我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...

如何启用 HTTPS 并配置免费的 SSL 证书

在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...

取消回复欢迎 发表评论: