使用 Linux c 套接字捕获 Beacon 帧
Posted
技术标签:
【中文标题】使用 Linux c 套接字捕获 Beacon 帧【英文标题】:capture Beacon frames using Linux c sockets 【发布时间】:2018-10-24 07:14:52 【问题描述】:我想使用 Linux c 套接字从我的路由器捕获信标帧。
什么是套接字打开定义? 那些合适吗? sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
应该处于管理模式还是监控模式?
非常感谢
大理 p.s 我不想使用第三方库来实现这个,比如 libpcap。
【问题讨论】:
【参考方案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 帧等。我希望这会有所帮助:)
【讨论】:
以上是关于使用 Linux c 套接字捕获 Beacon 帧的主要内容,如果未能解决你的问题,请参考以下文章