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

°Æäˆ^x.,ã
@sâdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
mZddlmZddlmZddlmZddlmZmZmZmZyddlZWnNek
rZz.ejdkràed	ƒn
ee›ƒe e	j ¡WddZ[XYnXd
ddd
dddddg	Z!xBe!D]:Z"e #e"¡dkr$ede"›dƒedƒe e	j ¡q$Wddl$m$Z$ddl%m&Z&m'Z'dZ(ddœdd„Z)e*e+dœdd„Z,e*e*d œd!d"„Z-e+dœd#d$„Z.ej/dœd%d&„Z0e*e1dd'œd(d)„Z2d*d+„Z3ej4ed,œd-d.„Z5e*ej4d/œd0d1„Z6e1dœd2d3„Z7e1dœd4d5„Z8ee1d,œd6d7„Z9dRe:e*d9œd:d;„Z;e1dœd<d=„Z<edd,œd>d?„Z=e+e>d@œdAdB„Z?GdCdD„dDej@ƒZAe*dœdEdF„ZBe*dGœdHdI„ZCdJdK„ZDedd,œdLdM„ZEeGdNdO„dOƒƒZFe1dœdPdQ„ZGdS)Sza
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.ZtcpdumpÚiwÚipZethtoolZlspciZlsusbZmodprobeZmodinfoZwpa_clizIt looks like you do not have z installed.z3Please install using your distro's package manager.é)Ú__version__)ÚCHANNELSÚCONFIG_FILEz/var/www/html/profiler)Úreturnc	Cs||jr(|jdkrtj}|jdkr.tj}ntj}|jr:tj}dddddiid|dd	d
dœiddg|d
œidœ}tj |¡dS)z Configure and set logging levelsÚdebugÚwarningr
FÚ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ÚINFOrÚconfigÚ
dictConfig)ÚargsZ
logging_levelZdefault_logging©r(ú/build/wlanpi-profiler-7IIg1Q/wlanpi-profiler-1.0.11/debian/wlanpi-profiler/opt/wlanpi-profiler/lib/python3.7/site-packages/profiler/helpers.pyÚsetup_loggerHs$


r*)Úvaluercs4t|ƒ‰t‡fdd„t ¡Dƒƒr&ˆStdˆƒ‚dS)zCheck if channel is validc3s|]}ˆ|kVqdS)Nr()Ú.0Úband)Úchr(r)ú	<genexpr>jszchannel.<locals>.<genexpr>z%s is not a valid channelN)ÚintÚanyrÚvaluesÚ
ValueError)r+r()r.r)Úchannelgsr4)ÚssidrcCst|ƒdkrtd|ƒ‚|S)zCheck if SSID is validé z%s length is greater than 32)Úlenr3)r5r(r(r)r5osr5cCsvyt|ƒ}Wntk
r(tdƒ‚YnXdddg}x0|D](}|d|krZ|dkr:nq:|Sq:Wtd||ƒ‚dS)	z(Check if the provided frequency is validz%s is not a number)il	i´	)i<i)iCiËrr
z*%s not found in these frequency ranges: %sN)r0r3)ÚfreqZfreq_rangesr-r(r(r)Ú	frequencyvs

 r9cCstjtjdd}|jddddtjd| ¡}|jdd	td
