Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
B

؄ø–uŸã
@sèdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddlmZddlmZddlmZddlmZmZmZmZyddlZWnNek
rZz.ejdkràed	ƒn
ee›ƒe e	j ¡WddZ[XYnXee!d
œdd„Z"ye"d
dgƒZ#Wn*e$k
rRedƒe e	j ¡YnXye"ddgƒZ#Wn*e$k
rŽedƒe e	j ¡YnXddl%m%Z%ddl&m'Z'm(Z(dZ)ddœdd„Z*e!e+dœdd„Z,e!e!dœdd„Z-ej.dœdd „Z/e!e0dd!œd"d#„Z1edœd$d%„Z2ej3ed&œd'd(„Z4e!ej3d)œd*d+„Z5e0dœd,d-„Z6e0dœd.d/„Z7ee0d&œd0d1„Z8e0dœd2d3„Z9edd&œd4d5„Z:e+e;d6œd7d8„Z<Gd9d:„d:ej=ƒZ>e!dœd;d<„Z?d=d>„Z@edd&œd?d@„ZAeGdAdB„dBƒƒZBe0dœdCdD„ZCdS)Eza
profiler.helpers
~~~~~~~~~~~~~~~~

provides init functions that are used to help setup the app.
éN)Ú	b64encode)Ú	dataclass)Ú	strtobool)Úctime)ÚAnyÚDictÚListÚUnionÚmanufz required module manuf not found.)ÚcmdÚreturncCs:tj|ddddd}|jdkr6|jr*|jS|jr6|jSdS)z3Run an arbitrary CLI command and return the resultszutf-8FT)ÚencodingÚshellÚcheckÚcapture_outputrz)completed process return code is non-zero)Ú
subprocessÚrunÚ
returncodeÚstdoutÚstderr)rÚcp©rú’/build/wlanpi-profiler-CSvHZ8/wlanpi-profiler-1.0.7~rc2/debian/wlanpi-profiler/opt/wlanpi-profiler/lib/python3.7/site-packages/profiler/helpers.pyÚrun_cli_cmd-s
rZtcpdumpz	--versionzRproblem checking tcpdump version. is tcpdump installed and functioning? exiting...ÚnetstatzRproblem checking netstat version. is netstat installed and functioning? exiting...é)Ú__version__)ÚCHANNELSÚCONFIG_FILEz/var/www/html/profiler)rc	Csp|jr(|jdkrtj}|jdkr.tj}ntj}dddddiid|dd	d
dœiddg|d
œidœ}tj |¡dS)z Configure and set logging levelsÚdebugÚwarningrFÚstandardÚformatz1%(asctime)s [%(levelname)s] %(name)s: %(message)sÚdefaultzlogging.StreamHandlerzext://sys.stdout)ÚlevelÚ	formatterÚclassÚstreamÚ)Úhandlersr$)ÚversionÚdisable_existing_loggersÚ
formattersr)ÚloggersN)ÚloggingÚDEBUGÚWARNINGÚINFOÚconfigÚ
dictConfig)ÚargsZ
logging_levelZdefault_loggingrrrÚsetup_loggerXs 


