mac80211-injection.txt 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. How to use packet injection with mac80211
  2. =========================================
  3. mac80211 now allows arbitrary packets to be injected down any Monitor Mode
  4. interface from userland. The packet you inject needs to be composed in the
  5. following format:
  6. [ radiotap header ]
  7. [ ieee80211 header ]
  8. [ payload ]
  9. The radiotap format is discussed in
  10. ./Documentation/networking/radiotap-headers.txt.
  11. Despite 13 radiotap argument types are currently defined, most only make sense
  12. to appear on received packets. Currently three kinds of argument are used by
  13. the injection code, although it knows to skip any other arguments that are
  14. present (facilitating replay of captured radiotap headers directly):
  15. - IEEE80211_RADIOTAP_RATE - u8 arg in 500kbps units (0x02 --> 1Mbps)
  16. - IEEE80211_RADIOTAP_ANTENNA - u8 arg, 0x00 = ant1, 0x01 = ant2
  17. - IEEE80211_RADIOTAP_DBM_TX_POWER - u8 arg, dBm
  18. Here is an example valid radiotap header defining these three parameters
  19. 0x00, 0x00, // <-- radiotap version
  20. 0x0b, 0x00, // <- radiotap header length
  21. 0x04, 0x0c, 0x00, 0x00, // <-- bitmap
  22. 0x6c, // <-- rate
  23. 0x0c, //<-- tx power
  24. 0x01 //<-- antenna
  25. The ieee80211 header follows immediately afterwards, looking for example like
  26. this:
  27. 0x08, 0x01, 0x00, 0x00,
  28. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  29. 0x13, 0x22, 0x33, 0x44, 0x55, 0x66,
  30. 0x13, 0x22, 0x33, 0x44, 0x55, 0x66,
  31. 0x10, 0x86
  32. Then lastly there is the payload.
  33. After composing the packet contents, it is sent by send()-ing it to a logical
  34. mac80211 interface that is in Monitor mode. Libpcap can also be used,
  35. (which is easier than doing the work to bind the socket to the right
  36. interface), along the following lines:
  37. ppcap = pcap_open_live(szInterfaceName, 800, 1, 20, szErrbuf);
  38. ...
  39. r = pcap_inject(ppcap, u8aSendBuffer, nLength);
  40. You can also find sources for a complete inject test applet here:
  41. http://penumbra.warmcat.com/_twk/tiki-index.php?page=packetspammer
  42. Andy Green <andy@warmcat.com>