d|jdd
tdd|jdddd| ¡}|jddtdd|jdt	dt
dd|jdddddd|jd d!ddd"d|jd#d$ddd%d|jd&d'd(d)d*|jd+d,ddd-d|jd.d/ddd0d| ¡}|jd1d2ddtjd|jd3d4ddd5d| ¡}|jd6d7ddtjd|jd8d9ddd:d|jd;d<ddtjd|jd=d>ddtjd|jd?d@ddtjd|jdAdBdddCd|jdDdEdFdGdH|jdIdJdddKd|jdLdMdddNd|jdOdPdQt›dR|S)Sz(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-cr4zset the channel to broadcast on)r=Útyper?z-fr8z!set the frequency to broadcast onz-iÚ	interfacez"set network interface for profiler)r=r?z-sr5zset profiler SSID namez--configÚFILEz<customize path for configuration file (default: %(default)s))r@Úmetavarrr?z--files_pathÚPATHÚ
files_pathz/var/www/html/profilerzZcustomize default directory where analysis is saved on local system (default: %(default)s))rCr=rr?z--hostname_ssidÚ
hostname_ssidz>use the WLAN Pi's hostname as SSID name (default: %(default)s)z--debugrzenable debug logging outputz	--loggingzchange logging outputú?)rr)r?Ú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--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)rCr=r?z--no_bpf_filtersZno_bpf_filterszFremoves BPF filters from sniffer() but may impact profiler performancez--list_interfacesZlist_interfacesz2print out a list of interfaces with an 80211 stackz	--versionz-Vr)r>r)ÚargparseÚArgumentParserÚRawDescriptionHelpFormatterÚadd_argumentÚSUPPRESSÚadd_mutually_exclusive_groupr4r9r5Ústrrr)ÚparserZfrequency_groupZ
ssid_groupZdot11r_groupZ
dot11ax_groupr(r(r)Úsetup_parser‡s




r[)Ú	directoryÚacknowledgedrcCs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()rY)r,Úxr(r(r)ú
<listcomp>-sz!files_cleanup.<locals>.<listcomp>zAre you sure? (y/n): Nr
ÚyzRemoving file: zRemoving directory: zissue removing files)r!Ú	getLoggerÚinspectÚstackÚpathlibr_ÚlistÚrglobrÚjoinÚinputÚlowerÚstripÚsysÚexitÚosÚlistdirÚis_fileÚprintÚunlinkÚis_dirÚshutilÚrmtreeÚOSErrorÚ	exception)r\r]Úlogr_ÚresultÚ_pathÚpathr(r(r)Ú
files_cleanup&s&
r~cCs@t t ¡dd¡}tj |j¡r8t|jƒ}t	|ƒ}n| 
d|j¡i}d|krZi|d<d|dkrrd|dd<d|dkrŠd|dd<d	|dkr¢d
|dd	<|d d¡rÀt 
¡|dd<|jrÔ|j|dd<|jrö|j|dd<d|dd<nd|dd<|jr|j|dd	<|jr0|j|dd<n|jrHt 
¡|dd<|jr\d
|dd<|jrr|j|dd<|jr†d
|dd<|jrœ|j|dd<|jr²|j|dd<|jrÈ|j|dd<|jrà|j|dd<nt|dd<y.| d¡ d¡}|rt|ƒ}||dd<Wn tk
r:| 
d¡YnX|S)zICreate the configuration (SSID, channel, interface, etc) for the Profilerrr^zcan not find config at %sÚGENERALr4é$r5zWLAN PirAZwlan0rFr9FrLrNrJrRrEz(config.ini does not have channel defined)r!rdrerfrpr}Úisfiler%Úload_configÚconvert_configparser_to_dictrÚgetÚsocketÚgethostnamer4r8rAr5rFrKrLrMrNrJrRrEÚ
FILES_PATHr0ÚKeyError)r'rzrZr%r.r(r(r)Úsetup_configAsf