r5)ÚvaluercsJt|ƒ‰dˆ}ˆdkr t|ƒ‚t‡fdd„t ¡Dƒƒr>ˆSt|ƒ‚dS)zCheck if channel is validz%s is not a valid channel valuerc3s|]}ˆ|kVqdS)Nr)Ú.0Zband)Úchannelrrú	<genexpr>{sz check_channel.<locals>.<genexpr>N)ÚintÚ
ValueErrorÚanyrÚvalues)r6Ú	error_msgr)r8rÚ
check_channelusr?)ÚssidrcCst|ƒdkrtd|ƒ‚|S)zCheck if SSID is validé z%s length is greater than 32)Úlenr;)r@rrrÚ
check_ssidsrCcCsÒtjtjdd}|jddddtjd|jdd	td
d|jdd
dd| ¡}|jddtdd|jdtdt	dd|jdddddd|jdddddd|jd d!d"d#d$|jd%d&ddd'd|jd(d)ddd*d| ¡}|jd+d,ddtjd|jd-d.ddd/d| ¡}|jd0d1ddtjd|jd2d3ddd4d|jd5d6ddtjd|jd7d8ddtjd|jd9d:ddtjd|jd;d<ddtjd|jd=d>ddd?d|jd@dAdBdCdD|jdEdFdGt
›dH|S)Iz(Set default values and handle arg parserzdwlanpi-profiler is an 802.11 client capabilities profiler. Read the manual with: man wlanpi-profiler)Úformatter_classÚdescriptionz--pytestZpytestÚ
store_trueF)ÚdestÚactionr#Úhelpz-cr8z)set the operating channel to broadcast on)rGÚtyperIz-iÚ	interfacez"set network interface for profiler)rGrIz-sr@zset profiler SSID namez--configÚFILEz<customize path for configuration file (default: %(default)s))rJÚmetavarr#rIz--files_pathÚPATHÚ
files_pathz/var/www/html/profilerzZcustomize default directory where analysis is saved on local system (default: %(default)s))rMrGr#rIz--hostname_ssidÚ
hostname_ssidz>use the WLAN Pi's hostname as SSID name (default: %(default)s)z	--loggingzchange logging outputú?)rr )rIÚnargsÚchoicesz--noprepZno_interface_prepz4disable interface preperation (default: %(default)s)z--noAPÚlisten_onlyz*enable Rx only mode (default: %(default)s)z--11rÚ
ft_enabledz--no11rÚft_disabledz/turn off 802.11r Fast Transition (FT) reportingz--11axÚ
he_enabledz--no11axÚhe_disabledz0turn off 802.11ax High Efficiency (HE) reportingz--no_sniffer_filterZno_sniffer_filterz--cleanÚcleanz--filesÚfilesz--yesÚyesz--oui_updateZ
oui_updatez?initiates update of OUI database (requires Internet connection)z--readZPCAPÚ
pcap_analysisz5read and analyze association request frames from pcap)rMrGrIz	--versionz-Vr*)rHr*)ÚargparseÚArgumentParserÚRawDescriptionHelpFormatterÚadd_argumentÚSUPPRESSr?Úadd_mutually_exclusive_grouprCÚstrrr)ÚparserZ
ssid_groupZdot11r_groupZ
dot11ax_grouprrrÚsetup_parserˆsæ





re)Ú	directoryÚacknowledgedrcCst t ¡dd¡}ddlm}t||ƒ d¡ƒ}| dd 	dd„|Dƒ¡¡|rVn&t
d	ƒ ¡ ¡d
d…dks|t
 d¡yjxdt ||ƒ¡D]R}||ƒ||ƒ}| ¡rÀtd
|›ƒ| ¡| ¡rŽtd|›ƒt |¡qŽWWn tk
r| d¡YnXd
S)zPurge files recursivelyré)ÚPathÚ*zDelete the following files: %sz, cSsg|]}t|ƒ‘qSr)rc)r7Úxrrrú
<listcomp>sz!files_cleanup.<locals>.<listcomp>zAre you sure? (y/n): NrÚyzRemoving file: zRemoving directory: zissue removing files)r.Ú	getLoggerÚinspectÚstackÚpathlibriÚlistÚrglobr ÚjoinÚinputÚlowerÚstripÚsysÚexitÚosÚlistdirÚis_fileÚprintÚunlinkÚis_dirÚshutilÚrmtreeÚOSErrorÚ	exception)rfrgÚlogriÚresultÚ_pathÚpathrrrÚ
files_cleanups&
rˆcCs¼t t ¡dd¡}d}tj |j¡r@d}t|jƒ}t	|ƒ}n| 
d|j¡i}d|krbi|d<|sŠd|dd<d	|dd
<d|dd<|d d
¡r¨t 
¡|dd<|jr¼|j|dd
<|jrÐ|j|dd<|jræ|j|dd<n|jrüt 
¡|dd<|jrd|dd<|jr&|j|dd<|jr:d|dd<|jrP|j|dd<|jrf|j|dd<|jr||j|dd<|jr”|j|dd<nt|dd<t|dd
ƒ|dd
<|S)zICreate the configuration (SSID, channel, interface, etc) for the ProfilerrrhFTzcan not find config at %sÚGENERALzWLAN Pir@é$r8Zwlan0rKrPrVrXrTr\rO)r.rnrorprzr‡Úisfiler2Úload_configÚconvert_configparser_to_dictr ÚgetÚsocketÚgethostnamer8rKr@rPrUrVrWrXrTr\rOÚ
FILES_PATHr:)r4r„Zconfig_foundrdr2rrrÚsetup_config/sR

