使用Linux c套接字捕获信标帧

时间:2018-10-24 07:14:52

标签: sockets beacon

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

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

  2. 应该处于管理模式还是“监视”模式?

非常感谢

塔利 ps我不想使用第三方库(例如libpcap)来实现这一点。

1 个答案:

答案 0 :(得分:0)

这是我所知:

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帧等了,希望对您有所帮助:)