使用“tcpdump”查看原始数据包

使用"tcpdump"查看原始数据包

尽管像 Snort 这样的工具可以出色地筛选通过我们网络的所有内容,但有时需要查看原始数据。为此,我们最好的工具是"tcpdump"。

使用 tcpdump 的最基本方法是简单地发出以下命令:

tcpdump

使用 -v 选项可以获得更详细的信息,使用 -vv 选项可以获得更多的信息。

有用的选项

假设您已登录到您管理的远程计算机。通常,您会使用 SSH。如果您运行"tcpdump"时不带任何选项,则输出将充斥着来自 SSH 连接的数据包。要避免这种情况,只需从输出中删除端口 22:

tcpdump not port 22

您可以使用多个不同的端口来实现此目的:

tcpdump not port 143 and not port 25 and not port 22

如果您想要执行相反的操作,即仅监视某个端口(这有利于调试网络应用程序),您可以执行以下操作:

tcpdump port 143

您还可以从网络上的特定主机获取数据:

tcpdump host hal9000

如果你的机器有多个网络接口,你也可以指定你想要监听的网络接口:

tcpdump -i eth1

您还可以指定协议:

tcpdump udp

您可以在 /etc/protocols 中找到协议列表。

保存输出以供以后使用

在某些情况下,您可能希望将输出重定向到文件,以便以后详细研究它或使用其他程序来解析输出。在下面的示例中,您仍然可以在将输出保存到文件的同时查看输出:

tcpdump -l | tee tcpdump_`date +%Y%m%e-%k.%M`

在上面的例子中,我们可以通过日期和时间来识别每个转储。这在处理一天中某些时间出现的问题时可能会派上用场。tcpdump

还有一个选项可以将其输出转储为二进制格式,以便以后读取。要创建二进制文件:

tcpdump -w tcpdump_raw_`date +%Y%m%e-%k.%M`

稍后,你可以让 tcpdump 读取该文件

tcpdump -r tcpdump_raw_YYYMMDD-H.M

您还可以使用程序 ethereal 打开原始转储并对其进行解释。我们将在下一节中详细讨论 ethereal。

需要注意的事项

tcpdump 为我们提供了有关往返于我们网络的所有数据包的信息。但这一切意味着什么?

将 Ethereal 与 tcpdump 结合使用

Ethereal 是一种也可用于捕获网络数据包的工具。安装后,您可以打开您制作的原始转储文件。它看起来像这样:

这样就更容易看到发生了什么。您可以看到源 IP 和目标 IP 是什么,以及数据包的类型。然后,您可以轻松排除可能遇到的网络问题并分析可疑行为。再补充一个轶事,当我在写这节课并解释我自己的转储时,我看到我的个人工作站上有一些奇怪的活动。我几乎定期查询世界各地不同 IP 的机器上的端口 32772。我为端口 32772 运行了一个特定的转储,如下所示:

tcpdump port 32772 -w dump_32772

我得到的结果确实很奇怪。即使在 Google 搜索之后,我也没有找到任何相关信息,所以我怀疑我可能感染了木马。我运行了"rootkit hunter"(下一节将详细介绍),但什么也没找到。最后,通过逐个关闭,我发现是 Skype,我一直都打开它。尽管这最终被证明是无害的,但我很高兴有 tcpdump 向我指出了这一点。

阅读原始输出

正如您所见,即使阅读 tcpdump 中所谓的"人类可读"输出也有点难以理解。请看以下示例,这是我刚从转储中抓取的一个随机数据包:

17:26:22.924493 IP www.linux.org.www > test.linux.org.34365: P 2845:3739(894) ack 1624 win 9648 <nop,nop,timestamp 326501459 24374272>

我们有一个对www.linux.org 的网络服务器请求。在时间戳之后,您会注意到主机名末尾有 .www(表示端口 80)。此信息将发送到请求主机 test.linux.org 的端口 34365。"P"代表 TCP"oush"功能。这意味着数据应立即发送。后面的数字 2845:3739(894) 中,2845 标记第一个数据包的八位字节数。数字 3739 是数据包发送的最后一个字节数加 1。数字 894 是发送的数据包的长度。其中"ack 1624"是 TCP 术语"确认"------即数据包已被接受,下一个预期的数据包编号是 1624。之后,我们看到"win 9648",表示发送主机正在等待窗口大小为 9648 个八位字节的数据包。接下来是时间戳。

现在,如果您认为这有点难以解释,如果您使用 -x 选项,它将以十六进制输出包含数据包内容。这里您需要一位埃及古物学家来解释输出:

18:12:45.149977 IP www.linux.org.www > test.linux.org.34536: . 1:1449(1448) 
ack 487 win 6432 <nop,nop,timestamp 329284215 27156244>
        0x0000:  4500 05dc 6a81 4000 4006 493b c0a8 0006  E...j.@.@.I;....
        0x0010:  c0a8 0009 0050 86e8 8fa4 1d47 1c33 e3af  .....P.....G.3..
        0x0020:  8010 1920 b4d9 0000 0101 080a 13a0 7a77  ..............zw
        0x0030:  019e 5f14 4854 5450 2f31 2e31 2032 3030  .._.HTTP/1.1.200
        0x0040:  204f 4b0d 0a44 6174 653a 2054 6875 2c20  .OK..Date:.Thu,.
        0x0050:  3135

我们可以从输出中得知,这是一个 HTTP 请求。至于其余部分,它不是人类可读的,但我们放心,因为我们知道这是一个合法的数据包。使用这种格式的另一个优点是,即使我们无法准确解释这个数据包发生了什么,我们也可以将其发送给可能能够解释的人。最终,这是未经任何过滤就通过网络传输的原始数据。

相关推荐
项目題供诗2 小时前
尚品汇-秒杀商品存入缓存、Redis发布订阅实现状态位(五十一)
开发语言·php
蜗牛沐雨2 小时前
用 ReactPHP 实现图片上传加速:让并发上传实现真正的高效
php·reactphp
龙哥·三年风水14 小时前
活动系统开发之采用设计模式与非设计模式的区别-后台功能总结
设计模式·php·tinkphp6
chenjingming66614 小时前
windows使用tcpdump.exe工具进行抓包教程
网络·测试工具·tcpdump
白总Server16 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
yukai0800816 小时前
Python 全栈系列271 微服务踩坑记
python·微服务·php
向宇it18 小时前
一张图解析FastAdmin中的弹出窗口的功能(备份)
php·fastadmin
最美不过下雨天啊18 小时前
php curl发送get、post请求
php
小码哥说测试21 小时前
软件测试技术之 GPU 单元测试是什么!
自动化测试·功能测试·测试工具·jmeter·单元测试·集成测试·postman
极术社区1 天前
ResNeXt学习
开发语言·学习·计算机视觉·php