Alright. At this point, I've tried everything, and I can't get this thing to work like I want it. I'm on BT5 w/ OS X Lion in vmware fusion.
The blacklisting of rt2800usb is not going to help you. Basically, what you need to do is load the driver using modprobe (modprobe rt2800usb) and you can unload it using rmmod (rmmod rt2800usb rt2x00usb rt2800lib rt2x00lib crc_ccitt mac80211 cfg80211) when the thing starts to act up. I made an alias by adding this line:
to the end of ~/.bashrc, that way you can just type ndown whenever you want to unload the drivers.
alias ndown='rmmod rt2800usb rt2x00usb rt2800lib rt2x00lib crc_ccitt mac80211 cfg80211'
That being said, I've noticed that if you airmon-ng start wlan0 immediately after the thing is live (type the command, and watch for the blue led to go on, then as soon as the light goes off for the first time, hit enter.) it works almost always. Another way I've gotten it to work is by using airmon-ng check kill in the same way.
I think what's happening is that bt is trying to dhclient3 the thing right as you plug it in, and that somehow interferes with it. Also, it might have something to do with the fact that the nh has two chips in it, both with separate drivers, the 2nd of which may be causing the error.
I'm not extremely versed in this kind of thing just yet, so please let me know if you have ideas.
I made this shell script you can use. It just refreshes the driver, then tests for injection. For me, this will fix the problem around 40% of the time. Sometimes the script will fix it right away, sometimes I'll have to run it 5-10 times before I get injection, but eventually it comes thru. The injection will normally work until you put the interface down again, here y'go.
now, this starts the mon0 interface on 11, which is just to test. You can change that, but you can also just do it after it's successfully injecting. For instance, if you wanted to change to channel 1 you would do:
modprobe -r rt2800usb rt2x00usb rt2800lib rt2x00lib crc_ccitt mac80211 cfg80211
airmon-ng check kill && airmon-ng start wlan0 11
aireplay-ng -9 mon0
I still cannot figure out what is causing this to happen for the life of me, but I'm assuming it has something to do with the usb driver in vmware... I know for sure that it's the VMware that's causing it, because it works beautifully off of a hard boot.
iwconfig wlan0 channel 1
iwconfig mon0 channel 1