r‰)r%rc
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Úboolrr3)r%Ú_dictÚsectionÚkeyÚ_valuer(r(r)rƒŒs	rƒ)Úconfig_filercCst ¡}| |¡|S)z!Load in config from external file)ÚconfigparserÚConfigParserÚread)r‘r%r(r(r)r‚¡s
r‚cCs¼t t ¡dd¡}t|ƒs"dSy`| d¡ d¡}|r@t|ƒ| d¡ d¡}|r\t|ƒ| d¡ d¡}|rxt|ƒt	|ƒWn4t
k
r¶| dt 
¡d	¡t tj¡YnXd
S)z$Validate minimum config to run is OKrr^Frr5r4r9z%sr
T)r!rdrerfÚcheck_config_missingr„r5r4r9Úverify_reporting_directoriesr3ÚerrorrnÚexc_inforoÚsignalÚSIGABRT)r%rzZ_ssidr.r8r(r(r)Úvalidate¨s$r›cst‡fdd„dDƒƒS)zECheck if MAC Address <format>:'00:00:00:00:00:00' is locally assignedc3s|]}|ˆ ¡dkVqdS)r
N)rl)r,Úlocal)Úmacr(r)r/Æsz is_randomized.<locals>.<genexpr>)Ú2Ú6ÚaÚe)r1)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 existrr^rz*missing general section from configurationrAzmissing interface from configr4zmissing channel from configr5zmissing ssid from configz%sr
FT)	r!rdrerfrˆÚkeysr—rnr˜)r%rzÚoptionsr(r(r)r•Ésr•F)ÚcmdrcCs4tj|ddddd}|s0|jr$|jS|jr0|jSdS)zMRun a single CLI command with subprocess and return stdout or stderr responsezutf-8FT)ÚencodingÚshellÚcheckÚcapture_outputzBcompleted process return code is non-zero with no stdout or stderr)Ú
subprocessÚrunÚstdoutÚstderr)r¥Zsuppress_outputÚcpr(r(r)Úrun_commandÝsr¯cCsÞt t ¡dd¡}yœtj tjdd¡}t	j
›d}| d|¡| d|¡| dttj 
|¡ƒ¡| d¡td	|d
gƒ}| dt|ƒ¡d|kr°| dttj 
|¡ƒ¡Wn&tk
rØ| d
¡tdƒdSXdS)z9Manuf wrapper to update manuf OUI flat file from Internetrr^r
z
/bin/manufzOUI database is located at %szmanuf is located at %szmanuf file last modified at: %szrunning 'sudo manuf --update'Zsudoz--updatez%sÚURLErrorz7problem updating manuf. make sure manuf is installed...z
exiting...FT)r!rdrerfrpr}rjr
Ú__path__rnÚprefixÚinforÚgetmtimer¯rYrxryrs)rzZ	flat_fileZmanuf_locationÚoutr(r(r)Ú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 notrr^rrEZclientsZreportsN)r!rdrerfr„rpr}ÚisdirrÚmakedirsrj)r%rzrEZclients_dirZreports_dirr(r(r)r–sr–)r4rcCsD|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)r4r8r(r(r)Úget_frequency_bytessr¿c@seZdZdZdd„ZdS)Ú
Base64EncoderzA Base64 encoder for JSONcCs$t|tƒrt|ƒ ¡Stj ||¡S)zPerform default Base64 encode)Ú
isinstanceÚbytesrÚdecodeÚjsonÚJSONEncoderr)ÚselfÚobjr(r(r)r1s
zBase64Encoder.defaultN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rr(r(r(r)rÀ+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Úreplacermrx)Zwlanpi_versionÚ_fileÚlinesÚliner(r(r)Úget_wlanpi_version8s

6rØ)r5c	CsJt t ¡dd¡}d}t|dƒ}| |¡| d|¡WdQRXdS)z&Update SSID record on local filesystemrr^z/etc/wlanpi-profiler/ssidÚwzupdated ssid record with: %sN)r!rdrerfrÑÚwriter)r5rzZssid_file_pathrÕr(r(r)Úupdate_ssid_recordHs

rÛccs:t|ƒ}t|ƒ}x|D]}|dfV|}qW|dfVdS)z0Treat the last object in an iterable differentlyFTN)ÚiterÚnext)ÚseqZ_aÚ_br(r(r)Úflag_last_objectSs

ràc	CsÔ|dd}|d d¡dkrâg}| d|›d|dd›d|dd	›d
¡| d¡| d¡| d¡| d
¡| d¡| d¡| d¡tt|tdƒ}tdd|›ƒx|D]}t|ƒq¾Wtd|›dƒnîg}|dd}| d|›d|dd›d|dd	›d
¡| d¡| d¡| d¡| d|›¡| d¡| d¡| d|dd›¡| d¡tt|tdƒ}tdd|›ƒx|D]}t|ƒq¬Wtd|›dƒdS)z)Create message to display to users screenrrArJTz,Starting profiler in listen only mode using z on r4z (r9ú)ú zGetting started:zK - Associate your Wi-Fi client to *any* SSID on the channel/frequency abovez5 - Any detected association requests will be profiledz? - Capabilities may vary depending on SSID and AP configurationz: - Results are then saved locally and printed on the shell)rÚ
ú~r5zStarting a fake AP using z on channel z. - Associate your Wi-Fi client to *our* SSID: z' - Enter any random password to connectz( - Authentication will fail, which is OKz/ - We should receive an association request to rN)r„Úappendr7Úmaxrs)r%rArµZ
header_lenr×r5r(r(r)Úgenerate_run_message]sH*






*






rçc@sXeZdZUdZdZeed<dZeee	fed<dZ
eed<dZee	eeefed<dS)	Ú
Capabilityz"Define custom fields for reportingrÚnamer+Údb_keyrÚdb_valueN)
rÈrÉrÊrËrérYÚ__annotations__r+r	r0rêrërr(r(r(r)rèŒs

rècCs|d|>@dkS)z.Retrieve bit value from byte at provided indexr
rr()ZbytevalÚindexr(r(r)Úget_bit–srî)F)HrËrSr’rerÄr!Úlogging.configrprvr™r…rªrnÚbase64rZdataclassesrÚdistutils.utilrÚtimerÚtypingrrrr	r
ÚModuleNotFoundErrorr—rérsroršZ__toolsZtoolÚwhichrÚ	constantsrrr‡r*rYr0r4r5r9rTr[rŒr~r‰r“rƒr‚r›r¢r•rhr¯r¶r–rÂr¿rÅrÀrØrÛràrçrèrîr(r(r(r)Ú<module>
s‚



 K

/