草庐IT

运维必备,Linux服务器抓包工具 tcpdump 示例详解

聆听世界的鱼 2023-03-28 原文

您是否正在尝试捕获数据包以分析网络上的流量?也许您是一名服务器管理员,遇到了问题并想要监控网络上传输的数据。无论情况如何,tcpdump Linux 实用程序都是您所需要的。

在本文中,我们将详细讨论 tcpdump 命令,以及一些有关如何在 Linux 系统上安装和使用 tcpdump 的指南。

什么是 tcpdump 命令?

Tcpdump 是一个强大的网络监控工具,它允许用户有效地过滤网络上的数据包和流量。您可以获得有关 TCP/IP 和网络上传输的数据包的详细信息。Tcpdump 是一个命令行实用程序,这意味着您可以在没有显示的 Linux 服务器上运行它。

系统管理员还可以将 tcpdump 实用程序与cron集成,以便自动执行各种任务,例如日志记录。由于其众多功能使其非常通用,因此 tcpdump 既可以用作故障排除工具,也可以用作安全工具。

如何在 Linux 上安装 tcpdump

虽然大多数时候您会发现 tcpdump 预装在您的系统上,但某些 Linux 发行版并未随附该软件包。因此,您可能必须在系统上手动安装该实用程序。

您可以使用which命令检查系统上是否安装了 tcpdump 。

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ which tcpdump

如果输出显示目录路径 ( /usr/bin/tcpdump ),则您的系统已安装该软件包。但是,如果没有,您可以使用系统上的默认包管理器轻松完成。

要在基于 Debian 的发行版(例如 Ubuntu)上安装 tcpdump:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo apt-get install tcpdump

在基于 Arch 的系统上,运行:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo pacman -S tcpdump
要在 Fedora、CentOS 和 RHEL 上安装 tcpdump 实用程序,请发出以下命令:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo dnf install tcpdump
请注意,tcpdump 包需要libcap作为依赖项,因此请确保您也将其安装在系统上。

在 Linux 上捕获网络数据包的 Tcpdump 示例

现在您已经在 Linux 机器上成功安装了 tcpdump,是时候监控一些数据包了。由于 tcpdump 需要超级用户权限才能执行大多数操作,因此您必须将sudo添加到您的命令中。

1.列出所有网络接口

要检查哪些网络接口可用于捕获,请在 tcpdump 命令中使用-D标志。

tcpdump -D
将--list-interfaces标志作为参数传递将返回相同的输出。

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --list-interfaces
输出将是系统上存在的所有网络接口的列表。

获得网络接口列表后,是时候通过捕获系统上的数据包来监控网络了。尽管您可以指定要使用的接口,但any参数命令 tcpdump 使用任何活动接口捕获网络数据包。

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any
系统将显示以下输出。

2. tcpdump 输出格式

从第三行开始,输出的每一行表示 tcpdump 捕获的特定数据包。这是单个数据包的输出的样子。

16:23:44.545056 eth0  Out IP linuxmi.40016 > 120.253.255.102.https: Flags [P.], seq 1007723650:1007723689, ack 1485464298, win 62780, length 39

请记住,并非所有数据包都以这种方式捕获,但这是大多数数据包遵循的一般格式。

输出包含以下信息。

  • 接收数据包的时间戳
  • 接口名称
  • 包流
  • 网络协议名称
  • IP 地址和端口详细信息
  • TCP 标志
  • 数据包中数据的序号
  • 确认数据
  • 窗口大小
  • 数据包长度
第一个字段 ( 16:23:44.545056 ) 显示系统发送或接收数据包时的时间戳。记录的时间是从您系统的本地时间中提取的。

第二个和第三个字段表示使用的接口和数据包的流向。在上面的代码片段中,eth0是无线接口的名称,Out是数据包流。

第四个字段包括与网络协议名称有关的信息。通常,您会发现两种协议- IP和IP6,其中 IP 表示 IPV4,IP6 表示 IPV6。

下一个字段包含 IP 地址或源和目标系统的名称。IP 地址后跟端口号。

输出中的第六个字段由 TCP 标志组成。tcpdump 输出中使用了各种标志。

标志名称

