官方服务微信:dat818 购买与出租对接

tcpdump:截获与分析网络数据包的实用工具及命令实例

2万

主题

2

回帖

6万

积分

管理员

积分
66431
发表于 昨天 21:33 | 显示全部楼层 |阅读模式
    简单来说,它是把数据包 dump 到某个地方,能依据使用者的定义截取网络上的数据包进行包分析的工具。可以完整截获网络中传送数据包的“头”以供分析。它支持针对网络层、协议、主机、网络或端口进行过滤,还能提供 and、or、not 等逻辑语句来去除无用信息。

    实用命令实例

    默认启动

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump</pre></p>
    通常情况下,会直接启动并监视第一个网络接口上所有经过的数据包。

    监视指定网络接口的数据包

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump -i eth1</pre></p>
    如果没有指定网卡,那么默认只会对第一个网络接口进行监视,通常这个接口是 eth0,并且下面的例子都没有指定网络接口。

    监视指定主机的数据包

    打印所有进入或离开的数据包.

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump host sundown</pre></p>
    可以指定 ip ,比如截获所有来自 210.27.48.1 的主机所接收的以及发出的所有数据包

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump host <span style="font-family:&#39;Courier New&#39;!important; color:#80080; line-height:1.5!important; font-size:12px!important">210.27</span>.<span style="font-family:&#39;Courier New&#39;!important; color:#80080; line-height:1.5!important; font-size:12px!important">48.1</span> </pre></p>
    打印 与 hot 或者与 ace 之间通信的数据包

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump 对 helios 进行监听并且(对 hot 进行监听或者对 ace 进行监听)</pre></p>
    截获主机 210.27.48.1 的通信,或者截获主机 210.27.48.2 的通信,或者截获主机 210.27.48.3 的通信

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump 捕获主机为 210.27.48.1 且(主机为 210.27.48.2 或 210.27.48.3)</pre></p>
    打印 ace 与其他主机通信的 IP 数据包,不包括与某些特定主机之间的数据包。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">使用 tcpdump 捕获 IP 主机为 ace 且不是 helios 的数据包。</pre></p>
    如果想要获取主机 210.27.48.1 与除主机 210.27.48.2 之外其他主机通信的 ip 包,就使用该命令:

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">使用 tcpdump 命令来捕获 IP 数据包,这些数据包的源地址或目的地址是 210.27.48.1 ,并且不是 210.27.48.2 。</pre></p>
    截获主机发送的所有数据

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">使用 tcpdump 命令并指定网络接口为 eth0,同时指定源主机为 hostname</pre></p>
   


    监视所有送到主机的数据包

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">使用 tcpdump 命令并指定接口为 eth0,目标主机为 hostname</pre></p>
    监视指定主机和端口的数据包

    要获取主机 210.27.48.1 接收或发出的包,可使用如下命令。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump tcp port <span style="font-family:&#39;Courier New&#39;!important; color:#80080; line-height:1.5!important; font-size:12px!important">23</span> host <span style="font-family:&#39;Courier New&#39;!important; color:#80080; line-height:1.5!important; font-size:12px!important">210.27</span>.<span style="font-family:&#39;Courier New&#39;!important; color:#80080; line-height:1.5!important; font-size:12px!important">48.1</span></pre></p>
    对本机的udp 123端口进行监视123为ntp的服务端口

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump udp port 123 </pre></p>
    监视指定网络的数据包

    打印本地主机与网络上主机之间的通信数据包。其中,网络地址为 ucb-ether,此表达式最初的含义是打印网络地址为 ucb-ether 的所有数据包。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump net ucb-ether</pre></p>
    打印通过网关 snup 的 ftp 数据包。需要注意的是,表达式被单引号括起来了,这样做可以防止 shell 对其中的括号进行错误解析。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump <span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">gateway snup 以及(port ftp 或者 ftp-data)</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span></pre></p>
    打印所有源地址或目标地址是本地主机的IP数据包

    如果本地网络是通过网关与另一个网络相连接的,那么另一个网络不能被视为本地网络。(注:此句翻译较为曲折,需要进行补充说明)在实际使用中,要将其真正替换成本地网络的名称。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">使用 tcpdump 来捕获包含 IP 协议且不属于本地网络的数据包。通过这种方式,可以对特定网络环境中的 IP 流量进行监控和分析,以便更好地了解网络活动和排查网络问题。它能够过滤出那些来自或去往外部网络的 IP 数据包,而不包括本地网络内部的通信流量。</pre></p>
    监视指定协议的数据包

    打印 TCP 会话中的开始数据包,并且数据包的源或目的不是本地网络上的主机。打印 TCP 会话中的结束数据包,并且数据包的源或目的不是本地网络上的主机。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump <span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">tcp 的 tcpflags 与 (tcp-syn 或 tcp-fin) 进行按位与运算的结果不为 0 ,并且没有 src ,同时 dst 属于 localnet 。</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span></pre></p>
    打印的数据包需满足以下条件:源或目的端口为 80,网络层协议为 IPv4,且含有数据,同时不能是 SYN、FIN 以及 ACK-only 等不含数据的数据包。(ipv6 的版本的表达式可做练习)

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump <span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">tcp 端口 80 以及 (((ip 的第 2 位到第 2 位 减去 ((ip 的第 0 位与 0xf 进行按位与运算后的结果 )<<2)) - ((tcp[12]&0xf0)>>2)) != 0)</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span></pre></p>
    可理解为,ip 的第 2 位到第 2 位表示整个 ip 数据包的长度,ip 的第 0 位与 0xf 进行与运算后再大于 4 表示 tcp 头的长度,此域的单位是 32bit,换算成比特数为 ((tcp 的第 12 位与 0xf0 进行与运算后再右移 4 位)乘以 2)。整个 ip 数据包的长度减去 ip 头的长度,再减去 (ip 的第 0 位与 0xf 进行与运算后乘以 2)不等于 0 表示:整个 ip 数据包的长度减去 ip 头的长度,再减去

    tcp 头的长度不为 0 ,这意味着 ip 数据包中有数据。对于 ipv6 版本,只需考虑 ipv6 头中的“ ”与“tcp 头的长度”的差值,并且其中的表达方式“ip[]”需换成“ip6[]”。

    打印长度超过 576 字节的数据包,且该数据包的网关地址是 snup 的 IP 地址

   


