0

SA、

ソケットを作成し、アクセスポイントからデータとログを受信しようとしていますが、シェルから実行するとコードは正しく機能していました。ただし、コマンドを実行してexecvpを使用してコードからAPに接続しようとすると

sudo iwconfig wlan0 essid "access point name"

コードからもシェルからもrecv関数が機能しなくなったため、このコマンドを実行すると一部の設定が変更されたようですが、正確に何が変更されたかはわかりません

それが私がソケットを作成する方法です

memset(&proc_addr, 0, sizeof(struct sockaddr_nl));
proc_addr.nl_family = AF_NETLINK;
proc_addr.nl_pid = getpid();            
proc_addr.nl_groups = CN_IDX_IWLAGN;

if (bind(sock_fd, (struct sockaddr *)&proc_addr, sizeof(struct sockaddr_nl)) == -1)
    exit_program_err(-1, "bind");

{
    int on = proc_addr.nl_groups;
    ret = setsockopt(sock_fd, 270, NETLINK_ADD_MEMBERSHIP, &on, sizeof(on));
    if (ret)
        exit_program_err(-1, "setsockopt");
}

while (1)
{
    /* Receive from socket with infinite timeout */
    printf("trying to receive");
    ret = recv(sock_fd, buf, sizeof(buf), 0);
    printf("received");
}

したがって、APからデータにpingを実行することはできますが、受信しようとするだけで印刷され、その後は何も出力されません。

execvpコード:

string cmd1_connect = "sudo iwconfig wlan0 essid ciscosb_3"; 
string cmd_check = "sudo dhclient wlan0";
 string cmd2_connect = "sudo iwconfig wlan0 essid Cisco13-guest"; 
while(true) { 
if(stream1) { 
shell->runcmd(&m, &cmd1_connect); 
shell->runcmd(&m, &cmd_check); 
} else { 
shell->runcmd(&m, &cmd2_connect); 
shell->runcmd(&m, &cmd_check); }
4

0 に答える 0