wifi 라디오를 통해 내 자신의 패킷을 보내는 프로그램을 실행하고 싶습니다. 필자가 아는 바에 따르면 이더넷 프레임을 목적지 맥 주소 ff : ff : ff : ff : ff : ff로 전송하면이 작업을 수행 할 수있다. 그래서 원시 소켓을 열고 코드 다음에 이더넷 헤더를 만들었습니다. wifi 라디오를 통해 패킷을 해당 범위의 장치로 브로드 캐스팅하기위한 소켓 프로그램
/* 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에 연결하지 않고받을 수있는 방법입니다. 어떤 도움을 주시면 감사하겠습니다.