gpt4 book ai didi

c - 用于通过 wifi radio 向其范围内的设备发送广播数据包的套接字程序

转载 作者:行者123 更新时间:2023-11-30 16:50:17 26 4
gpt4 key购买 nike

我想运行一个程序,通过 wifi radio 将我自己的数据包发送到环境。据我所知,如果我将以太网帧发送到目标 Mac 地址 ff:ff:ff:ff:ff:ff,则可以完成这项工作。所以我打开了一个原始套接字并按照代码构造了以太网 header 。

/* Open RAW socket to send on */
if ((sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) {
perror("socket");
}

/* Get the index of the interface to send on */
memset(&if_idx, 0, sizeof(struct ifreq));
strncpy(if_idx.ifr_name, ifName, IFNAMSIZ-1);
if (ioctl(sockfd, SIOCGIFINDEX, &if_idx) < 0)
perror("SIOCGIFINDEX");
/* Get the MAC address of the interface to send on */
memset(&if_mac, 0, sizeof(struct ifreq));
strncpy(if_mac.ifr_name, ifName, IFNAMSIZ-1);
if (ioctl(sockfd, SIOCGIFHWADDR, &if_mac) < 0)
perror("SIOCGIFHWADDR");

/* Construct the Ethernet header */
memset(sendbuf, 0, BUF_SIZ);
/* Ethernet header */
eh->ether_shost[0] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[0];
eh->ether_shost[1] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[1];
eh->ether_shost[2] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[2];
eh->ether_shost[3] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[3];
eh->ether_shost[4] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[4];
eh->ether_shost[5] = ((uint8_t *)&if_mac.ifr_hwaddr.sa_data)[5];
eh->ether_dhost[0] = 0xff;
eh->ether_dhost[1] = 0xff;
eh->ether_dhost[2] = 0xff;
eh->ether_dhost[3] = 0xff;
eh->ether_dhost[4] = 0xff;
eh->ether_dhost[5] = 0xff;
/* Ethertype field */
eh->ether_type = htons(ETH_P_BATMAN);
tx_len += sizeof(struct ether_header);

/* Packet data */
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;
sendbuf[tx_len++] = 0xaa;

我在以 AP 模式运行的路由器上测试了这个程序,但问题是我只能在访问 WLAN SSID 时才能收到这个数据包。我的问题是,当我处于此路由器传输范围内而不连接到它的 ssid 时,如何接收此数据包。任何帮助将不胜感激。

最佳答案

As my knowledge, this work can be done if I send a ethernet frame to the dest Mac address ff:ff:ff:ff:ff:ff.

不,这不是它的工作原理。

加入 SSID 类似于将以太网适配器插入物理以太网。如果您没有通过常规有线以太网适配器插入网络,则无法将数据包发送到该网络上的设备。使用 WiFi 适配器,在加入 SSID 之前,您无法与该网络上的其他设备通信。

您的应用程序通常无法访问 WiFi 的较低层。有一些可用于调试的 WiFi 适配器,允许您监听和传输任意 802.11a/b/g/n 帧,例如信标、探测器等。这些管理帧都不用于承载流量。

如果您想要在尚未设置为相互通信的几个设备之间发送数据,您应该让它们加入临时 SSID。然后,像往常一样在网络上广播流量。

关于c - 用于通过 wifi radio 向其范围内的设备发送广播数据包的套接字程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42240866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com