author | mickeyl <mickeyl> | 2005-01-29 14:09:25 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2005-01-29 14:09:25 (UTC) |
commit | 7b06e36fe27adc6a4fde2004eac13aaf8c0f0f02 (patch) (side-by-side diff) | |
tree | 5b38b6eb9d8430b0a96a2e156995bb421cc1a570 /examples/opienet | |
parent | 0db5704f66f0d08f9928f749774ee0f37bb0250d (diff) | |
download | opie-7b06e36fe27adc6a4fde2004eac13aaf8c0f0f02.zip opie-7b06e36fe27adc6a4fde2004eac13aaf8c0f0f02.tar.gz opie-7b06e36fe27adc6a4fde2004eac13aaf8c0f0f02.tar.bz2 |
examples start to appear here
-rw-r--r-- | examples/opienet/.cvsignore | 6 | ||||
-rw-r--r-- | examples/opienet/miniwellenreiter/.cvsignore | 8 | ||||
-rw-r--r-- | examples/opienet/miniwellenreiter/miniwellenreiter.cpp | 234 | ||||
-rw-r--r-- | examples/opienet/miniwellenreiter/miniwellenreiter.pro | 19 | ||||
-rw-r--r-- | examples/opienet/onetworkdemo/.cvsignore | 8 | ||||
-rw-r--r-- | examples/opienet/onetworkdemo/onetworkdemo.cpp | 176 | ||||
-rw-r--r-- | examples/opienet/onetworkdemo/onetworkdemo.pro | 12 | ||||
-rw-r--r-- | examples/opienet/opienet.pro | 3 |
8 files changed, 466 insertions, 0 deletions
diff --git a/examples/opienet/.cvsignore b/examples/opienet/.cvsignore new file mode 100644 index 0000000..8f7300c --- a/dev/null +++ b/examples/opienet/.cvsignore @@ -0,0 +1,6 @@ +Makefile* +moc* +*moc +*.o +~* + diff --git a/examples/opienet/miniwellenreiter/.cvsignore b/examples/opienet/miniwellenreiter/.cvsignore new file mode 100644 index 0000000..e0e629a --- a/dev/null +++ b/examples/opienet/miniwellenreiter/.cvsignore @@ -0,0 +1,8 @@ +miniwellenreiter +Makefile* +obj +moc* +*moc +*.o +~* + diff --git a/examples/opienet/miniwellenreiter/miniwellenreiter.cpp b/examples/opienet/miniwellenreiter/miniwellenreiter.cpp new file mode 100644 index 0000000..ebd3b5f --- a/dev/null +++ b/examples/opienet/miniwellenreiter/miniwellenreiter.cpp @@ -0,0 +1,234 @@ +#include <qdict.h> +#include <qsocketnotifier.h> +#include <qstring.h> +#include <opie2/onetwork.h> +#include <qapplication.h> +#include <opie2/opcap.h> +#include <cerrno> +#include <cstdio> +#include <cstdlib> +#include <cstring> + + +using namespace Opie::Net; +//======================== Station help class =============================== + +class Station +{ + public: + Station( QString t, int c, bool w ) : type(t), channel(c), wep(w), beacons(1) {}; + ~Station() {}; + + QString type; + int channel; + bool wep; + int beacons; +}; + +QDict<Station> stations; + +//======================== Application class =============================== + +class Wellenreiter : public QApplication +{ +Q_OBJECT +public: + Wellenreiter( int argc, char** argv ) : QApplication( argc, argv ), channel( 1 ) + { + + ONetwork* net = ONetwork::instance(); + + if ( argc < 3 ) + { + printf( "Usage: ./%s <interface> <driver> <interval>\n", argv[0] ); + printf( "\n" ); + printf( "Valid wireless interfaces (detected) are:\n" ); + + ONetwork::InterfaceIterator it = net->iterator(); + while ( it.current() ) + { + if ( it.current()->isWireless() ) + { + printf( " - '%s' (MAC=%s) (IPv4=%s)\n", (const char*) it.current()->name(), + (const char*) it.current()->macAddress().toString(), + (const char*) it.current()->ipV4Address() ); + } + ++it; + } + exit( -1 ); + } + + printf( "*******************************************************************\n" ); + printf( "* Wellenreiter mini edition 1.0.0 (C) 2003 Michael 'Mickey' Lauer *\n" ); + printf( "*******************************************************************\n" ); + printf( "\n\n" ); + + QString interface( argv[1] ); + QString driver( argv[2] ); + + printf( "Trying to use '%s' as %s-controlled device...\n", (const char*) interface, (const char*) driver ); + + // sanity checks before downcasting + ONetworkInterface* iface = net->interface( interface ); + if ( !iface ) + { + printf( "Interface '%s' doesn't exist. Exiting.\n", (const char*) interface ); + exit( -1 ); + } + if ( !iface->isWireless() ) + { + printf( "Interface '%s' doesn't support wireless extensions. Exiting.\n", (const char*) interface ); + exit( -1 ); + } + + // downcast should be safe now + wiface = (OWirelessNetworkInterface*) iface; + printf( "Using wireless interface '%s' for scanning (current SSID is '%s')...\n", (const char*) interface, (const char*) wiface->SSID() ); + + // ifconfig +promisc the interface to receive all packets + if ( !wiface->promiscuousMode() ) + { + printf( "Interface status is not promisc... switching to promisc... " ); + wiface->setPromiscuousMode( true ); + if ( !wiface->promiscuousMode() ) + { + printf( "failed (%s). Exiting.\n", strerror( errno ) ); + exit( -1 ); + } + else + { + printf( "ok.\n" ); + } + } + else + printf( "Interface status is already promisc - good.\n" ); + + // connect a monitoring strategy to the interface + if ( driver == "orinoco" ) + new OOrinocoMonitoringInterface( wiface, false ); + else + if ( driver == "hostap" ) + new OHostAPMonitoringInterface( wiface, false ); + else + if ( driver == "wlan-ng" ) + new OWlanNGMonitoringInterface( wiface, false ); + else + { + printf( "Unknown driver. Exiting\n" ); + exit( -1 ); + } + + // enable monitoring mode + printf( "Enabling monitor mode...\n" ); + wiface->setMode( "monitor" ); + + // open a packet capturer + cap = new OPacketCapturer(); + cap->open( interface ); + if ( !cap->isOpen() ) + { + printf( "Unable to open libpcap (%s). Exiting.\n", strerror( errno ) ); + exit( -1 ); + } + + // set capturer to non-blocking mode + cap->setBlocking( false ); + + // start channel hopper + //wiface->setChannelHopping( 1000 ); + + // connect + connect( cap, SIGNAL( receivedPacket(OPacket*) ), this, SLOT( receivePacket(OPacket*) ) ); + // timer + startTimer( 1000 ); + + } + + ~Wellenreiter() {}; + +public slots: + virtual void timerEvent(QTimerEvent* e) + { + wiface->setChannel( channel++ ); + if ( channel == 14 ) channel = 1; + } + + void receivePacket(OPacket* p) + { + if (!p) + { + printf( "(empty packet received)\n" ); + return; + } + + OWaveLanManagementPacket* beacon = (OWaveLanManagementPacket*) p->child( "802.11 Management" ); + if ( beacon ) + { + OWaveLanManagementSSID* ssid = static_cast<OWaveLanManagementSSID*>( p->child( "802.11 SSID" ) ); + QString essid = ssid ? ssid->ID() : QString::fromLatin1( "<unknown>" ); + + if ( stations.find( essid ) ) + stations[essid]->beacons++; + else + { + printf( "found new network @ channel %d, SSID = '%s'\n", wiface->channel(), (const char*) essid ); + stations.insert( essid, new Station( "unknown", wiface->channel(), + ((OWaveLanPacket*) beacon->parent())->usesWep() ) ); + } + return; + } + + OWaveLanDataPacket* data = (OWaveLanDataPacket*) p->child( "802.11 Data" ); + if ( data ) + { + OWaveLanPacket* wlan = (OWaveLanPacket*) p->child( "802.11" ); + if ( wlan->fromDS() && !wlan->toDS() ) + { + printf( "FromDS: '%s' -> '%s' via '%s'\n", + (const char*) wlan->macAddress3().toString(true), + (const char*) wlan->macAddress1().toString(true), + (const char*) wlan->macAddress2().toString(true) ); + } + else + if ( !wlan->fromDS() && wlan->toDS() ) + { + printf( "ToDS: '%s' -> '%s' via '%s'\n", + (const char*) wlan->macAddress2().toString(true), + (const char*) wlan->macAddress3().toString(true), + (const char*) wlan->macAddress1().toString(true) ); + } + else + if ( wlan->fromDS() && wlan->toDS() ) + { + printf( "WSD(bridge): '%s' -> '%s' via '%s' and '%s'\n", + (const char*) wlan->macAddress4().toString(true), + (const char*) wlan->macAddress3().toString(true), + (const char*) wlan->macAddress1().toString(true), + (const char*) wlan->macAddress2().toString(true) ); + } + else + { + printf( "IBSS(AdHoc): '%s' -> '%s' (Cell: '%s')'\n", + (const char*) wlan->macAddress2().toString(true), + (const char*) wlan->macAddress1().toString(true), + (const char*) wlan->macAddress3().toString(true) ); + } + return; + } + } +private: + OPacketCapturer* cap; + OWirelessNetworkInterface* wiface; + int channel; +}; + + +int main( int argc, char** argv ) +{ + Wellenreiter w( argc, argv ); + w.exec(); + return 0; +} + +#include "miniwellenreiter.moc" + diff --git a/examples/opienet/miniwellenreiter/miniwellenreiter.pro b/examples/opienet/miniwellenreiter/miniwellenreiter.pro new file mode 100644 index 0000000..d7c1fc2 --- a/dev/null +++ b/examples/opienet/miniwellenreiter/miniwellenreiter.pro @@ -0,0 +1,19 @@ +TEMPLATE = app +CONFIG = qt warn_on +HEADERS = +SOURCES = miniwellenreiter.cpp +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lopiecore2 -lopienet2 +TARGET = miniwellenreiter +MOC_DIR = moc +OBJECTS_DIR = obj + +include( $(OPIEDIR)/include.pro ) + +!isEmpty( LIBPCAP_INC_DIR ) { + INCLUDEPATH = $$LIBPCAP_INC_DIR $$INCLUDEPATH +} +!isEmpty( LIBPCAP_LIB_DIR ) { + LIBS = -L$$LIBPCAP_LIB_DIR $$LIBS +} diff --git a/examples/opienet/onetworkdemo/.cvsignore b/examples/opienet/onetworkdemo/.cvsignore new file mode 100644 index 0000000..c2638e5 --- a/dev/null +++ b/examples/opienet/onetworkdemo/.cvsignore @@ -0,0 +1,8 @@ +onetworkdemo +Makefile* +obj +moc* +*moc +*.o +~* + diff --git a/examples/opienet/onetworkdemo/onetworkdemo.cpp b/examples/opienet/onetworkdemo/onetworkdemo.cpp new file mode 100644 index 0000000..e0c93a2 --- a/dev/null +++ b/examples/opienet/onetworkdemo/onetworkdemo.cpp @@ -0,0 +1,176 @@ +/* + =. This file is part of the Opie Project + .=l. Copyright (C) 2004 Opie Team <opie-devel@handhelds.org> + .>+-= + _;:, .> :=|. This library is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This library is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +/* OPIE */ +#include <opie2/onetwork.h> +#include <opie2/ostation.h> +#include <opie2/omanufacturerdb.h> +#include <opie2/odebug.h> + +/* STD */ +#include <unistd.h> + +using namespace Opie::Net; + +int main( int argc, char** argv ) +{ + odebug << "OPIE Network Demo" << oendl; + + ONetwork* net = ONetwork::instance(); + + ONetwork::InterfaceIterator it = net->iterator(); + + while ( it.current() ) + { + odebug << "DEMO: ONetwork contains Interface '" << it.current()->name() << "'" << oendl; + odebug << "DEMO: Datalink code is '" << it.current()->dataLinkType() << "'" << oendl; + odebug << "DEMO: MAC Address is '" << it.current()->macAddress().toString() << "'" << oendl; + odebug << "DEMO: MAC Address is '" << it.current()->macAddress().toString(true) << "'" << oendl; + odebug << "DEMO: MAC Manufacturer seems to be '" << it.current()->macAddress().manufacturer() << "'" << oendl; + odebug << "DEMO: Manufacturertest1 = '" << OManufacturerDB::instance()->lookupExt( "08:00:87" ) << "'" << oendl; + odebug << "DEMO: Manufacturertest2 = '" << OManufacturerDB::instance()->lookupExt( "E2:0C:0F" ) << "'" << oendl; + odebug << "Demo: IPv4 Address is '" << it.current()->ipV4Address() << "'" << oendl; + if ( it.current()->isWireless() ) + { + OWirelessNetworkInterface* iface = static_cast<OWirelessNetworkInterface*>( it.current() ); + odebug << "DEMO: '" << iface->name() << "' seems to feature the wireless extensions." << oendl; + odebug << "DEMO: Current SSID is '" << iface->SSID() << "'" << oendl; + odebug << "DEMO: Antenna is tuned to '" << iface->frequency() << "', that is channel " << iface->channel() << "" << oendl; + + //if ( iface->mode() == OWirelessNetworkInterface::adhoc ) + //{ + //odebug << "DEMO: Associated AP has MAC Address '" << iface->associatedAP().toString() << "'" << oendl; + //} + + /* + + // nickname + odebug << "DEMO: Current NickName is '" << iface->nickName() << "'" << oendl; + iface->setNickName( "MyNickName" ); + if ( iface->nickName() != "MyNickName" ) + odebug << "DEMO: Warning! Can't change nickname" << oendl; + else + odebug << "DEMO: Nickname change successful." << oendl; + + /* + + // operation mode + odebug << "DEMO: Current OperationMode is '" << iface->mode() << "'" << oendl; + iface->setMode( "adhoc" ); + if ( iface->mode() != "adhoc" ) + odebug << "DEMO: Warning! Can't change operation mode" << oendl; + else + odebug << "DEMO: Operation Mode change successful." << oendl; + + // RF channel + odebug << "DEMO: Current Channel is '" << iface->channel() << "'" << oendl; + iface->setChannel( 1 ); + if ( iface->channel() != 1 ) + odebug << "DEMO: Warning! Can't change RF channel" << oendl; + else + odebug << "DEMO: RF channel change successful." << oendl; + + iface->setMode( "managed" ); + + */ + + /* + + // network scan + + OStationList* stations = iface->scanNetwork(); + if ( stations ) + { + odebug << "DEMO: # of stations around = " << stations->count() << "" << oendl; + OStation* station; + for ( station = stations->first(); station != 0; station = stations->next() ) + { + odebug << "DEMO: station dump following..." << oendl; + station->dump(); + } + } + + else + { + odebug << "DEMO: Warning! Scan didn't work!" << oendl; + } + + /* + + // first some wrong calls to check if this is working + iface->setPrivate( "seppel", 10 ); + iface->setPrivate( "monitor", 0 ); + + // now the real deal + iface->setPrivate( "monitor", 2, 2, 3 ); + + // trying to set hw address to 12:34:56:AB:CD:EF + + /* + + OMacAddress addr = OMacAddress::fromString( "12:34:56:AB:CD:EF" ); + iface->setUp( false ); + iface->setMacAddress( addr ); + iface->setUp( true ); + odebug << "DEMO: MAC Address now is '" << iface->macAddress().toString() << "'" << oendl; + + */ + + // monitor test + + + + odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; + iface->setMode( "monitor" ); + odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; + + sleep( 1 ); + + iface->setChannel( 1 ); + iface->setMode( "managed" ); + + //sleep( 1 ); + odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; + + /*iface->setMode( "adhoc" ); + sleep( 1 ); + odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; + iface->setMode( "managed" ); + sleep( 1 ); + odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; + iface->setMode( "master" ); + sleep( 1 ); + odebug << "DEMO: current interface mode is '" << iface->mode() << "'" << oendl; */ + + } + ++it; + } + + return 0; + +} diff --git a/examples/opienet/onetworkdemo/onetworkdemo.pro b/examples/opienet/onetworkdemo/onetworkdemo.pro new file mode 100644 index 0000000..cf293b5 --- a/dev/null +++ b/examples/opienet/onetworkdemo/onetworkdemo.pro @@ -0,0 +1,12 @@ +TEMPLATE = app +CONFIG = qt warn_on +HEADERS = +SOURCES = onetworkdemo.cpp +INCLUDEPATH += $(OPIEDIR)/include +DEPENDPATH += $(OPIEDIR)/include +LIBS += -lopiecore2 -lopienet2 +TARGET = onetworkdemo +MOC_DIR = moc +OBJECTS_DIR = obj + +include( $(OPIEDIR)/include.pro ) diff --git a/examples/opienet/opienet.pro b/examples/opienet/opienet.pro new file mode 100644 index 0000000..c7800a9 --- a/dev/null +++ b/examples/opienet/opienet.pro @@ -0,0 +1,3 @@ +TEMPLATE = subdirs +SUBDIRS = miniwellenreiter onetworkdemo + |