-rw-r--r-- | noncore/net/wellenreiter/README | 27 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/wellenreiter.cpp | 26 |
2 files changed, 41 insertions, 12 deletions
diff --git a/noncore/net/wellenreiter/README b/noncore/net/wellenreiter/README index c04d30c..af2e611 100644 --- a/noncore/net/wellenreiter/README +++ b/noncore/net/wellenreiter/README | |||
@@ -1,68 +1,81 @@ | |||
1 | /*************************************************************************/ | 1 | /*************************************************************************/ |
2 | /* W e l l e n r e i t e r I I */ | 2 | /* W e l l e n r e i t e r I I */ |
3 | /* =============================== */ | 3 | /* =============================== */ |
4 | /* */ | 4 | /* */ |
5 | /* Version: Opie-ALPHA */ | 5 | /* Version: Opie-ALPHA-January */ |
6 | /*************************************************************************/ | 6 | /*************************************************************************/ |
7 | 7 | ||
8 | -------------------------------------------------- | 8 | -------------------------------------------------- |
9 | Release Notes for Opie-ALPHA Version December 2002 | 9 | Release Notes for Opie-ALPHA Version January 2002 |
10 | -------------------------------------------------- | 10 | -------------------------------------------------- |
11 | 11 | ||
12 | ===================== | 12 | ===================== |
13 | = Supported Devices = | 13 | = Supported Devices = |
14 | ===================== | 14 | ===================== |
15 | 15 | ||
16 | * low-level orinoco_cs-based (including prism2 and spectrum_cs) | 16 | * low-level orinoco_cs-based (including prism2 and spectrum_cs) |
17 | 17 | ||
18 | * Supported Interfaces: wlan0 (yes, I know this is hardcoded and | ||
19 | lame, but we're in a hurry and this can be configured soon...) | ||
20 | |||
21 | ===================== | 18 | ===================== |
22 | = Build = | 19 | = Build = |
23 | ===================== | 20 | ===================== |
24 | 21 | ||
25 | To compile Wellenreiter within the Opie build environment, add the | 22 | To compile Wellenreiter within the Opie build environment, add the |
26 | following directories to $OPIEDIR/Makefile, e.g. to 'NONAPPS=' | 23 | following directories to $OPIEDIR/Makefile, e.g. to 'NONAPPS=' |
27 | 24 | ||
28 | noncore/net/wellenreiter/libwellenreiter \ | 25 | noncore/net/wellenreiter/libwellenreiter \ |
29 | noncore/net/wellenreiter/daemon \ | 26 | noncore/net/wellenreiter/daemon \ |
30 | noncore/net/wellenreiter/contrib/orinoco_hopper \ | 27 | noncore/net/wellenreiter/contrib/orinoco_hopper \ |
31 | noncore/net/wellenreiter/gui | 28 | noncore/net/wellenreiter/gui |
32 | 29 | ||
33 | ./configure and rebuild. Note that you need libpcap in your toolchain. | 30 | ./configure and rebuild. Note that you need libpcap in your toolchain. |
34 | 31 | ||
32 | To compile Wellenreiter within the OZ build environment, add the | ||
33 | following lines to $OPIEDIR/packages | ||
34 | CONFIG_WELLENREITER noncore/net/wellenreiter/libwellenreiter libwellenreiter.pro | ||
35 | CONFIG_WELLENREITER noncore/net/wellenreiter/daemon daemon.pro | ||
36 | CONFIG_WELLENREITER noncore/net/wellenreiter/gui gui.pro | ||
37 | CONFIG_WELLENREITER noncore/net/wellenreiter/contrib/orinoco_hopper orinoco_hopper.pro | ||
38 | |||
39 | make -f Makefile.test clean-configs | ||
40 | cd <BUILDROOT> | ||
41 | make SUBDIRS=packages/opie package | ||
42 | |||
35 | ===================== | 43 | ===================== |
36 | = Install = | 44 | = Install = |
37 | ===================== | 45 | ===================== |
38 | 46 | ||
39 | Alternatively, you can use our precompiled ipk. Get it from | 47 | Alternatively, you can use our precompiled ipk. Get it from |
40 | http://opie.net.wox.org/elan/current. You will also need libpcap. | 48 | http://opie.net.wox.org/wellenreiter/current/. This also includes a recent libpcap. |
41 | 49 | ||
42 | ===================== | 50 | ===================== |
43 | = Run = | 51 | = Run = |
44 | ===================== | 52 | ===================== |
45 | 53 | ||
54 | There are two possible modes: <Manual> and <Automatic>. I suggest, you | ||
55 | start with the <Automatic> Mode. This works just using the "Start" | ||
56 | and "Stop" Pushbuttons in the Wellenreiter GUI. If this doesn't work, | ||
57 | then use the following strategy: | ||
58 | |||
46 | 1. Place card in monitor mode. This is device dependent. | 59 | 1. Place card in monitor mode. This is device dependent. |
47 | 60 | ||
48 | Caution: Don't do this while you're logged in via ssh | 61 | Caution: Don't do this while you're logged in via ssh |
49 | or otherwise using the wireless interface - your connection | 62 | or otherwise using the wireless interface - your connection |
50 | will freeze: The card can't be used normally when sniffing! | 63 | will freeze: The card can't be used normally when sniffing! |
51 | 64 | ||
52 | For most orinoco-based cards this can be done using | 65 | For most orinoco-based cards this can be done using either |
53 | 'iwpriv <interface> 2' or 'iwpriv <interface> 2 1'. | 66 | 'iwpriv <interface> 2' or 'iwpriv <interface> 2 1'. |
54 | 67 | ||
55 | You can check if this works, by calling 'ifconfig <interface>'. | 68 | You can check if this works, by calling 'ifconfig <interface>'. |
56 | If you see 'Protocol: UNSPEC' and an unusual long MAC-Address, | 69 | If you see 'Protocol: UNSPEC' and an unusual long MAC-Address, |
57 | then your card has been successfully set to the monitor mode. | 70 | then your card has been successfully set to the monitor mode. |
58 | 71 | ||
59 | 2. Start a channel hopper. A wireless card has several channels | 72 | 2. Start a channel hopper. A wireless card has several channels |
60 | (e.g. radio frequencies) here it can listen for beacons. | 73 | (e.g. radio frequencies) here it can listen for beacons. |
61 | Beacons are management data frames from other stations. | 74 | Beacons are management data frames from other stations. |
62 | Remember, this is radio transmission, so the card has to be | 75 | Remember, this is radio transmission, so the card has to be |
63 | "tuned" to a certain channel to be able to receive the beacons. | 76 | "tuned" to a certain channel to be able to receive the beacons. |
64 | 77 | ||
65 | In order to scan the complete frequency spectrum and thus be able | 78 | In order to scan the complete frequency spectrum and thus be able |
66 | to detect all available stations, you have to 'hop' through the | 79 | to detect all available stations, you have to 'hop' through the |
67 | channels frequently. You can do this manually (e.g. with 'iwconfig') | 80 | channels frequently. You can do this manually (e.g. with 'iwconfig') |
68 | [hahaha] or you can use a channel hopper. | 81 | [hahaha] or you can use a channel hopper. |
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp index b22c5cc..4ee9a35 100644 --- a/noncore/net/wellenreiter/gui/wellenreiter.cpp +++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp | |||
@@ -99,33 +99,33 @@ Wellenreiter::Wellenreiter( QWidget* parent, const char* name, WFlags fl ) | |||
99 | if ( daemon_fd == -1 ) | 99 | if ( daemon_fd == -1 ) |
100 | { | 100 | { |
101 | logwindow->log( "(E) Couldn't get file descriptor for commsocket." ); | 101 | logwindow->log( "(E) Couldn't get file descriptor for commsocket." ); |
102 | } | 102 | } |
103 | else | 103 | else |
104 | { | 104 | { |
105 | int flags; | 105 | int flags; |
106 | flags = fcntl( daemon_fd, F_GETFL, 0 ); | 106 | flags = fcntl( daemon_fd, F_GETFL, 0 ); |
107 | fcntl( daemon_fd, F_SETFL, flags | O_NONBLOCK ); | 107 | fcntl( daemon_fd, F_SETFL, flags | O_NONBLOCK ); |
108 | QSocketNotifier *sn = new QSocketNotifier( daemon_fd, QSocketNotifier::Read, parent ); | 108 | QSocketNotifier *sn = new QSocketNotifier( daemon_fd, QSocketNotifier::Read, parent ); |
109 | connect( sn, SIGNAL( activated( int ) ), this, SLOT( dataReceived() ) ); | 109 | connect( sn, SIGNAL( activated( int ) ), this, SLOT( dataReceived() ) ); |
110 | } | 110 | } |
111 | 111 | ||
112 | // setup GUI | 112 | // setup GUI |
113 | 113 | ||
114 | connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) ); | 114 | connect( button, SIGNAL( clicked() ), this, SLOT( buttonClicked() ) ); |
115 | button->setEnabled( false ); | 115 | // button->setEnabled( false ); |
116 | netview->setColumnWidthMode( 1, QListView::Manual ); | 116 | netview->setColumnWidthMode( 1, QListView::Manual ); |
117 | 117 | ||
118 | if ( manufacturerdb ) | 118 | if ( manufacturerdb ) |
119 | netview->setManufacturerDB( manufacturerdb ); | 119 | netview->setManufacturerDB( manufacturerdb ); |
120 | 120 | ||
121 | } | 121 | } |
122 | 122 | ||
123 | Wellenreiter::~Wellenreiter() | 123 | Wellenreiter::~Wellenreiter() |
124 | { | 124 | { |
125 | // no need to delete child widgets, Qt does it all for us | 125 | // no need to delete child widgets, Qt does it all for us |
126 | 126 | ||
127 | delete manufacturerdb; | 127 | delete manufacturerdb; |
128 | } | 128 | } |
129 | 129 | ||
130 | void Wellenreiter::handleMessage() | 130 | void Wellenreiter::handleMessage() |
131 | { | 131 | { |
@@ -222,63 +222,79 @@ void Wellenreiter::buttonClicked() | |||
222 | addNewItem( "adhoc", "ELAN", "40:03:63:E7:56:E2", false, 3, 20 ); | 222 | addNewItem( "adhoc", "ELAN", "40:03:63:E7:56:E2", false, 3, 20 ); |
223 | */ | 223 | */ |
224 | 224 | ||
225 | 225 | ||
226 | if ( daemonRunning ) | 226 | if ( daemonRunning ) |
227 | { | 227 | { |
228 | daemonRunning = false; | 228 | daemonRunning = false; |
229 | 229 | ||
230 | logwindow->log( "(i) Daemon has been stopped." ); | 230 | logwindow->log( "(i) Daemon has been stopped." ); |
231 | button->setText( "Start Scanning" ); | 231 | button->setText( "Start Scanning" ); |
232 | 232 | ||
233 | // Stop daemon - ugly for now... later better | 233 | // Stop daemon - ugly for now... later better |
234 | 234 | ||
235 | system( "killall orinoco_hopper" ); | 235 | system( "killall orinoco_hopper" ); |
236 | system( "killall wellenreiterd" ); | 236 | system( "killall wellenreiterd" ); |
237 | 237 | ||
238 | // FIXME: reset the card trying to get into a usable state again | 238 | // get configuration from config window |
239 | 239 | ||
240 | // for now, just message the user | 240 | const QString& interface = configwindow->interfaceName->currentText(); |
241 | const QString& cardtype = configwindow->deviceType->currentText(); | ||
242 | const QString& interval = configwindow->hopInterval->cleanText(); | ||
243 | |||
244 | // reset the card trying to get into a usable state again | ||
245 | |||
246 | QString cmdline; | ||
247 | cmdline.sprintf( "iwpriv %s monitor 1", (const char*) interface ); | ||
248 | system( cmdline ); | ||
249 | cmdline.sprintf( "iwpriv %s monitor 1 6", (const char*) interface ); | ||
250 | system( cmdline ); | ||
251 | cmdline.sprintf( "ifconfig %s -promisc", (const char*) interface ); | ||
252 | system( cmdline ); | ||
253 | cmdline.sprintf( "killall -14 dhcpcd" ); | ||
254 | system( cmdline ); | ||
255 | cmdline.sprintf( "killall -10 udhcpc" ); | ||
256 | |||
257 | // message the user | ||
241 | 258 | ||
242 | QMessageBox::information( this, "Wellenreiter/Opie", "You should reset your\ndevice before using it again." ); | 259 | QMessageBox::information( this, "Wellenreiter/Opie", "Your wireless card\nshould now be usable again." ); |
243 | } | 260 | } |
244 | 261 | ||
245 | else | 262 | else |
246 | { | 263 | { |
247 | 264 | ||
248 | logwindow->log( "(i) Daemon has been started." ); | 265 | logwindow->log( "(i) Daemon has been started." ); |
249 | daemonRunning = true; | 266 | daemonRunning = true; |
250 | button->setText( "Stop Scanning" ); | 267 | button->setText( "Stop Scanning" ); |
251 | 268 | ||
252 | // get configuration from config window | 269 | // get configuration from config window |
253 | 270 | ||
254 | const QString& interface = configwindow->interfaceName->currentText(); | 271 | const QString& interface = configwindow->interfaceName->currentText(); |
255 | const QString& cardtype = configwindow->deviceType->currentText(); | 272 | const QString& cardtype = configwindow->deviceType->currentText(); |
256 | const QString& interval = configwindow->hopInterval->cleanText(); | 273 | const QString& interval = configwindow->hopInterval->cleanText(); |
257 | 274 | ||
258 | if ( ( interface == "<select>" ) || ( cardtype == "<select>" ) ) | 275 | if ( ( interface == "<select>" ) || ( cardtype == "<select>" ) ) |
259 | { | 276 | { |
260 | QMessageBox::information( this, "Wellenreiter/Opie", "You must configure your\ndevice before scanning." ); | 277 | QMessageBox::information( this, "Wellenreiter/Opie", "You must configure your\ndevice before scanning." ); |
261 | return; | 278 | return; |
262 | } | 279 | } |
263 | 280 | ||
264 | // set interface into monitor mode | 281 | // set interface into monitor mode |
265 | /* Global::Execute definitely does not work very well with non-gui stuff! :( */ | 282 | /* Global::Execute definitely does not work very well with non-gui stuff! :( */ |
266 | 283 | ||
267 | QString cmdline; | 284 | QString cmdline; |
268 | |||
269 | cmdline.sprintf( "iwpriv %s monitor 2", (const char*) interface ); | 285 | cmdline.sprintf( "iwpriv %s monitor 2", (const char*) interface ); |
270 | system( cmdline ); | 286 | system( cmdline ); |
271 | cmdline.sprintf( "iwpriv %s monitor 2 1", (const char*) interface ); | 287 | cmdline.sprintf( "iwpriv %s monitor 2 1", (const char*) interface ); |
272 | system( cmdline ); | 288 | system( cmdline ); |
273 | 289 | ||
274 | // start channel hopper | 290 | // start channel hopper |
275 | 291 | ||
276 | cmdline = "orinoco_hopper "; | 292 | cmdline = "orinoco_hopper "; |
277 | cmdline += interface; | 293 | cmdline += interface; |
278 | cmdline += " -i "; | 294 | cmdline += " -i "; |
279 | cmdline += interval; | 295 | cmdline += interval; |
280 | cmdline += " &"; | 296 | cmdline += " &"; |
281 | qDebug( "execute: %s", (const char*) cmdline ); | 297 | qDebug( "execute: %s", (const char*) cmdline ); |
282 | system( cmdline ); | 298 | system( cmdline ); |
283 | qDebug( "done" ); | 299 | qDebug( "done" ); |
284 | 300 | ||