gpt4 book ai didi

在没有运行 Wireshark 的情况下无法在 C 中嗅探 UDP 数据包

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:09:31 26 4
gpt4 key购买 nike

我有一个看起来像这样的设置:

Target ---- Switch ---- Switch ---- Windows computer
|
Linux computer

所以我有一个连接到交换机的目标,它发送 UDP 数据包用于调试目的。通常这些数据包会进入 Windows 计算机进行分析,这很有效。我现在也添加了一台 Linux 计算机,为了向 Linux 和 Windows 获取相同的数据,我设置了一个托管交换机来镜像流量,当我在 Wireshark 中查看时,这工作正常。然后我写了一个简单的 C 应用程序来分析 Linux 计算机上的数据,这个软件只有在 Wireshark 同时运行时才能工作。否则它不会从目标接收任何数据。为什么是这样?

int main()
{
int saddr_size, data_size;
struct sockaddr saddr;

unsigned char *buffer = (unsigned char *) malloc(BUFFER_SIZE);

printf("Starting...\n");

int sock_raw = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

if (sock_raw < 0)
{
printf("Socket Error");
return 1;
}

while (1)
{
saddr_size = sizeof saddr;
data_size = recvfrom(sock_raw, buffer, BUFFER_SIZE, 0, &saddr, (socklen_t*) &saddr_size);
if (data_size < 0)
{
printf("Recvfrom error , failed to get packets\n");
return 1;
}
processPacket(buffer);
}
close(sock_raw);
printf("Finished");
return 0;
}

来自目标的数据以类似于 RTP 的格式发送并发送到 Windows 计算机。

综上所述;为什么在没有运行 Wireshark 的情况下,我的 C 应用程序中收不到来自目标的任何数据?

最佳答案

here相同,您需要将接口(interface)(不是我最初发布的套接字)置于混杂模式。 Wireshark 可以做到这一点,这就是您的代码在 Wireshark 运行时运行的原因。

关于在没有运行 Wireshark 的情况下无法在 C 中嗅探 UDP 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30050780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com