描述

SYN

S

连接开始

FIN

F

连接完成

PUSH

O

数据被推送

RST

R

连接已重置

ACK

.

确认

输出还可以包含多个 TCP 标志的组合。例如,FLAG [f.]代表一个 FIN-ACK 包。

在输出片段中进一步移动,下一个字段包含数据包中数据的序列号 ( seq 1007723650:1007723689 )。第一个数据包总是有一个正整数值,随后的数据包使用相对序列号来改善数据流。

下一个字段包含确认号(ack 1485464298)或简单的确认号。在发送方机器中捕获的数据包有 1485464298 作为确认号。在接收端,Ack 号是下一个数据包的值。

输出中的第九个字段包含窗口大小(win 62780),即接收缓冲区中可用的字节数。窗口大小后面还有几个其他字段,包括最大段大小 (MSS)。

最后一个字段(length 39)包含 tcpdump 捕获的整个数据包的长度。

3.限制抓包数

第一次运行 tcpdump 命令时,您可能会注意到系统会继续捕获网络数据包,直到您传递中断信号。您可以通过使用-c标志预先指定要捕获的数据包计数来覆盖此默认行为。

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 3
上述命令将从任何活动的网络接口捕获3个数据包。

4.根据字段过滤数据包

当您对问题进行故障排除时,在终端上获取大量文本输出并不会使其变得更容易。这就是 tcpdump 中的过滤功能发挥作用的地方。您可以根据主机、协议、端口号等各种字段过滤数据包。

要仅捕获 TCP 数据包,请键入:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 5 tcp
同样,如果要使用端口号过滤输出:

┌──(linuxmi㉿linuxmi)-[~/www.linuxmi.com]
└─$ sudo tcpdump --interface any -c 5 port 50
上述命令只会检索通过指定端口传输的数据包。

要获取特定主机的数据包详细信息:

tcpdump --interface any -c 5 host 112.123.13.145
如果要过滤特定主机发送或接收的数据包,请在命令中使用src或dst参数。

tcpdump --interface any -c 5 src 112.123.13.145
tcpdump --interface any -c 5 dst 112.123.13.145
您还可以使用逻辑运算符and和or将两个或多个表达式组合在一起。例如,要获取属于源 IP 112.123.13.145的数据包并使用端口80:

tcpdump --interface any -c 10 src 112.123.13.145 and port 80
可以使用括号将复杂表达式组合在一起,如下所示:

tcpdump --interface any -c 10 "(src 112.123.13.145 or src 234.231.23.
234) and (port 45 or port 80)"

5.查看包的内容

您可以在 tcpdump 命令中使用-A和-x标志来分析网络数据包的内容。-A 标志代表ASCII格式,-x表示十六进制格式。

查看系统捕获的下一个网络数据包的内容:

tcpdump --interface any -c 1 -A
tcpdump --interface any -c 1 -x

6. 将捕获数据保存到文件

如果您想保存捕获数据以供参考,tcpdump 可以帮助您。只需使用默认命令传递-w标志即可将输出写入文件而不是在屏幕上显示。

tcpdump --interface any -c 10 -w data.pcap
.pcap文件扩展名代表数据包捕获数据。您还可以使用-v标志以详细模式发出上述命令。

tcpdump --interface any -c 10 -w data.pcap -v
要使用 tcpdump 读取.pcap文件,请使用-r标志,后跟文件路径。-r代表读取。

tcpdump -r data.pcap
您还可以从文件中保存的数据包数据中过滤网络数据包。

tcpdump -r data.pcap port 80

在 Linux 上监控网络流量

如果您被分配了管理 Linux 服务器的任务,那么 tcpdump 命令是一个很好的工具,可以包含在您的武器库中。您可以通过实时捕获网络上传输的数据包轻松解决与网络相关的问题。

但在此之前,您的设备必须连接到互联网。对于 Linux 初学者来说,即使通过命令行连接 Wi-Fi 也可能有点挑战。但是,如果您使用正确的工具,那就轻而易举了。

有关运维必备,Linux服务器抓包工具 tcpdump 示例详解的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  6. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  7. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  8. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  9. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  10. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

随机推荐