没有 Wireshark 无法在 C 中嗅探 UDP 数据包 运行
Cannot sniff UDP packets in C without Wireshark running
我的设置如下所示:
Target ---- Switch ---- Switch ---- Windows computer
|
Linux computer
所以我有一个连接到交换机的目标,它发送 UDP 数据包用于调试目的。通常这些数据包会进入 Windows 计算机进行分析,这是可行的。我现在也添加了一台 Linux 计算机,以便为 Linux 和 Windows 获取相同的数据 我已经设置了一个托管交换机来镜像流量,当我查看时这工作正常线鲨。然后我编写了一个简单的 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相同,您需要将接口(不是我最初发布的套接字)置于混杂模式。 Wireshark 会这样做,这就是为什么当 Wireshark 为 运行.
时您的代码可以工作的原因
我的设置如下所示:
Target ---- Switch ---- Switch ---- Windows computer
|
Linux computer
所以我有一个连接到交换机的目标,它发送 UDP 数据包用于调试目的。通常这些数据包会进入 Windows 计算机进行分析,这是可行的。我现在也添加了一台 Linux 计算机,以便为 Linux 和 Windows 获取相同的数据 我已经设置了一个托管交换机来镜像流量,当我查看时这工作正常线鲨。然后我编写了一个简单的 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相同,您需要将接口(不是我最初发布的套接字)置于混杂模式。 Wireshark 会这样做,这就是为什么当 Wireshark 为 运行.
时您的代码可以工作的原因