Raspi AdHoc接收网络凭据

时间:2015-02-24 19:35:07

标签: c++ linux networking

如果你们中的任何一个人熟悉Google的chromecast,我会尝试以类似的方式连接到网络。具体来说,我想在后台检查网络连接的守护进程,如果Raspi无法连接到网络,那么我希望它开始广播AdHoc网络并运行DHCP服务器。

然后,Raspi将通过网络收听有关wifi凭据的指令,并在收到它们后,将尝试连接。如果raspi成功连接或插入了以太网电缆,AdHoc / DHCPd将关闭并将使用新连接。

我是linux网络命令的新手,所以我想知道在设置这些连接时是否有错误。以下是相关的c ++脚本:

如果凭据已保存:

void NetworkConnectionMonitor::connectToRemeberedWifi()
{
    system("wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf"); 
    system("dhclient -1 wlan0");
}

特别连接:

void NetworkConnectionMonitor::startAdHoc()
{
    system("ifconfig wlan0 down");
    system("iwconfig wlan0 mode ad-hoc");
    system("iwconfig wlan0 key aaaaa11111");
    system("iwconfig wlan0 essid RPi");
    system("ifconfig wlan0 10.0.0.200 netmask 255.255.255.0
    system("/usr/sbin/dhcpd wlan0");
}

void NetworkConnectionMonitor::stopAdHoc()
{
    system("service isc-dhcp-server stop");
    system("ifconfig wlan0 down");
}

在调用stopAdHoc()

后收到新凭据时
void NetworkConnectionMonitor::connectToWifi(string essid, string psk)
{
    system("wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf");
    system("wpa_cli add_network");
    system("wpa_cli set_network 0 ssid " + essid); 
    system("wpa_cli set_network 0 psk " + psk); 
    system("wpa_cli enable_network 0"); 
    system("wpa_cli save_config"); 
    system("dhclient -1 wlan0");
}

如果网络出现故障,请在调用start ad hoc

之前调用此方法
void NetworkConnectionMonitor::stopWifi()
{
    system("wpa_cli terminate");
}

wpa_supplicant.conf(在添加凭据之前):

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

的/ etc /网络/接口

auto lo wlan0

iface lo inet loopback

allow-hotplug etho0
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual

我收到的错误太多,无法在此列出,但是adhoc似乎启动得很好,我可以连接到它并成功通过侦听端口发送数据包。但是,当我尝试切换到Wifi连接时,似乎dhclient和dhcpd之间仍存在一些冲突。

如果有更简单的方法,我很乐意听到它。如果没有人知道为什么这不起作用?

0 个答案:

没有答案