-rw-r--r-- | noncore/net/wellenreiter/ChangeLog | 1 | ||||
-rw-r--r-- | noncore/net/wellenreiter/gui/main.cpp | 101 |
2 files changed, 60 insertions, 42 deletions
diff --git a/noncore/net/wellenreiter/ChangeLog b/noncore/net/wellenreiter/ChangeLog index 55e13fc..755ed76 100644 --- a/noncore/net/wellenreiter/ChangeLog +++ b/noncore/net/wellenreiter/ChangeLog | |||
@@ -1,50 +1,51 @@ | |||
1 | 2004-??-?? Michael Lauer <mickey@Vanille.de> | 1 | 2004-??-?? Michael Lauer <mickey@Vanille.de> |
2 | 2 | ||
3 | * Added command line option "-nocheck" to skip non-root and dhcp tests | ||
3 | * Improved the speed reading the manufacturer list | 4 | * Improved the speed reading the manufacturer list |
4 | * GPS coordinates are now presented in the DMS (as opposed to decimal) format | 5 | * GPS coordinates are now presented in the DMS (as opposed to decimal) format |
5 | 6 | ||
6 | 2003-12-18 Michael Lauer <mickey@Vanille.de> | 7 | 2003-12-18 Michael Lauer <mickey@Vanille.de> |
7 | 8 | ||
8 | * Released as Version 1.0.2 (Development Snapshot) | 9 | * Released as Version 1.0.2 (Development Snapshot) |
9 | * Added automatic uploading of capture files to "The Capture Dump" site at | 10 | * Added automatic uploading of capture files to "The Capture Dump" site at |
10 | http://www.Vanille.de/projects/capturedump.spy | 11 | http://www.Vanille.de/projects/capturedump.spy |
11 | * Initial reading of the manufacturer database happens now in background | 12 | * Initial reading of the manufacturer database happens now in background |
12 | * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now. | 13 | * Removed deprecated setMonitorMode() API ==> Use setMode( "monitor" ) now. |
13 | The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that | 14 | The monitor mode now tries to use the standard IW_MODE_MONITOR first. If that |
14 | doesn't work, it falls back to using the proprietary iwpriv commands | 15 | doesn't work, it falls back to using the proprietary iwpriv commands |
15 | 16 | ||
16 | 2003-11-30 Michael Lauer <mickey@Vanille.de> | 17 | 2003-11-30 Michael Lauer <mickey@Vanille.de> |
17 | 18 | ||
18 | * Released as Version 1.0.1 (Development Snapshot) | 19 | * Released as Version 1.0.1 (Development Snapshot) |
19 | * Fixed ARP decoding for wired networks. | 20 | * Fixed ARP decoding for wired networks. |
20 | Interestingly, 802.11 encapsulates these in IP packets, while wired ethernet just tags the type_of_protocol. | 21 | Interestingly, 802.11 encapsulates these in IP packets, while wired ethernet just tags the type_of_protocol. |
21 | * Added reading GPS data from a gps daemon. | 22 | * Added reading GPS data from a gps daemon. |
22 | * Started preparations for utilizing Wellenreiter II in wired networks. | 23 | * Started preparations for utilizing Wellenreiter II in wired networks. |
23 | * Implemented persistant configuration interface and retriggerable auto detection. | 24 | * Implemented persistant configuration interface and retriggerable auto detection. |
24 | * Added QCOP interface for talking to opie-networksettings. | 25 | * Added QCOP interface for talking to opie-networksettings. |
25 | * Added parsing of DHCP packets and detecting DHCP servers. | 26 | * Added parsing of DHCP packets and detecting DHCP servers. |
26 | * Overhauled the configuration window and started with the customizable event system. | 27 | * Overhauled the configuration window and started with the customizable event system. |
27 | * Added disabling the screensaver. | 28 | * Added disabling the screensaver. |
28 | * Added automatic opening and scrolling to the network tree if a new station appears. | 29 | * Added automatic opening and scrolling to the network tree if a new station appears. |
29 | 30 | ||
30 | 2003-05-10 Michael Lauer <mickey@Vanille.de> | 31 | 2003-05-10 Michael Lauer <mickey@Vanille.de> |
31 | 32 | ||
32 | * Released as Version 1.0 (Stable) | 33 | * Released as Version 1.0 (Stable) |
33 | * Added restarting the dhcp client if having killed it before. | 34 | * Added restarting the dhcp client if having killed it before. |
34 | * Decouple dump files from live capture to shift control over 'what' is dumped to applications. | 35 | * Decouple dump files from live capture to shift control over 'what' is dumped to applications. |
35 | 36 | ||
36 | 2003-05-05 Michael Lauer <mickey@Vanille.de> | 37 | 2003-05-05 Michael Lauer <mickey@Vanille.de> |
37 | 38 | ||
38 | * Released as Version 1.0-RC1 (Release Candidate) | 39 | * Released as Version 1.0-RC1 (Release Candidate) |
39 | * Fixed rare segfaults while sniffing and operating the GUI simultaenously. | 40 | * Fixed rare segfaults while sniffing and operating the GUI simultaenously. |
40 | * Parse more data packets and detect more participating stations. | 41 | * Parse more data packets and detect more participating stations. |
41 | * Added live graph window showing the signal strength on all channels. | 42 | * Added live graph window showing the signal strength on all channels. |
42 | * Added parsing ARP packets and identifying IP addresses of participating stations. | 43 | * Added parsing ARP packets and identifying IP addresses of participating stations. |
43 | * Added parsing with optionally enabled PRISM headers (signal strength). | 44 | * Added parsing with optionally enabled PRISM headers (signal strength). |
44 | 45 | ||
45 | 2003-04-12 Michael Lauer <mickey@Vanille.de> | 46 | 2003-04-12 Michael Lauer <mickey@Vanille.de> |
46 | 47 | ||
47 | * Released as Version 1.0 (Beta) | 48 | * Released as Version 1.0 (Beta) |
48 | * GUI enhancements in the Menubar and the Toolbar. | 49 | * GUI enhancements in the Menubar and the Toolbar. |
49 | * Improved keyboard handling. | 50 | * Improved keyboard handling. |
50 | * Added sanity checks for running Wellenreiter II as non-root or with dhcp clients in the background. | 51 | * Added sanity checks for running Wellenreiter II as non-root or with dhcp clients in the background. |
diff --git a/noncore/net/wellenreiter/gui/main.cpp b/noncore/net/wellenreiter/gui/main.cpp index 55a5260..dd757b5 100644 --- a/noncore/net/wellenreiter/gui/main.cpp +++ b/noncore/net/wellenreiter/gui/main.cpp | |||
@@ -7,108 +7,125 @@ | |||
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 | #include "mainwindow.h" | 16 | #include "mainwindow.h" |
17 | #ifdef QWS | 17 | #ifdef QWS |
18 | #include <opie2/oapplication.h> | 18 | #include <opie2/oapplication.h> |
19 | #else | 19 | #else |
20 | #include <qapplication.h> | 20 | #include <qapplication.h> |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | #include <qmessagebox.h> | 23 | #include <qmessagebox.h> |
24 | #include <qstringlist.h> | 24 | #include <qstringlist.h> |
25 | 25 | ||
26 | // ==> OProcess | 26 | // ==> OProcess |
27 | #include <qdir.h> | 27 | #include <qdir.h> |
28 | #include <qfileinfo.h> | 28 | #include <qfileinfo.h> |
29 | #include <qregexp.h> | 29 | #include <qregexp.h> |
30 | #include <qtextstream.h> | 30 | #include <qtextstream.h> |
31 | 31 | ||
32 | #include <errno.h> | 32 | #include <errno.h> |
33 | #include <signal.h> | 33 | #include <signal.h> |
34 | #include <string.h> | 34 | #include <string.h> |
35 | #include <unistd.h> | 35 | #include <unistd.h> |
36 | 36 | ||
37 | int main( int argc, char **argv ) | 37 | int main( int argc, char **argv ) |
38 | { | 38 | { |
39 | #ifdef QWS | 39 | #ifdef QWS |
40 | OApplication a( argc, argv, "Wellenreiter II" ); | 40 | OApplication a( argc, argv, "Wellenreiter II" ); |
41 | #else | 41 | #else |
42 | QApplication a( argc, argv ); | 42 | QApplication a( argc, argv ); |
43 | #endif | 43 | #endif |
44 | WellenreiterMainWindow* w = new WellenreiterMainWindow(); | 44 | WellenreiterMainWindow* w = new WellenreiterMainWindow(); |
45 | #ifdef QWS | 45 | #ifdef QWS |
46 | a.showMainWidget( w ); | 46 | a.showMainWidget( w ); |
47 | #else | 47 | #else |
48 | a.setMainWidget( w ); | 48 | a.setMainWidget( w ); |
49 | w->setCaption( "Wellenreiter II" ); | 49 | w->setCaption( "Wellenreiter II" ); |
50 | w->show(); | 50 | w->show(); |
51 | #endif | 51 | #endif |
52 | 52 | ||
53 | a.processEvents(); // show the window before doing the safety checks | 53 | a.processEvents(); // show the window before doing the safety checks |
54 | int result = -1; | 54 | int result = -1; |
55 | static int killed = false; | ||
55 | 56 | ||
56 | // root check | 57 | bool check = true; |
57 | if ( getuid() ) | 58 | for ( int i = 1; i < argc; ++i ) |
58 | { | 59 | { |
59 | qWarning( QObject::tr( "Wellenreiter: trying to run as non-root!" ) ); | 60 | if ( !strcmp( "-nocheck", argv[i] ) ) |
60 | result = QMessageBox::warning( w, " - Wellenreiter II - (non-root)", QObject::tr( "You have started Wellenreiter II\n" | 61 | { |
61 | "as non-root. You will have\nonly limited functionality.\nProceed anyway?" ), | 62 | qDebug( "-nocheck found" ); |
62 | QMessageBox::Yes, QMessageBox::No ); | 63 | check = false; |
63 | if ( result == QMessageBox::No ) return -1; | 64 | break; |
65 | } | ||
64 | } | 66 | } |
65 | 67 | ||
66 | // dhcp check - NOT HERE! This really belongs as a static member to OProcess | 68 | if ( check ) |
67 | // and I want to call it like that: if ( OProcess::isRunning( QString& ) ) ... | 69 | { |
70 | // root check | ||
71 | if ( getuid() ) | ||
72 | { | ||
73 | qWarning( QObject::tr( "Wellenreiter: trying to run as non-root!" ) ); | ||
74 | result = QMessageBox::warning( w, " - Wellenreiter II - (non-root)", QObject::tr( "You have started Wellenreiter II\n" | ||
75 | "as non-root. You will have\nonly limited functionality.\nProceed anyway?" ), | ||
76 | QMessageBox::Yes, QMessageBox::No ); | ||
77 | if ( result == QMessageBox::No ) return -1; | ||
78 | } | ||
68 | 79 | ||
69 | static int killed = false; | 80 | // dhcp check - NOT HERE! This really belongs as a static member to OProcess |
81 | // and I want to call it like that: if ( OProcess::isRunning( QString& ) ) ... | ||
70 | 82 | ||
71 | QString line; | 83 | QString line; |
72 | QDir d = QDir( "/proc" ); | 84 | QDir d = QDir( "/proc" ); |
73 | QStringList dirs = d.entryList( QDir::Dirs ); | 85 | QStringList dirs = d.entryList( QDir::Dirs ); |
74 | QStringList::Iterator it; | 86 | QStringList::Iterator it; |
75 | for ( it = dirs.begin(); it != dirs.end(); ++it ) | 87 | for ( it = dirs.begin(); it != dirs.end(); ++it ) |
76 | { | 88 | { |
77 | //qDebug( "next entry: %s", (const char*) *it ); | 89 | //qDebug( "next entry: %s", (const char*) *it ); |
78 | QFile file( "/proc/"+*it+"/cmdline" ); | 90 | QFile file( "/proc/"+*it+"/cmdline" ); |
79 | file.open( IO_ReadOnly ); | 91 | file.open( IO_ReadOnly ); |
80 | if ( !file.isOpen() ) continue; | 92 | if ( !file.isOpen() ) continue; |
81 | QTextStream t( &file ); | 93 | QTextStream t( &file ); |
82 | line = t.readLine(); | 94 | line = t.readLine(); |
83 | //qDebug( "cmdline = %s", (const char*) line ); | 95 | //qDebug( "cmdline = %s", (const char*) line ); |
84 | if ( line.contains( "dhcp" ) ) break; | 96 | if ( line.contains( "dhcp" ) ) break; |
85 | } | 97 | } |
86 | if ( line.contains( "dhcp" ) ) | 98 | if ( line.contains( "dhcp" ) ) |
87 | { | ||
88 | qWarning( "Wellenreiter: found dhcp process #%d", (*it).toInt() ); | ||
89 | result = QMessageBox::warning( w, " - Wellenreiter II - (dhcp)", QObject::tr( "You have a dhcp client running.\n" | ||
90 | "This can severly limit scanning!\nShould I kill it for you?" ), | ||
91 | QMessageBox::Yes, QMessageBox::No ); | ||
92 | if ( result == QMessageBox::Yes ) | ||
93 | { | 99 | { |
94 | if ( -1 == ::kill( (*it).toInt(), SIGTERM ) ) | 100 | qWarning( "Wellenreiter: found dhcp process #%d", (*it).toInt() ); |
95 | qWarning( "Wellenreiter: can't kill process #%d (%s)", result, strerror( errno ) ); | 101 | result = QMessageBox::warning( w, " - Wellenreiter II - (dhcp)", QObject::tr( "You have a dhcp client running.\n" |
96 | else | 102 | "This can severly limit scanning!\nShould I kill it for you?" ), |
97 | killed = true; | 103 | QMessageBox::Yes, QMessageBox::No ); |
104 | if ( result == QMessageBox::Yes ) | ||
105 | { | ||
106 | if ( -1 == ::kill( (*it).toInt(), SIGTERM ) ) | ||
107 | qWarning( "Wellenreiter: can't kill process #%d (%s)", result, strerror( errno ) ); | ||
108 | else | ||
109 | killed = true; | ||
110 | } | ||
98 | } | 111 | } |
99 | } | 112 | } |
100 | 113 | ||
101 | a.exec(); | 114 | a.exec(); |
102 | 115 | ||
103 | if ( killed ) | 116 | if ( check ) |
104 | { | 117 | { |
105 | result = QMessageBox::warning( w, " - Wellenreiter II - (dhcp)", QObject::tr( "Restart your dhcp client?" ), QMessageBox::Yes, QMessageBox::No ); | 118 | |
106 | if ( result == QMessageBox::Yes ) | 119 | if ( killed ) |
107 | { | 120 | { |
108 | system( QString().sprintf( "dhclient &; udhcpcd &; dhcpcd &" ) ); | 121 | result = QMessageBox::warning( w, " - Wellenreiter II - (dhcp)", QObject::tr( "Restart your dhcp client?" ), QMessageBox::Yes, QMessageBox::No ); |
122 | if ( result == QMessageBox::Yes ) | ||
123 | { | ||
124 | system( QString().sprintf( "dhclient &; udhcpcd &; dhcpcd &" ) ); | ||
125 | } | ||
109 | } | 126 | } |
110 | } | ||
111 | 127 | ||
112 | delete w; | 128 | delete w; |
129 | } | ||
113 | return 0; | 130 | return 0; |
114 | } | 131 | } |