r’)r2rc
Csli}xb| ¡D]V}i||<xH| |¡D]:\}}ytt|ƒƒ}Wntk
rRYnX||||<q&WqW|S)a
    Convert ConfigParser object to dictionary.

    The resulting dictionary has sections as keys which point to a dict of the
    section options as key => value pairs.

    If there is a string representation of truth, it is converted from str to bool.
    )ÚsectionsÚitemsÚboolrr;)r2Ú_dictÚsectionÚkeyÚ_valuerrrrns	r)Úconfig_filercCst ¡}| |¡|S)z!Load in config from external file)ÚconfigparserÚConfigParserÚread)ršr2rrrrŒƒs
rŒcCst t ¡dd¡}t|ƒs"dSy4t| d¡ d¡ƒt| d¡ d¡ƒt|ƒWn4t	k
rŠ| 
dt ¡d¡t 
tj¡YnXd	S)
z$Validate minimum config to run is OKrrhFr‰r@r8z%srT)r.rnrorpÚcheck_config_missingrCrŽr?Úverify_reporting_directoriesr;ÚerrorrxÚexc_inforyÚsignalÚSIGABRT)r2r„rrrÚvalidateŠsr¤cst‡fdd„dDƒƒS)zECheck if MAC Address <format>:'00:00:00:00:00:00' is locally assignedc3s|]}|ˆ ¡dkVqdS)rN)rv)r7Úlocal)Úmacrrr9 sz is_randomized.<locals>.<genexpr>)Ú2Ú6ÚaÚe)r<)r¦r)r¦rÚ
is_randomizedžsr«cCs”t t ¡dd¡}yPd|kr(tdƒ‚|d ¡}d|krDtdƒ‚d|krTtdƒ‚d	|krdtd
ƒ‚Wn(tk
rŽ| dt ¡d¡d
SXdS)z)Check that the minimal config items existrrhr‰z*missing general section from configurationrKzmissing interface from configr8zmissing channel from configr@zmissing ssid from configz%srFT)	r.rnrorpÚKeyErrorÚkeysr rxr¡)r2r„Úoptionsrrrrž£sržcCsÆt t ¡dd¡}y„tj tjdd¡}| 	d|¡| 	dt
tj |¡ƒ¡| 	d¡tdt
j›dd	gƒ}| 	d
t|ƒ¡| 	dt
tj |¡ƒ¡Wn&tk
rÀ| d¡tdƒd
SXdS)z9Manuf wrapper to update manuf OUI flat file from Internetrrhr
zmanuf file is located at %szmanuf file last modified at: %szrunning 'sudo manuf --update'Zsudoz
/bin/manufz--updatez%sz7problem updating manuf. make sure manuf is installed...z
exiting...FT)r.rnrorprzr‡rtr
Ú__path__ÚinforÚgetmtimerrxÚprefixrcr‚rƒr})r„Z	flat_filerrrrÚupdate_manuf·s$

