当前位置: 首页 > 科技观察

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

时间:2023-03-18 21:12:33 科技观察

你是想抓包分析网络流量吗?也许您是一名服务器管理员,您遇到了问题并希望监控网络上的数据。无论情况如何,tcpdumpLinux实用程序都是您所需要的。在本文中,我们将详细讨论tcpdump命令以及有关如何在Linux系统上安装和使用tcpdump的一些指南。tcpdump命令是什么?Tcpdump是一个强大的网络监控工具,它允许用户高效地过滤网络上的数据包和流量。您可以获得有关TCP/IP和网络上传输的数据包的详细信息。Tcpdump是一个命令行实用程序,这意味着您可以在没有显示器的Linux服务器上运行它。系统管理员还可以将tcpdump实用程序与cron集成,以便自动执行各种任务,例如日志记录。由于它的许多特性使其非常通用,tcpdump可以用作故障排除工具和安全工具。如何在Linux上安装tcpdump虽然大多数时候您会发现tcpdump已预装在您的系统上,但某些Linux发行版并未随附该软件包。因此,您可能必须在系统上手动安装该实用程序。您可以使用which命令检查您的系统上是否安装了tcpdump。┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$whichtcpdump如果输出显示目录路径(/usr/bin/tcpdump),那么您的系统已经安装了软件包。但如果没有,您可以使用系统上的默认包管理器轻松完成。要在基于Debian的发行版(例如Ubuntu)上安装tcpdump:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$sudoapt-getinstalltcpdump在基于Arch的系统上,运行:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└──$sudopacman-Stcpdump要在Fedora、CentOS和RHEL上安装tcpdump实用程序,请发出以下命令:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$sudodnfinstalltcpdump请注意,tcpdump软件包需要libcap作为依赖项,因此请确保您的系统上也安装了它。在Linux上捕获网络数据包的Tcpdump示例现在您已经在Linux机器上成功安装了tcpdump,是时候监视一些数据包了。由于tcpdump需要超级用户权限才能执行大多数操作,因此您必须将sudo添加到命令中。1.列出所有网络接口要检查哪些网络接口可用于捕获,请在tcpdump命令中使用-D标志。tcpdump-D传递--list-interfaces标志作为参数返回相同的输出。┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$sudotcpdump--list-interfaces输出将是系统上存在的所有网络接口的列表。有了网络接口列表后,就可以通过捕获系统上的数据包来监控网络了。虽然您可以指定使用哪个接口,但任何参数命令tcpdump都会使用任何活动接口捕获网络数据包。┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└──$sudotcpdump--interfaceany系统会显示如下输出。2、tcpdump输出格式从第三行开始,每行输出代表tcpdump捕获的一个特定数据包。这是单个数据包的输出。16:23:44.545056eth0OutIPlinuxmi.40016>120.253.255.102.https:Flags[P.],seq1007723650:1007723689,ack1485464298,win62780,length39请记住,并非所有数据包都通过这种方式捕获,但这是大多数数据包遵循的一般格式。输出包含以下信息。接收数据包的时间戳接口名称数据包流网络协议名称IP地址和端口详细信息TCP标志数据包中数据的序列号确认数据窗口大小数据包长度第一个字段(16:23:44.545056)显示系统是否发送或接收时间戳数据包。记录的时间是从您系统的本地时间中提取的。第二个和第三个字段指示使用的接口和数据包的流向。在上面的代码片段中,eth0是无线接口的名称,Out是数据包流。第四个字段包括有关网络协议名称的信息。通常,您会发现两种协议-IP和IP6,其中IP代表IPV4,IP6代表IPV6。下一个字段包含源系统和目标系统的IP地址或名称。IP地址后跟端口号。输出中的第六个字段由TCP标志组成。tcpdump输出中使用了各种标志。标志名称值说明SYNS连接已启动FINF连接已完成PUSHO数据已推送RSTR连接重置ACK。Ack输出还可以包含多个TCP标志的组合。例如,FLAG[f.]代表一个FIN-ACK包。在输出片段中进一步移动,下一个字段包含数据包中数据的序列号(seq1007723650:1007723689)。第一个数据包始终具有正整数值,后续数据包使用相对序列号来改善数据流。下一个字段包含确认号(ack1485464298)或只是确认号。在发件人机器中捕获的数据包具有1485464298作为确认号。在接收端,Ack号是下一个数据包的值。输出中的第九个字段包含窗口大小(win62780),接收缓冲区中可用的字节数。窗口大小之后还有几个其他字段,包括最大段大小(MSS)。最后一个字段(长度39)包含tcpdump捕获的整个数据包的长度。3.限制捕获的数据包数量当您第一次运行tcpdump命令时,您可能会注意到系统会继续捕获网络数据包,直到您传递一个中断信号。您可以通过使用-c标志预先指定要捕获的数据包计数来覆盖此默认行为。┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$sudotcpdump--interfaceany-c3上面的命令将从任何活动网络接口捕获3个数据包。4.基于字段过滤数据包在解决问题时,在终端上输出大量文本并不会使事情变得更容易。这就是tcpdump中的过滤功能发挥作用的地方。您可以根据主机、协议、端口号等各种字段过滤数据包。要仅捕获TCP数据包,请键入:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$sudotcpdump--interfaceany-c5tcp同样,如果你想使用端口号过滤输出:┌──(linuxmi?linuxmi)-[~/www.linuxmi.com]└─$sudotcpdump--interfaceany-c5port50上面的命令只会检索通过指定端口传输的数据包。要获取特定主机的数据包详细信息:tcpdump--interfaceany-c5host112.123.13.145如果要过滤特定主机发送或接收的数据包,请在命令中使用src或dst参数。tcpdump--interfaceany-c5src112.123.13.145tcpdump--interfaceany-c5dst112.123.13.145您还可以使用逻辑运算符and和or组合两个或多个表达式。例如,要获取属于源IP112.123.13.145并使用端口80的数据包:tcpdump--interfaceany-c10src112.123.13.145andport80复杂的表达式可以使用括号组合在一起,如下所示:tcpdump?-interfaceany-c10"(src112.123.13.145orsrc234.231.23.234)and(port45orport80)"5.查看数据包内容可以使用tcpdump命令中的-A和-x标志来分析网络数据包裹的内容。-A标志表示ASCII格式,-x表示十六进制格式。查看系统捕获的下一个网络数据包的内容:tcpdump--interfaceany-c1-Atcpdump--interfaceany-c1-x6.将捕获保存到文件如果要保存捕获以供参考,tcpdump可以帮助你。只需将-w标志与默认命令一起传递,即可将输出写入文件,而不是将其显示在屏幕上。tcpdump--interfaceany-c10-wdata.pcap。pcap文件扩展名代表数据包捕获数据。您还可以使用-v标志以详细模式发出上述命令。tcpdump--interfaceany-c10-wdata.pcap-v要使用tcpdump读取.pcap文件,请使用-r标志,后跟文件路径。-r代表读取。tcpdump-rdata.pcap也可以从文件中保存的包数据中过滤网络包。tcpdump-rdata.pcapport80MonitorNetworkTrafficonLinux如果您被分配了管理Linux服务器的任务,那么tcpdump命令是您的武器库中包含的一个很好的工具。通过实时捕获网络传输中的数据包,您可以轻松解决与网络相关的问题。但在此之前,您的设备必须连接到互联网。即使通过命令行连接到Wi-Fi对Linux初学者来说也是一个挑战。但是,如果您使用正确的工具,那将是一件轻而易举的事。