【问题标题】:How to receive bpdu traffic using raw socket in Linux C如何在 Linux C 中使用原始套接字接收 bpdu 流量
【发布时间】:2014-12-21 03:48:38
【问题描述】:

如何使用recvfrom()获取数据包?以及如何知道是 bdpu 流量? 我阅读了一些资源,但没有找到监听以太网流量。

int data_size, addr_size;
char reply[6000];
struct sockaddr_in addr;

addr_size = sizeof addr;
datasize = recvfrom(sock, reply, 6000, 0, &addr, &addr_size);

if(data_size<0)
{
    printf("nothing recv");
}
printf("%x",reply);

输出:

651a7ec0

这是什么?我不知道。

【问题讨论】:

  • 你打印的数字是reply数组的地址,不是内容。另外如果recvfrom的返回值为-1,则表示错误,请检查errno
  • 那么如何获取内容

标签: c linux sockets network-programming raw-sockets


【解决方案1】:

reply 变量是一个指向 6000 字节数组的指针。当 recvfrom 返回时,如果用 datasize 个字节填充这个数组。要查看内容,从索引 0 开始遍历 reply,直到 datasize:

for(i=0;i<datasize;i++)
{
    printf("%02x ",reply[i]);
}

我建议将 reply 声明为unsinged char reply[6000]

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-22
    • 1970-01-01
    相关资源
    最近更新 更多