使用“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.@[email protected];....
        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 请求。至于其余部分,它不是人类可读的,但我们放心,因为我们知道这是一个合法的数据包。使用这种格式的另一个优点是,即使我们无法准确解释这个数据包发生了什么,我们也可以将其发送给可能能够解释的人。最终,这是未经任何过滤就通过网络传输的原始数据。

相关推荐
Xiaok10181 小时前
解决 Hugging Face SentenceTransformer 下载失败的完整指南:ProxyError、SSLError与手动下载方案
开发语言·神经网络·php
niuniu_6662 小时前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
Jtti2 小时前
PHP在Debian环境上的并发处理能力如何
开发语言·debian·php
viqecel12 小时前
网站改版html页面 NGINX 借用伪静态和PHP脚本 实现301重定向跳转
nginx·php·nginx重定向·301重定向·html页面重定向
小爬虫程序猿16 小时前
利用 PHP 爬虫按关键字搜索淘宝商品
开发语言·爬虫·php
小爬虫程序猿16 小时前
淘宝商品信息如何存储到数据库?
数据库·爬虫·php
桃子酱紫君19 小时前
华为配置篇-BGP实验
开发语言·华为·php
niuniu_6661 天前
Selenium 性能测试指南
selenium·测试工具·单元测试·测试·安全性测试
莓事哒1 天前
selenium和pytessarct提取古诗文网的验证码(python爬虫)
爬虫·python·selenium·测试工具·pycharm
fakaifa1 天前
beikeshop多商户跨境电商独立站最新版v1.6.0版本源码
前端·小程序·uni-app·php·beikeshop多商户·beikeshop跨境电商