标签: tcpdump

如何使用tcpdump从大型pcap文件中获取特定范围的数据包?

我有一个巨大的pcap文件(100GB),我对少量的数据包感兴趣,我知道数字是5,000,000到5,000,020.

如何使用tcpdump读取pcap文件,按数据包编号(或范围)过滤掉数据包,然后将其写入新的pcap文件?

tcpdump

7
推荐指数
2
解决办法
1万
查看次数

tcpdump:在复合过滤器中使用 AND 和 OR

我正在尝试向流添加过滤器tcpdump

我试图运行的表达式是:

tcpdump -i eth0 -U -w - host 192.168.2.29 and (port 22222 or port 22221 or port 80)
Run Code Online (Sandbox Code Playgroud)

这种特殊的格式会抛出:

bash: syntax error near unexpected token '('
Run Code Online (Sandbox Code Playgroud)

我预计这会基于THIS起作用。

以下工作不会引发错误:

a)  tcpdump -i eth0 -U -w - host 192.168.2.29
b)  tcpdump -i eth0 -U -w - port 22222
Run Code Online (Sandbox Code Playgroud)

我已经尝试了关联的每种排列都抛出相同的错误。

filter tcpdump

7
推荐指数
1
解决办法
7438
查看次数

TCP 服务器发送 [ACK] 后跟 [PSH,ACK]

我正在开发一个高性能 TCP 服务器,当我使用 TCP 客户端泵送高流量时,我发现服务器的处理速度不够快。经过仔细检查,我发现 TCP 服务器上的“增量时间”出现峰值。而且,我看到服务器发送了一个 ACK​​,0.8 秒后又发送了相同 seqno 的 PSH、ACK。我在 pcap 中多次看到这种模式。专家能否评论一下为什么服务器发送 ACK 后跟 PSH,ACK,中间有延迟?

TCP 服务器 PCAP

networking tcp tcpdump pcap wireshark

7
推荐指数
1
解决办法
2万
查看次数

在像tcpdump这样的工具中,何时捕获网络数据包?

我使用的工具之一使用加密/解密来通过网络发送数据.我正在修改该工具,我需要确保数据实际上是以加密形式发送的.

Wiresharktcpdump是否适合此目的?在传输过程中,他们捕获网络数据包了吗?

encryption networking tcp tcpdump wireshark

6
推荐指数
2
解决办法
5281
查看次数

嗅探时查找数据包的方向

我想要一个接口出站流量的源 IP 地址列表。如何使用 libpcap 找到数据包的方向(无论是入站还是出站读取流量)?我不知道双方的子网信息。而且两边都有客户端/服务器,所以我不能依赖端口号范围来过滤流量。

为什么 libpcap 数据包头中没有有关方向的信息,或者像pcap-filterinbound中那样的过滤器选项?

network-programming packet-capture tcpdump libpcap

6
推荐指数
1
解决办法
4545
查看次数

pcap文件和字节顺序

对pcap文件运行file命令将打印出以下内容:

$ file pcap.pcap
pcap.pcap: tcpdump capture file (little-endian) - version 2.4 ....
Run Code Online (Sandbox Code Playgroud)

我一直在寻找一种方法来创建一个big-endian捕获文件,或者在线下载一个样本,但无济于事.

我也很困惑pcap中究竟是小端还是大端.据我所知,libpcap捕获了它在线上看到的内容.

endianness tcpdump pcap libpcap

6
推荐指数
1
解决办法
5975
查看次数

tcpdump 的侵入性如何?

我环顾四周寻找有关tcpdump内部结构的文档,但我什么也没找到。所以我的问题是tcpdump计算机上的侵入性如何。如何评估专用于流量分析的资源量(内存或 CPU)?

linux networking tcpdump

6
推荐指数
1
解决办法
3747
查看次数

如何调试未关闭的CLOSE_WAIT连接的原因?(tcpdump 等)

我们将 Java 应用程序和 Nginx 作为反向代理安装在同一主机上。定期地,我们会发现CLOSE_WAIT连接长时间挂起:

$ ss -n4t | head
State      Recv-Q Send-Q  Local Address:Port    Peer Address:Port
CLOSE-WAIT 1      0           127.0.0.1:8180       127.0.0.1:36599
CLOSE-WAIT 1      0           127.0.0.1:8180       127.0.0.1:36467
CLOSE-WAIT 1      0           127.0.0.1:8180       127.0.0.1:36154
Run Code Online (Sandbox Code Playgroud)

而且数量不断增加,那么应用程序就会出现问题。互联网上说:

