summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-01-06 20:23:34 (UTC)
committer mickeyl <mickeyl>2004-01-06 20:23:34 (UTC)
commita513de3ae1549428595db1b6c70e4203b0a3dedd (patch) (unidiff)
treebc6838aad156f2cb499ce69d1703d4c33839cfba
parent543c349726a63798491e85cf0dda89e79c6183d1 (diff)
downloadopie-a513de3ae1549428595db1b6c70e4203b0a3dedd.zip
opie-a513de3ae1549428595db1b6c70e4203b0a3dedd.tar.gz
opie-a513de3ae1549428595db1b6c70e4203b0a3dedd.tar.bz2
display stations sending control frames
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/ChangeLog1
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.cpp41
-rw-r--r--noncore/net/wellenreiter/gui/wellenreiter.h4
3 files changed, 38 insertions, 8 deletions
diff --git a/noncore/net/wellenreiter/ChangeLog b/noncore/net/wellenreiter/ChangeLog
index 755ed76..8bf8cc8 100644
--- a/noncore/net/wellenreiter/ChangeLog
+++ b/noncore/net/wellenreiter/ChangeLog
@@ -1,66 +1,67 @@
1 2004-??-?? Michael Lauer <mickey@Vanille.de> 1 2004-??-?? Michael Lauer <mickey@Vanille.de>
2 2
3 * Added parsing of control frames. Display stations sending them SSID "???" for now.
3 * Added command line option "-nocheck" to skip non-root and dhcp tests 4 * Added command line option "-nocheck" to skip non-root and dhcp tests
4 * Improved the speed reading the manufacturer list 5 * Improved the speed reading the manufacturer list
5 * GPS coordinates are now presented in the DMS (as opposed to decimal) format 6 * GPS coordinates are now presented in the DMS (as opposed to decimal) format
6 7
7 2003-12-18 Michael Lauer <mickey@Vanille.de> 8 2003-12-18 Michael Lauer <mickey@Vanille.de>
8 9
9 * Released as Version 1.0.2 (Development Snapshot) 10 * Released as Version 1.0.2 (Development Snapshot)
10 * Added automatic uploading of capture files to "The Capture Dump" site at 11 * Added automatic uploading of capture files to "The Capture Dump" site at
11 http://www.Vanille.de/projects/capturedump.spy 12 http://www.Vanille.de/projects/capturedump.spy
12 * Initial reading of the manufacturer database happens now in background 13 * Initial reading of the manufacturer database happens now in background
13 * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now. 14 * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now.
14 The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that 15 The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that
15 doesn't work, it falls back to using the proprietary iwpriv commands 16 doesn't work, it falls back to using the proprietary iwpriv commands
16 17
17 2003-11-30 Michael Lauer <mickey@Vanille.de> 18 2003-11-30 Michael Lauer <mickey@Vanille.de>
18 19
19 * Released as Version 1.0.1 (Development Snapshot) 20 * Released as Version 1.0.1 (Development Snapshot)
20 * Fixed ARP decoding for wired networks. 21 * Fixed ARP decoding for wired networks.
21 Interestingly, 802.11 encapsulates these in IP packets, while wired ethernet just tags the type_of_protocol. 22 Interestingly, 802.11 encapsulates these in IP packets, while wired ethernet just tags the type_of_protocol.
22 * Added reading GPS data from a gps daemon. 23 * Added reading GPS data from a gps daemon.
23 * Started preparations for utilizing Wellenreiter II in wired networks. 24 * Started preparations for utilizing Wellenreiter II in wired networks.
24 * Implemented persistant configuration interface and retriggerable auto detection. 25 * Implemented persistant configuration interface and retriggerable auto detection.
25 * Added QCOP interface for talking to opie-networksettings. 26 * Added QCOP interface for talking to opie-networksettings.
26 * Added parsing of DHCP packets and detecting DHCP servers. 27 * Added parsing of DHCP packets and detecting DHCP servers.
27 * Overhauled the configuration window and started with the customizable event system. 28 * Overhauled the configuration window and started with the customizable event system.
28 * Added disabling the screensaver. 29 * Added disabling the screensaver.
29 * Added automatic opening and scrolling to the network tree if a new station appears. 30 * Added automatic opening and scrolling to the network tree if a new station appears.
30 31
31 2003-05-10 Michael Lauer <mickey@Vanille.de> 32 2003-05-10 Michael Lauer <mickey@Vanille.de>
32 33
33 * Released as Version 1.0 (Stable) 34 * Released as Version 1.0 (Stable)
34 * Added restarting the dhcp client if having killed it before. 35 * Added restarting the dhcp client if having killed it before.
35 * Decouple dump files from live capture to shift control over 'what' is dumped to applications. 36 * Decouple dump files from live capture to shift control over 'what' is dumped to applications.
36 37
37 2003-05-05 Michael Lauer <mickey@Vanille.de> 38 2003-05-05 Michael Lauer <mickey@Vanille.de>
38 39
39 * Released as Version 1.0-RC1 (Release Candidate) 40 * Released as Version 1.0-RC1 (Release Candidate)
40 * Fixed rare segfaults while sniffing and operating the GUI simultaenously. 41 * Fixed rare segfaults while sniffing and operating the GUI simultaenously.
41 * Parse more data packets and detect more participating stations. 42 * Parse more data packets and detect more participating stations.
42 * Added live graph window showing the signal strength on all channels. 43 * Added live graph window showing the signal strength on all channels.
43 * Added parsing ARP packets and identifying IP addresses of participating stations. 44 * Added parsing ARP packets and identifying IP addresses of participating stations.
44 * Added parsing with optionally enabled PRISM headers (signal strength). 45 * Added parsing with optionally enabled PRISM headers (signal strength).
45 46
46 2003-04-12 Michael Lauer <mickey@Vanille.de> 47 2003-04-12 Michael Lauer <mickey@Vanille.de>
47 48
48 * Released as Version 1.0 (Beta) 49 * Released as Version 1.0 (Beta)
49 * GUI enhancements in the Menubar and the Toolbar. 50 * GUI enhancements in the Menubar and the Toolbar.
50 * Improved keyboard handling. 51 * Improved keyboard handling.
51 * Added sanity checks for running Wellenreiter II as non-root or with dhcp clients in the background. 52 * Added sanity checks for running Wellenreiter II as non-root or with dhcp clients in the background.
52 * Add writing and replaying of libpcap compatible capture files. 53 * Add writing and replaying of libpcap compatible capture files.
53 54
54 2003-04-08 Michael Lauer <mickey@Vanille.de> 55 2003-04-08 Michael Lauer <mickey@Vanille.de>
55 56
56 * Released as Version 0.2 (Alpha) 57 * Released as Version 0.2 (Alpha)
57 * Closed memory leak in packet capturer. 58 * Closed memory leak in packet capturer.
58 * Fixed client stations appearing under essid as access points. 59 * Fixed client stations appearing under essid as access points.
59 * Fixed false WEP reporting in some cases. 60 * Fixed false WEP reporting in some cases.
60 * Started with inspecting data packages. 61 * Started with inspecting data packages.
61 * Add detecting associated client stations in infrastructural networks (if they transmit data). 62 * Add detecting associated client stations in infrastructural networks (if they transmit data).
62 * Worked around buggy hostap drivers writing past fixed-length-structures on arm. 63 * Worked around buggy hostap drivers writing past fixed-length-structures on arm.
63 * Added dynamic checking of available private ioctls. 64 * Added dynamic checking of available private ioctls.
64 * Added a saveable hex window for packet dissection. 65 * Added a saveable hex window for packet dissection.
65 66
66 2003-03-30 Michael Lauer <mickey@Vanille.de> 67 2003-03-30 Michael Lauer <mickey@Vanille.de>
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.cpp b/noncore/net/wellenreiter/gui/wellenreiter.cpp
index 5575d6e..45d7142 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.cpp
+++ b/noncore/net/wellenreiter/gui/wellenreiter.cpp
@@ -98,314 +98,341 @@ Wellenreiter::Wellenreiter( QWidget* parent )
98 98
99Wellenreiter::~Wellenreiter() 99Wellenreiter::~Wellenreiter()
100{ 100{
101 delete pcap; 101 delete pcap;
102} 102}
103 103
104 104
105void Wellenreiter::initialTimer() 105void Wellenreiter::initialTimer()
106{ 106{
107 qDebug( "Wellenreiter::preloading manufacturer database..." ); 107 qDebug( "Wellenreiter::preloading manufacturer database..." );
108 OManufacturerDB::instance(); 108 OManufacturerDB::instance();
109} 109}
110 110
111 111
112void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw ) 112void Wellenreiter::setConfigWindow( WellenreiterConfigWindow* cw )
113{ 113{
114 configwindow = cw; 114 configwindow = cw;
115} 115}
116 116
117 117
118void Wellenreiter::channelHopped(int c) 118void Wellenreiter::channelHopped(int c)
119{ 119{
120 QString title = "Wellenreiter II -scan- ["; 120 QString title = "Wellenreiter II -scan- [";
121 QString left; 121 QString left;
122 if ( c > 1 ) left.fill( '.', c-1 ); 122 if ( c > 1 ) left.fill( '.', c-1 );
123 title.append( left ); 123 title.append( left );
124 title.append( '|' ); 124 title.append( '|' );
125 if ( c < iface->channels() ) 125 if ( c < iface->channels() )
126 { 126 {
127 QString right; 127 QString right;
128 right.fill( '.', iface->channels()-c ); 128 right.fill( '.', iface->channels()-c );
129 title.append( right ); 129 title.append( right );
130 } 130 }
131 title.append( "]" ); 131 title.append( "]" );
132 //title.append( QString().sprintf( " %02d", c ) ); 132 //title.append( QString().sprintf( " %02d", c ) );
133 assert( parent() ); 133 assert( parent() );
134 ( (QMainWindow*) parent() )->setCaption( title ); 134 ( (QMainWindow*) parent() )->setCaption( title );
135} 135}
136 136
137 137
138void Wellenreiter::handleNotification( OPacket* p ) 138void Wellenreiter::handleNotification( OPacket* p )
139{ 139{
140 QObjectList* l = p->queryList(); 140 QObjectList* l = p->queryList();
141 QObjectListIt it( *l ); 141 QObjectListIt it( *l );
142 QObject* o; 142 QObject* o;
143 143
144 while ( (o = it.current()) != 0 ) 144 while ( (o = it.current()) != 0 )
145 { 145 {
146 QString name = it.current()->name(); 146 QString name = it.current()->name();
147 if ( configwindow->parsePackets->isProtocolChecked( name ) ) 147 if ( configwindow->parsePackets->isProtocolChecked( name ) )
148 { 148 {
149 QString action = configwindow->parsePackets->protocolAction( name ); 149 QString action = configwindow->parsePackets->protocolAction( name );
150 qDebug( "parsePacket-action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); 150 qDebug( "parsePacket-action for '%s' seems to be '%s'", (const char*) name, (const char*) action );
151 doAction( action, name, p ); 151 doAction( action, name, p );
152 } 152 }
153 else 153 else
154 { 154 {
155 qDebug( "protocol '%s' not checked in parsePackets.", (const char*) name ); 155 qDebug( "protocol '%s' not checked in parsePackets.", (const char*) name );
156 } 156 }
157 ++it; 157 ++it;
158 } 158 }
159} 159}
160 160
161 161
162void Wellenreiter::handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ) 162void Wellenreiter::handleManagementFrame( OPacket* p, OWaveLanManagementPacket* manage )
163{ 163{
164 if ( manage->managementType() != "Beacon" ) return; // only handling beacons at that time
165
166 OWaveLanManagementPacket* beacon = manage;
167
164 QString type; 168 QString type;
165 if ( beacon->canIBSS() ) 169 if ( beacon->canIBSS() )
166 { 170 {
167 type = "adhoc"; 171 type = "adhoc";
168 } 172 }
169 else if ( beacon->canESS() ) 173 else if ( beacon->canESS() )
170 { 174 {
171 type = "managed"; 175 type = "managed";
172 } 176 }
173 else 177 else
174 { 178 {
175 qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" ); 179 qWarning( "Wellenreiter::invalid frame [possibly noise] detected!" );
176 return; 180 return;
177 } 181 }
178 182
179 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); 183 OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) );
180 QString essid = ssid ? ssid->ID() : QString("<unknown>"); 184 QString essid = ssid ? ssid->ID() : QString("<unknown>");
181 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) ); 185 OWaveLanManagementDS* ds = static_cast<OWaveLanManagementDS*>( p->child( "802.11 DS" ) );
182 int channel = ds ? ds->channel() : -1; 186 int channel = ds ? ds->channel() : -1;
183 187
184 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) ); 188 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
185 189
186 GpsLocation loc( 0, 0 ); 190 GpsLocation loc( -111.111, -111.111 );
187 if ( configwindow->enableGPS->isChecked() ) 191 if ( configwindow->enableGPS->isChecked() )
188 { 192 {
189 // TODO: add check if GPS is working!? 193 // TODO: add check if GPS is working!?
190 qDebug( "Wellenreiter::gathering GPS data..." ); 194 qDebug( "Wellenreiter::gathering GPS data..." );
191 loc = gps->position(); 195 loc = gps->position();
192 qDebug( "Wellenreiter::GPS data received is ( %f , %f ) - dms string = '%s'", loc.latitude(), loc.longitude(), loc.dmsPosition().latin1() ); 196 qDebug( "Wellenreiter::GPS data received is ( %f , %f ) - dms string = '%s'", loc.latitude(), loc.longitude(), loc.dmsPosition().latin1() );
193 } 197 }
194 198
195 netView()->addNewItem( type, essid, header->macAddress2(), beacon->canPrivacy(), channel, 0, loc ); 199 netView()->addNewItem( type, essid, header->macAddress2(), beacon->canPrivacy(), channel, 0, loc );
196 200
197 // update graph window 201 // update graph window
198 if ( ds ) 202 if ( ds )
199 { 203 {
200 OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) ); 204 OPrismHeaderPacket* prism = static_cast<OPrismHeaderPacket*>( p->child( "Prism" ) );
201 if ( prism ) 205 if ( prism )
202 graphwindow->traffic( ds->channel(), prism->signalStrength() ); 206 graphwindow->traffic( ds->channel(), prism->signalStrength() );
203 else 207 else
204 graphwindow->traffic( ds->channel(), 95 ); 208 graphwindow->traffic( ds->channel(), 95 );
205 } 209 }
206} 210}
207 211
208 212
213void Wellenreiter::handleControlFrame( OPacket* p, OWaveLanControlPacket* control )
214{
215 OWaveLanPacket* header = static_cast<OWaveLanPacket*>( p->child( "802.11" ) );
216
217 if ( control->controlType() == "Acknowledge" )
218 {
219 netView()->addNewItem( "adhoc", "???", header->macAddress1(), false, -1, 0, GpsLocation( -111.111, -111.111 ) );
220 }
221 else
222 {
223 qDebug( "Wellenreiter::handleControlFrame - please handle %s in a future version! :D", (const char*) control->controlType() );
224 }
225}
226
227
209void Wellenreiter::handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to ) 228void Wellenreiter::handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to )
210{ 229{
211 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" ); 230 OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" );
212 if ( wlan->fromDS() && !wlan->toDS() ) 231 if ( wlan->fromDS() && !wlan->toDS() )
213 { 232 {
214 netView()->fromDStraffic( wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() ); 233 netView()->fromDStraffic( wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() );
215 from = wlan->macAddress3(); 234 from = wlan->macAddress3();
216 to = wlan->macAddress2(); 235 to = wlan->macAddress2();
217 } 236 }
218 else if ( !wlan->fromDS() && wlan->toDS() ) 237 else if ( !wlan->fromDS() && wlan->toDS() )
219 { 238 {
220 netView()->toDStraffic( wlan->macAddress2(), wlan->macAddress3(), wlan->macAddress1() ); 239 netView()->toDStraffic( wlan->macAddress2(), wlan->macAddress3(), wlan->macAddress1() );
221 from = wlan->macAddress2(); 240 from = wlan->macAddress2();
222 to = wlan->macAddress3(); 241 to = wlan->macAddress3();
223 } 242 }
224 else if ( wlan->fromDS() && wlan->toDS() ) 243 else if ( wlan->fromDS() && wlan->toDS() )
225 { 244 {
226 netView()->WDStraffic( wlan->macAddress4(), wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() ); 245 netView()->WDStraffic( wlan->macAddress4(), wlan->macAddress3(), wlan->macAddress1(), wlan->macAddress2() );
227 from = wlan->macAddress4(); 246 from = wlan->macAddress4();
228 to = wlan->macAddress3(); 247 to = wlan->macAddress3();
229 } 248 }
230 else 249 else
231 { 250 {
232 netView()->IBSStraffic( wlan->macAddress2(), wlan->macAddress1(), wlan->macAddress3() ); 251 netView()->IBSStraffic( wlan->macAddress2(), wlan->macAddress1(), wlan->macAddress3() );
233 from = wlan->macAddress2(); 252 from = wlan->macAddress2();
234 to = wlan->macAddress1(); 253 to = wlan->macAddress1();
235 } 254 }
236} 255}
237 256
238 257
239void Wellenreiter::handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to ) 258void Wellenreiter::handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to )
240{ 259{
241 from = data->sourceAddress(); 260 from = data->sourceAddress();
242 to = data->destinationAddress(); 261 to = data->destinationAddress();
243 262
244 netView()->addNewItem( "station", "<wired>", from, false, -1, 0, GpsLocation( 0, 0 ) ); 263 netView()->addNewItem( "station", "<wired>", from, false, -1, 0, GpsLocation( -111.111, -111.111 ) );
245} 264}
246 265
247 266
248void Wellenreiter::handleARPData( OPacket* p, OARPPacket*, OMacAddress& source, OMacAddress& dest ) 267void Wellenreiter::handleARPData( OPacket* p, OARPPacket*, OMacAddress& source, OMacAddress& dest )
249{ 268{
250 OARPPacket* arp = (OARPPacket*) p->child( "ARP" ); 269 OARPPacket* arp = (OARPPacket*) p->child( "ARP" );
251 if ( arp ) 270 if ( arp )
252 { 271 {
253 qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() ); 272 qDebug( "Received ARP traffic (type '%s'): ", (const char*) arp->type() );
254 if ( arp->type() == "REQUEST" ) 273 if ( arp->type() == "REQUEST" )
255 { 274 {
256 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() ); 275 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() );
257 } 276 }
258 else if ( arp->type() == "REPLY" ) 277 else if ( arp->type() == "REPLY" )
259 { 278 {
260 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() ); 279 netView()->identify( arp->senderMacAddress(), arp->senderIPV4Address().toString() );
261 netView()->identify( arp->targetMacAddress(), arp->targetIPV4Address().toString() ); 280 netView()->identify( arp->targetMacAddress(), arp->targetIPV4Address().toString() );
262 } 281 }
263 } 282 }
264} 283}
265 284
266 285
267void Wellenreiter::handleIPData( OPacket* p, OIPPacket* ip, OMacAddress& source, OMacAddress& dest ) 286void Wellenreiter::handleIPData( OPacket* p, OIPPacket* ip, OMacAddress& source, OMacAddress& dest )
268{ 287{
269 //TODO: Implement more IP based protocols 288 //TODO: Implement more IP based protocols
270 289
271 ODHCPPacket* dhcp = (ODHCPPacket*) p->child( "DHCP" ); 290 ODHCPPacket* dhcp = (ODHCPPacket*) p->child( "DHCP" );
272 if ( dhcp ) 291 if ( dhcp )
273 { 292 {
274 qDebug( "Received DHCP '%s' packet", (const char*) dhcp->type() ); 293 qDebug( "Received DHCP '%s' packet", (const char*) dhcp->type() );
275 if ( dhcp->type() == "OFFER" ) 294 if ( dhcp->type() == "OFFER" )
276 { 295 {
277 qDebug( "DHCP: '%s' ('%s') seems to be a DHCP server.", (const char*) source.toString(), (const char*) dhcp->serverAddress().toString() ); 296 qDebug( "DHCP: '%s' ('%s') seems to be a DHCP server.", (const char*) source.toString(), (const char*) dhcp->serverAddress().toString() );
278 netView()->identify( source, dhcp->serverAddress().toString() ); 297 netView()->identify( source, dhcp->serverAddress().toString() );
279 netView()->addService( "DHCP", source, dhcp->serverAddress().toString() ); 298 netView()->addService( "DHCP", source, dhcp->serverAddress().toString() );
280 } 299 }
281 else if ( dhcp->type() == "ACK" ) 300 else if ( dhcp->type() == "ACK" )
282 { 301 {
283 qDebug( "DHCP: '%s' ('%s') accepted the offered DHCP address.", (const char*) dhcp->clientMacAddress().toString(), (const char*) dhcp->yourAddress().toString() ); 302 qDebug( "DHCP: '%s' ('%s') accepted the offered DHCP address.", (const char*) dhcp->clientMacAddress().toString(), (const char*) dhcp->yourAddress().toString() );
284 netView()->identify( dhcp->clientMacAddress(), dhcp->yourAddress().toString() ); 303 netView()->identify( dhcp->clientMacAddress(), dhcp->yourAddress().toString() );
285 } 304 }
286 } 305 }
287} 306}
288 307
289 308
290QObject* Wellenreiter::childIfToParse( OPacket* p, const QString& protocol ) 309QObject* Wellenreiter::childIfToParse( OPacket* p, const QString& protocol )
291{ 310{
292 if ( configwindow->parsePackets->isProtocolChecked( protocol ) ) 311 if ( configwindow->parsePackets->isProtocolChecked( protocol ) )
293 if ( configwindow->parsePackets->protocolAction( protocol ) == "Discard!" ) 312 if ( configwindow->parsePackets->protocolAction( protocol ) == "Discard!" )
294 return 0; 313 return 0;
295 314
296 return p->child( protocol ); 315 return p->child( protocol );
297} 316}
298 317
299 318
300bool Wellenreiter::checkDumpPacket( OPacket* p ) 319bool Wellenreiter::checkDumpPacket( OPacket* p )
301{ 320{
302 // go through all child packets and see if one is inside the child hierarchy for p 321 // go through all child packets and see if one is inside the child hierarchy for p
303 // if so, do what the user requested (protocolAction), e.g. pass or discard 322 // if so, do what the user requested (protocolAction), e.g. pass or discard
304 if ( !configwindow->writeCaptureFile->isChecked() ) 323 if ( !configwindow->writeCaptureFile->isChecked() )
305 return true; // semantic change - we're logging anyway now to /tmp/wellenreiter 324 return true; // semantic change - we're logging anyway now to /tmp/wellenreiter
306 325
307 QObjectList* l = p->queryList(); 326 QObjectList* l = p->queryList();
308 QObjectListIt it( *l ); 327 QObjectListIt it( *l );
309 QObject* o; 328 QObject* o;
310 329
311 while ( (o = it.current()) != 0 ) 330 while ( (o = it.current()) != 0 )
312 { 331 {
313 QString name = it.current()->name(); 332 QString name = it.current()->name();
314 if ( configwindow->capturePackets->isProtocolChecked( name ) ) 333 if ( configwindow->capturePackets->isProtocolChecked( name ) )
315 { 334 {
316 QString action = configwindow->capturePackets->protocolAction( name ); 335 QString action = configwindow->capturePackets->protocolAction( name );
317 qDebug( "capturePackets-action for '%s' seems to be '%s'", (const char*) name, (const char*) action ); 336 qDebug( "capturePackets-action for '%s' seems to be '%s'", (const char*) name, (const char*) action );
318 if ( action == "Discard" ) 337 if ( action == "Discard" )
319 { 338 {
320 logwindow->log( QString().sprintf( "(i) dump-discarding of '%s' packet requested.", (const char*) name ) ); 339 logwindow->log( QString().sprintf( "(i) dump-discarding of '%s' packet requested.", (const char*) name ) );
321 return false; 340 return false;
322 } 341 }
323 } 342 }
324 else 343 else
325 { 344 {
326 qDebug( "protocol '%s' not checked in capturePackets.", (const char*) name ); 345 qDebug( "protocol '%s' not checked in capturePackets.", (const char*) name );
327 } 346 }
328 ++it; 347 ++it;
329 } 348 }
330 return true; 349 return true;
331} 350}
332 351
333 352
334void Wellenreiter::receivePacket( OPacket* p ) 353void Wellenreiter::receivePacket( OPacket* p )
335{ 354{
336 hexWindow()->log( p->dump( 8 ) ); 355 hexWindow()->log( p->dump( 8 ) );
337 356
338 if ( checkDumpPacket( p ) ) 357 if ( checkDumpPacket( p ) )
339 { 358 {
340 pcap->dump( p ); 359 pcap->dump( p );
341 } 360 }
342 361
343 // check if we received a beacon frame 362 // check for a management frame
344 OWaveLanManagementPacket* beacon = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) ); 363 OWaveLanManagementPacket* manage = static_cast<OWaveLanManagementPacket*>( childIfToParse( p, "802.11 Management" ) );
345 if ( beacon && beacon->managementType() == "Beacon" ) 364 if ( manage )
365 {
366 handleManagementFrame( p, manage );
367 return;
368 }
369
370 // check for a control frame
371 OWaveLanControlPacket* control = static_cast<OWaveLanControlPacket*>( childIfToParse( p, "802.11 Control" ) );
372 if ( control )
346 { 373 {
347 handleBeacon( p, beacon ); 374 handleControlFrame( p, control );
348 return; 375 return;
349 } 376 }
350 377
351 OMacAddress source; 378 OMacAddress source;
352 OMacAddress dest; 379 OMacAddress dest;
353 380
354 //TODO: WEP check here 381 //TODO: WEP check here
355 382
356 // check for a wireless data frame 383 // check for a wireless data frame
357 OWaveLanDataPacket* wlan = static_cast<OWaveLanDataPacket*>( childIfToParse( p, "802.11 Data" ) ); 384 OWaveLanDataPacket* wlan = static_cast<OWaveLanDataPacket*>( childIfToParse( p, "802.11 Data" ) );
358 if ( wlan ) 385 if ( wlan )
359 { 386 {
360 handleWlanData( p, wlan, source, dest ); 387 handleWlanData( p, wlan, source, dest );
361 } 388 }
362 389
363 // check for a wired data frame 390 // check for a wired data frame
364 OEthernetPacket* eth = static_cast<OEthernetPacket*>( childIfToParse( p, "Ethernet" ) ); 391 OEthernetPacket* eth = static_cast<OEthernetPacket*>( childIfToParse( p, "Ethernet" ) );
365 if ( eth ) 392 if ( eth )
366 { 393 {
367 handleEthernetData( p, eth, source, dest ); 394 handleEthernetData( p, eth, source, dest );
368 } 395 }
369 396
370 // check for an arp frame since arp frames come in two flavours: 397 // check for an arp frame since arp frames come in two flavours:
371 // 802.11 encapsulates ARP data within IP packets while wired ethernet doesn't. 398 // 802.11 encapsulates ARP data within IP packets while wired ethernet doesn't.
372 OARPPacket* arp = static_cast<OARPPacket*>( childIfToParse( p, "ARP" ) ); 399 OARPPacket* arp = static_cast<OARPPacket*>( childIfToParse( p, "ARP" ) );
373 if ( arp ) 400 if ( arp )
374 { 401 {
375 handleARPData( p, arp, source, dest ); 402 handleARPData( p, arp, source, dest );
376 } 403 }
377 404
378 // check for a ip frame 405 // check for a ip frame
379 OIPPacket* ip = static_cast<OIPPacket*>( childIfToParse( p, "IP" ) ); 406 OIPPacket* ip = static_cast<OIPPacket*>( childIfToParse( p, "IP" ) );
380 if ( ip ) 407 if ( ip )
381 { 408 {
382 handleIPData( p, ip, source, dest ); 409 handleIPData( p, ip, source, dest );
383 } 410 }
384 411
385 //handleNotification( p ); 412 //handleNotification( p );
386 413
387} 414}
388 415
389 416
390void Wellenreiter::stopClicked() 417void Wellenreiter::stopClicked()
391{ 418{
392 if ( iface ) 419 if ( iface )
393 { 420 {
394 disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); 421 disconnect( SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) );
395 disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) ); 422 disconnect( SIGNAL( hopped(int) ), this, SLOT( channelHopped(int) ) );
396 iface->setChannelHopping(); // stop hopping channels 423 iface->setChannelHopping(); // stop hopping channels
397 } 424 }
398 else 425 else
399 killTimers(); 426 killTimers();
400 427
401 pcap->close(); 428 pcap->close();
402 sniffing = false; 429 sniffing = false;
403 430
404 if ( iface ) 431 if ( iface )
405 { 432 {
406 // switch off monitor mode 433 // switch off monitor mode
407 iface->setMode( "managed" ); 434 iface->setMode( "managed" );
408 // switch off promisc flag 435 // switch off promisc flag
409 iface->setPromiscuousMode( false ); 436 iface->setPromiscuousMode( false );
410 437
411 system( "cardctl reset; sleep 1" ); //FIXME: Use OProcess 438 system( "cardctl reset; sleep 1" ); //FIXME: Use OProcess
diff --git a/noncore/net/wellenreiter/gui/wellenreiter.h b/noncore/net/wellenreiter/gui/wellenreiter.h
index 58dd1fd..5414fda 100644
--- a/noncore/net/wellenreiter/gui/wellenreiter.h
+++ b/noncore/net/wellenreiter/gui/wellenreiter.h
@@ -1,104 +1,106 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved. 2** Copyright (C) 2002 Michael 'Mickey' Lauer. All rights reserved.
3** 3**
4** This file is part of Opie Environment. 4** This file is part of Opie Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14**********************************************************************/ 14**********************************************************************/
15 15
16#ifndef WELLENREITER_H 16#ifndef WELLENREITER_H
17#define WELLENREITER_H 17#define WELLENREITER_H
18 18
19#include "wellenreiterbase.h" 19#include "wellenreiterbase.h"
20 20
21#ifdef QWS 21#ifdef QWS
22#include <opie/odevice.h> 22#include <opie/odevice.h>
23using namespace Opie; 23using namespace Opie;
24#endif 24#endif
25 25
26class QTimerEvent; 26class QTimerEvent;
27class QPixmap; 27class QPixmap;
28class OPacket; 28class OPacket;
29class OWaveLanManagementPacket; 29class OWaveLanManagementPacket;
30class OWaveLanControlPacket;
30class OWaveLanDataPacket; 31class OWaveLanDataPacket;
31class OEthernetPacket; 32class OEthernetPacket;
32class OARPPacket; 33class OARPPacket;
33class OMacAddress; 34class OMacAddress;
34class OIPPacket; 35class OIPPacket;
35class OPacketCapturer; 36class OPacketCapturer;
36class OWirelessNetworkInterface; 37class OWirelessNetworkInterface;
37class WellenreiterConfigWindow; 38class WellenreiterConfigWindow;
38class MLogWindow; 39class MLogWindow;
39class MHexWindow; 40class MHexWindow;
40class GPS; 41class GPS;
41 42
42class Wellenreiter : public WellenreiterBase { 43class Wellenreiter : public WellenreiterBase {
43 Q_OBJECT 44 Q_OBJECT
44 45
45 public: 46 public:
46 Wellenreiter( QWidget* parent = 0 ); 47 Wellenreiter( QWidget* parent = 0 );
47 ~Wellenreiter(); 48 ~Wellenreiter();
48 49
49 void setConfigWindow( WellenreiterConfigWindow* cw ); 50 void setConfigWindow( WellenreiterConfigWindow* cw );
50 MScanListView* netView() const { return netview; }; 51 MScanListView* netView() const { return netview; };
51 MLogWindow* logWindow() const { return logwindow; }; 52 MLogWindow* logWindow() const { return logwindow; };
52 MHexWindow* hexWindow() const { return hexwindow; }; 53 MHexWindow* hexWindow() const { return hexwindow; };
53 bool isDaemonRunning() const { return sniffing; }; 54 bool isDaemonRunning() const { return sniffing; };
54 QString captureFileName() const { return dumpname; }; 55 QString captureFileName() const { return dumpname; };
55 56
56 public: 57 public:
57 bool sniffing; 58 bool sniffing;
58 59
59 protected: 60 protected:
60 virtual void timerEvent( QTimerEvent* ); 61 virtual void timerEvent( QTimerEvent* );
61 62
62 public slots: 63 public slots:
63 void initialTimer(); 64 void initialTimer();
64 65
65 void channelHopped(int); 66 void channelHopped(int);
66 void receivePacket(OPacket*); 67 void receivePacket(OPacket*);
67 void startClicked(); 68 void startClicked();
68 void stopClicked(); 69 void stopClicked();
69 70
70 void joinNetwork(const QString&,const QString&,int,const QString&); 71 void joinNetwork(const QString&,const QString&,int,const QString&);
71 72
72 signals: 73 signals:
73 void startedSniffing(); 74 void startedSniffing();
74 void stoppedSniffing(); 75 void stoppedSniffing();
75 76
76 private: 77 private:
77 void handleBeacon( OPacket* p, OWaveLanManagementPacket* beacon ); 78 void handleManagementFrame( OPacket* p, OWaveLanManagementPacket* manage );
79 void handleControlFrame( OPacket* p, OWaveLanControlPacket* control );
78 void handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to ); 80 void handleWlanData( OPacket* p, OWaveLanDataPacket* data, OMacAddress& from, OMacAddress& to );
79 void handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to ); 81 void handleEthernetData( OPacket* p, OEthernetPacket* data, OMacAddress& from, OMacAddress& to );
80 void handleARPData( OPacket* p, OARPPacket* arp, OMacAddress& from, OMacAddress& to ); 82 void handleARPData( OPacket* p, OARPPacket* arp, OMacAddress& from, OMacAddress& to );
81 void handleIPData( OPacket* p, OIPPacket* ip, OMacAddress& from, OMacAddress& to ); 83 void handleIPData( OPacket* p, OIPPacket* ip, OMacAddress& from, OMacAddress& to );
82 void handleNotification( OPacket* p ); 84 void handleNotification( OPacket* p );
83 void doAction( const QString& action, const QString& protocol, OPacket* p ); 85 void doAction( const QString& action, const QString& protocol, OPacket* p );
84 QObject* childIfToParse( OPacket* p, const QString& protocol ); 86 QObject* childIfToParse( OPacket* p, const QString& protocol );
85 bool checkDumpPacket( OPacket* p ); 87 bool checkDumpPacket( OPacket* p );
86 88
87 private: 89 private:
88 #ifdef QWS 90 #ifdef QWS
89 OSystem _system; // Opie Operating System identifier 91 OSystem _system; // Opie Operating System identifier
90 #endif 92 #endif
91 93
92 QString dumpname; 94 QString dumpname;
93 OWirelessNetworkInterface* iface; 95 OWirelessNetworkInterface* iface;
94 OPacketCapturer* pcap; 96 OPacketCapturer* pcap;
95 WellenreiterConfigWindow* configwindow; 97 WellenreiterConfigWindow* configwindow;
96 GPS* gps; 98 GPS* gps;
97 99
98 //void readConfig(); 100 //void readConfig();
99 //void writeConfig(); 101 //void writeConfig();
100}; 102};
101 103
102 104
103 105
104#endif 106#endif