<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump <span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">网关 snup 以及 ip 的第 2 位到第 2 位大于 576 。</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span></pre></p>
    打印所有属于 IP 层的广播或多播数据包,并且这些数据包不是物理以太网层的广播或多播数据报。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump <span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">ether[0] 与 1 进行按位与运算的结果为 0 ,并且 ip[16] 大于或等于 224 。</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span></pre></p>
    打印以下类型的 ICMP 数据包:不是“echo ”类型,也不是“echo reply”类型。例如,当需要打印所有非 ping 程序产生的数据包时,可以使用此表达式。

    “echo”类型和“echo reply”类型的 ICMP 数据包一般是由 ping 程序生成的。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">tcpdump <span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">icmp 的 icmptype 不等于 icmp-echo ,并且 icmp 的 icmptype 也不等于 icmp-echoreply 。</span><span style="font-family:&#39;Courier New&#39;!important; line-height:1.5!important; font-size:12px!important">&#39;</span></pre></p>
     与

    曾经有一款非常简单易用的抓包工具。然而,在 Linux 系统中,很难找到一个令人满意的图形化抓包工具。

    还好有。我们能够通过以下完美组合来实现:在 Linux 系统中进行抓包操作,接着在相应的环境里对包进行分析。

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">最后将抓取到的数据包保存到./target.cap 文件中。</pre></p>
    tcp、ip、icmp、arp、rarp 这些选项以及 tcp、udp、icmp 等都需放置在第一个参数的位置,以用于过滤数据报的类型。

    (2)-i eth1 : 只抓经过接口eth1的包

    (3)-t : 不显示时间戳

    抓取数据包时,原本默认抓取的长度是 68 字节。当加上-S 0 之后,就能够抓到完整的数据包。

    (5)-c 100 : 只抓取100个数据包

    不抓取目标端口为 22 的数据包。

    数据包的源网络地址是 192.168.1.0 且子网掩码为 255.255.255.0

    将其保存为 cap 文件,这样便于进行分析。

    使用抓取HTTP包

<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'>    <pre style="margin-top:0px; font-family:&#39;Courier New&#39;!important; word-wrap:break-word; white-space:pre-wrap; margin-bottom:0px; font-size:12px!important">使用 tcpdump 进行抓包操作,设置参数为 -XvvennSs 0 并指定网络接口为 eth0 ,抓取的条件是 tcp 报文头部的第 20 字节到第 21 字节的值为 0x4745 或者为 0x4854 。</pre></p>
    “GET”的前两个字母是“GE”,“HTTP”的前两个字母是“HT”。

    截获的数据未被彻底解码,数据包内的大部分内容是以十六进制形式直接打印输出的。这显然不利于分析网络故障。通常的解决办法是,先使用带 -w 参数的方式截获数据并保存到文件中,接着再使用其他程序(如)进行解码分析。当然,也需要定义过滤规则,以防止捕获的数据包将整个硬盘填满。
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-4-4 21:18 , Processed in 0.090075 second(s), 18 queries .