Your server is failing to detect client disconnects, or ignoring them, and not closing the socket.
Run Code Online (Sandbox Code Playgroud)

Nginx 说:

2020/06/28 04:59:15 [error] 65506#0: *31719640 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 55.55.55.55, server: app.mycompany.com, request: "POST /url/url HTTP/1.0", upstream: …
Run Code Online (Sandbox Code Playgroud)

networking tcp nginx tcpdump wireshark

6
推荐指数
0
解决办法
1447
查看次数

如何使用 libopenssl 重放加密流量?

我们有一个基于 libuv 和 libopenssl 的 HTTP 客户端,用于 TLS,用 C++ 编写 - 它有自己的 TCP 包装器围绕 lubuv 和 HTTP 解析器。

通常它可以正常工作,我们的服务器使用它向社交网络发出数百万个成功的 HTTPS 请求。并且单连接请求从来没有出现过问题,它以“连接:关闭”状态结束。但是,尽管很少见,对于保持活动的连接,有时会发生奇怪的 ssl 错误:

任何一个 error:04067084:rsa routines:rsa_ossl_public_decrypt:data too large for modulus

或者 error:04067072:rsa routines:rsa_ossl_public_decrypt:padding check failed

我相信这是一个非常罕见的问题,百万分之一。当从服务器接收到新数据时,从 SSL_read 返回错误。它永远不会在第一次响应时发生,通常在错误发生之前连接中有十多次请求-响应交换。

我们有使用SSL_CTX_set_keylog_callback接口捕获的此类交换和键盘日志的 tcpdump 。Wireshark 使用 keylog 作为预主密钥文件打开和解密转储,没有任何问题,并包含正常的 HTTP 响应,“200 OK”。对于我们的 HTTP 客户端,最后一个数据包会产生错误。通过检查交易所,我们没有发现任何问题或数据损坏的迹象。这个事实让我假设数据没问题,但我们的 OpenSSL 使用可能不完全正确。

模拟使用 tcpdump 数据发送完全相同响应的服务器是没有问题的。但是我需要使用客户端键盘日志中的预主密钥。我找不到任何将密钥设置为 SSL_CTX* 或 SSL* 的函数。有吗?

我还修改了 libopenssl 以使用常量键。我已经输入memcpy(s->session->master_key, overriden_secret, 48)ssl_generate_master_secrettls13_generate_secret。同样memcpy(s->s3->client_random, overriden_random, 32);tls_construct_client_hellotls_early_post_process_client_hello 中。它不起作用并在握手阶段产生一个 …

c++ ssl https openssl tcpdump

6
推荐指数
0
解决办法
108
查看次数

Linux 上传入网络包的延迟 - 如何分析?

问题是:有时 tcpdump 发现 UDP 数据包的接收被推迟到下一个传入 UDP 数据包为止,尽管网络分路设备显示它通过电缆没有延迟。

场景:我在 Linux 上的 Profinet 堆栈(位于用户空间)有一个循环连接,每 4 毫秒接收和发送 Profinet 协议数据包(通过原始套接字)。大约每 30 毫秒,它还会在 UDP 套接字上的另一个线程中接收 UDP 数据包,并根据该协议立即回复它们。CPU 负载约为 10%。有时,接收到的 UDP 数据包似乎被卡在网络驱动程序中。2 秒后,下一个 UDP 数据包到来,丢失的 UDP 数据包和下一个数据包都被接收。没有丢失的数据包。

我的测量:

  1. 我用来tcpdump -i eth0 --time-stamp-precision=nano --time-stamp-type=adapter_unsynced -w /tmp/tcpdump.pcap将 UDP 流量记录到 RAM 磁盘文件中。
  2. 同时我使用网络分流设备来记录流量。

问题:

  1. 如何找出延迟来自何处(或者是已知的影响)?(2.时间戳(tcpdump为每个数据包设置的)告诉我什么?我的意思是,它指的是哪个OSI层,换句话说:什么时候采取的?)

拓扑:“具有 Linux 和 eth0 的嵌入式设备”<---> tap-device <---> PLC。程序“tcpdump”正在嵌入式设备上运行。Tap 设备正在侦听电缆。实际的Profinet 连接是在PLC 和嵌入式设备之间。PC 连接到 Tap 设备上以记录其正在收听的内容。

Wireshark(通过 Tap 和 tcpdump):请参阅此处(tcpdump.pcap 中的数据包编号 3189)

udp tcpdump linux-device-driver

6
推荐指数
1
解决办法
1075
查看次数