--- a/src/aireplay-ng.c +++ b/src/aireplay-ng.c @@ -200,7 +200,9 @@ char usage[] = "\n" " Miscellaneous options:\n" "\n" -" -R : disable /dev/rtc usage\n" +" -R : disable /dev/rtc usage\n" +" --ignore-negative-one : if the interface's channel can't be determined,\n" +" ignore the mismatch, needed for unpatched cfg80211\n" "\n" " Attack modes (numbers can still be used):\n" "\n" @@ -268,6 +270,7 @@ struct options int bittest; int nodetect; + int ignore_negative_one; int rtc; } opt; @@ -715,6 +718,13 @@ int attack_check(uchar* bssid, char* ess iface_chan = wi_get_channel(wi); + if(iface_chan == -1 && !opt.ignore_negative_one) + { + PCT; printf("Couldn't determine current channel for %s, you should either force the operation with --ignore-negative-one or apply a kernel patch\n", + wi_get_ifname(wi)); + return -1; + } + if(bssid != NULL) { ap_chan = wait_for_beacon(bssid, capa, essid); @@ -723,7 +733,7 @@ int attack_check(uchar* bssid, char* ess PCT; printf("No such BSSID available.\n"); return -1; } - if(ap_chan != iface_chan) + if((ap_chan != iface_chan) && (iface_chan != -1 || !opt.ignore_negative_one)) { PCT; printf("%s is on channel %d, but the AP uses channel %d\n", wi_get_ifname(wi), iface_chan, ap_chan); return -1; @@ -5765,6 +5775,7 @@ int main( int argc, char *argv[] ) {"help", 0, 0, 'H'}, {"fast", 0, 0, 'F'}, {"bittest", 0, 0, 'B'}, + {"ignore-negative-one", 0, &opt.ignore_negative_one, 1}, {0, 0, 0, 0 } };