【问题标题】:capture Beacon frames using Linux c sockets使用 Linux c 套接字捕获 Beacon 帧
【发布时间】:2018-10-24 07:14:52
【问题描述】:

我想使用 Linux c 套接字从我的路由器捕获信标帧。

  1. 什么是套接字打开定义? 那些合适吗? sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))

  2. 应该处于管理模式还是监控模式?

非常感谢

大理 p.s 我不想使用第三方库来实现这个,比如 libpcap。

【问题讨论】:

    标签: sockets beacon


    【解决方案1】:

    这是我的知识回答:

    1) 是的。你声明int sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));是正确的

    2) 您的设备需要处于监控模式才能捕获信标帧。如果您的 linux 机器安装了 aircrack-ng 套件,您可以使用 airmon-ng start [DEV NAME] 将其置于监控模式,或者如果安装了 net-tools 等,您可以执行以下操作(示例使用 'wlan0' 作为我要放置的设备进入监控模式):

    ifconfig wlan0 down 
    iw wlan0 set type monitor 
    ip link set wlan0 name wlan0mon && ifconfig wlan0mon up
    

    接下来,如果你想在 C 中继续使用你的监控模式套接字,你可以使用以下命令:

    struct ifreq ifr;
    struct sockaddr_ll ll;
    assert(sizeof(ifr.ifr_name) == IFNAMSIZ);
    
    int sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
    strncpy(ifr.ifr_name, "wlan0mon", sizeof(ifr._ifr_name)); 
    ioctl(sock_raw, SIOCGIFINDEX, &ifr);
    
    ll.sll_ifindex = ifr.ifr_ifindex;
    ll.sll_protocol = htons(ETH_P_ALL);
    ll.sll_family = PF_PACKET;
    
    bind(sock_raw, (struct sockaddr *)&ll, sizeof(ll));
    

    此 C 代码设置原始套接字以供监视模式使用,然后将其绑定到监视模式设备。现在它可以用于发送/接收 802.11 帧等。我希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多