r³cCs t t ¡dd¡}d|krœ|d d¡}tj |¡sH| t 	|¡¡tj 
|d¡}tj |¡sr| t 	|¡¡tj 
|d¡}tj |¡sœ| t 	|¡¡dS)z3Check reporting directories exist and create if notrrhr‰rOZclientsZreportsN)r.rnrorprŽrzr‡ÚisdirrÚmakedirsrt)r2r„rOZclients_dirZreports_dirrrrrŸÏsrŸ)r8rcCsD|dkrd}|dkr"d|d}n|dkr6d|d}|jdddS)	zGTake a channel number, converts it to a frequency, and finally to byteséi´	ig	éiˆéÚlittle)Ú	byteorder)Úto_bytes)r8ÚfreqrrrÚget_frequency_bytesãsr½c@seZdZdZdd„ZdS)Ú
Base64EncoderzA Base64 encoder for JSONcCs$t|tƒrt|ƒ ¡Stj ||¡S)zPerform default Base64 encode)Ú
isinstanceÚbytesrÚdecodeÚjsonÚJSONEncoderr#)ÚselfÚobjrrrr#õs
zBase64Encoder.defaultN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#rrrrr¾ïsr¾c	Cs€d}ybtdƒP}| ¡ ¡}x<|D]4}d|kr"d | d¡d dd¡ d	d¡ ¡¡}q"WWd
QRXWntk
rzYnX|S)zRetrieve system image versonÚunknownz/etc/wlanpi-releaseÚVERSIONz{0}ú=rú"r(ú'N)ÚopenrÚ
splitlinesr"ÚsplitÚreplacerwr‚)Zwlanpi_versionÚ_fileÚlinesÚlinerrrÚget_wlanpi_versionüs

6rÖccs:t|ƒ}t|ƒ}x|D]}|dfV|}qW|dfVdS)z0Treat the last object in an iterable differentlyFTN)ÚiterÚnext)ÚseqZ_aÚ_brrrÚflag_last_objects

rÛcCsØ|d d¡dkrÔg}| d¡| d|dd›d|dd›¡| d	¡| d
¡| d¡| d|dd›¡| d
¡tt|tdƒ}tdd|›ƒx|D]}t|ƒq®Wtd|›dƒng}|dd}|dd}|dd}|r| d|›d|›d¡n| d|›¡| d|›¡| d	¡| d
¡| d¡| d|›¡| d¡| d
¡| d¡tt|tdƒ}tdd|›ƒx|D]}t|ƒq°Wtd|›dƒdS)z)Create message to display to users screenr‰rTTz&Starting profiler in listen only mode:z) - Listening for association frames with rKz on channel r8z2 - Results are saved locally and printed to screenú z
Instructions:z4 - Associate your Wi-Fi client to any AP on channel z5 - We should passively detect the association request)r˜Ú
ú~r@z$Starting profiler AP with interface ú:z - Our fake AP SSID: z, - Associate your Wi-Fi client to our SSID: z' - Enter any random password to connectzJThe client will fail authentication but should send an association requestrÌN)rŽÚappendrBÚmaxr})r2ÚoutZ
header_lenrÕr8rKr@rrrÚgenerate_run_messagesL
"










rãc@sXeZdZUdZdZeed<dZeee	fed<dZ
eed<dZee	eeefed<dS)	Ú
Capabilityz"Define custom fields for reportingr(Únamer6Údb_keyrÚdb_valueN)
rÆrÇrÈrÉrårcÚ__annotations__r6r	r:rærçrrrrrräHs

räcCs|d|>@dkS)z.Retrieve bit value from byte at provided indexrrr)ZbytevalÚindexrrrÚget_bitRsrê)DrÉr]r›rorÂr.Úlogging.configrzr€r¢rrrxÚbase64rZdataclassesrÚdistutils.utilrÚtimerÚtypingrrrr	r
ÚModuleNotFoundErrorr rår}ryr£rcrr…r‚rÚ	constantsrrr‘r5r:r?rCr^rer•rˆr’rœrrŒr¤r«ržr³rŸrÀr½rÃr¾rÖrÛrãrärêrrrrÚ<module>
sz



?

2